Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

quirck
Статус: 1-й класс
Рейтинг: 29
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 0
∙ повысить рейтинг »
Evgen aka Chuma
Статус: 5-й класс
Рейтинг: 0
∙ повысить рейтинг »

∙ Assembler

Номер выпуска:1655
Дата выхода:24.09.2017, 11:45
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:44 / 16
Вопросов / ответов:1 / 1

Консультация # 191366: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Имеется задача. Даны 3 квадратные матрицы различных размерностей. Для каждой из них заменить нулями все ее четные элементы, расположенные на главной диагонали или выше нее. Подсчитать количество таких замен. Имеется код TASM(очень корявый, возможно неработающий), но...

Консультация # 191366:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

Имеется задача. Даны 3 квадратные матрицы различных размерностей. Для каждой из них заменить нулями все ее четные элементы, расположенные на главной диагонали или выше нее. Подсчитать количество таких замен.
Имеется код TASM(очень корявый, возможно неработающий), но программа нужна на NASM

Дата отправки: 19.09.2017, 11:37
Вопрос задал: ksenya241 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Зенченко Константин Николаевич (Модератор):

Здравствуйте, ksenya241!

Писал в FASM, компилировал NASM:

Код (Assembler) :: выделить код
org	100h
	mov	cx,3
	mov	di,ddArray
	mov	si,dwSize
@@01:	call	inputMatrix
	add	si,2
	loop	@@01
	mov	cx,3
	mov	di,ddArray
	mov	si,dwSize
@@02:	call	jobMatrix
	add	si,2
	loop	@@02
	mov	cx,3
	mov	di,ddArray
	mov	si,dwSize
@@03:	call	outputMatrix
	add	si,2
	loop	@@03
	xor	ax,ax
	int	16h
	ret
inputMatrix:
	inc	byte[dbMatrixSize]
	inc	byte[dbMatrixNumber]
	push	cx
IM0:	mov	ah,9
	mov	dx,dbEnterSize
	int	21h
	call	inputNumber
	or	ax,ax
	jz	IM0
	mov	[si],ax
	mov	cx,[si]
IM1:	push	cx
	call	convertNumber
	mov	[dwRowIn],ax
	mov	cx,[si]
IM2:	call	convertNumber
	mov	[dwColIn],ax
	mov	ah,9
	mov	dx,dbEnterNumber
	int	21h
	call	inputNumber
	stosd
	loop	IM2
	pop	cx
	loop	IM1
	pop	cx
	ret
jobMatrix:
	push	cx
	mov	cx,[si]
JM1:	mov	bx,cx
	mov	cx,[si]
JM2:	cmp	bx,cx
	jb	JM3
	mov	eax,[di]
	test	eax,1
	jnz	JM3
	xor	eax,eax
	mov	[di],eax
JM3:	add	di,4
	loop	JM2
	mov	cx,bx
	loop	JM1
	pop	cx
	ret
outputMatrix:
	push	cx
	inc	byte[dbMatrixName]
	xor	cx,cx
	call	convertNumber
	mov	[dwRowOut],ax
	mov	[dwColOut],ax
	mov	ah,9
	mov	dx,dbOutputMatrix
	int	21h
	mov	cx,[si]
OM1:	push	cx
	mov	al,10
	int	29h
	mov	al,13
	int	29h
	mov	cx,[si]
OM2:	mov	eax,[di]
	call	outputNumber
	add	di,4
	loop	OM2
	pop	cx
	loop	OM1
	pop	cx
	ret
inputNumber:
	push	di
	xor	edi,edi
	mov	ebx,10
IN1:	xor	ax,ax
	int	16h
	cmp	al,13
	jz	IN2
	cmp	al,'0'
	jb	IN1
	cmp	al,'9'
	ja	IN2
	int	29h
	and	eax,0Fh
	xchg	edi,eax
	xor	edx,edx
	mul	ebx
	add	edi,eax
	jmp	IN1
IN2:	mov	eax,edi
	pop	di
	ret
outputNumber:
	push	cx
	mov	ebx,10
	xor	cx,cx
ON1:	xor	edx,edx
	div	ebx
	push	dx
	inc	cx
	or	eax,eax
	jnz	ON1
	mov	al,' '-30h
ON2:	push	ax
	inc	cx
	cmp	cx,6
	jb	ON2
ON3:	pop	ax
	add	al,30h
	int	29h
	loop	ON3
	pop	cx
	ret
convertNumber:
	mov	ax,[si]
	sub	ax,cx
	aam
	add	ax,3031h
	xchg	al,ah
	ret
dbEnterSize	db	10,13,'Enter matrix '
dbMatrixSize	db	'@ size:$'
dbOutputMatrix	db	10,10,13,'Output matrix '
dbMatrixName	db	'@['
dwRowOut	dw	0
		db	','
dwColOut	dw	0
		db	']:$'
dbEnterNumber	db	10,13,'Enter value '
dbMatrixNumber	db	'@['
dwRowIn 	dw	0
		db	','
dwColIn 	dw	0
		db	']:$'
dwSize	dw	0,0,0;3 dup(?)
ddArray dd	0

Единственное, на что ругался NASM, это не инициализированные переменные, пришлось "?" заменить на "0".

Удачи!

Консультировал: Зенченко Константин Николаевич (Модератор)
Дата отправки: 19.09.2017, 16:16
Прикреплённый файл: посмотреть » [52.7 кб]

5
Быстро и четко, что нужно объяснят. Огромное спасибо
-----
Дата оценки: 20.09.2017, 18:31

Рейтинг ответа:

НЕ одобряю +1 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное