Лидеры рейтинга

ID: 226425

Konstantin Shvetski

Мастер-Эксперт

1034

Россия, Северодвинск


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

657

Россия, пос. Теплоозёрск, ЕАО


ID: 400669

epimkin

Профессионал

366


ID: 401284

Михаил Александров

Академик

353

Россия, Санкт-Петербург


ID: 137394

Megaloman

Мастер-Эксперт

258

Беларусь, Гомель


ID: 400484

solowey

Профессор

96


ID: 401888

puporev

Профессор

53

Россия, Пермский край


8.1.6

02.01.2021

JS: 2.2.2
CSS: 4.2.0
jQuery: 3.5.1


 

• Assembler

Создание программ на языке Assembler.

Администратор раздела: Зенченко Константин Николаевич (Старший модератор)


Коцюрбенко Алексей Владимирович
Статус: Старший модератор
Рейтинг: 2217
Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 255
Лысков Игорь Витальевич
Статус: Мастер-Эксперт
Рейтинг: 0
 

Перейти к консультации №:
 

Консультация онлайн # 199729
Раздел: • Assembler
Автор вопроса: AlexAnonim (Посетитель)
Дата: 27.11.2020, 15:12
Поступило ответов: 1

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Задан массив байт. Определить суммы четных и нечетных элементов массива. Если абсолютные значения сумм не равны, то каждый второй элемент увеличить на единицу. Вывести результаты работы программы на экран в двоичном коде.
Написать требуется на платформе ДОС.

Состояние: Консультация закрыта

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

Код TASM:

model	tiny,pascal
locals	@@
.code
org	100h
sizeMas	equ	20
sizeNum	equ	4
begin:	lea	dx,dbMas
	mov	cx,sizeMas
	cld
	call	OutMas,dx,cx
	Call	SummMas,dx,cx
	jz	@@01
	call	SetMas,dx,cx
@@01:	call	OutMas,dx,cx
	xor	ax,ax
	int	16h
	ret
OutMas	proc	a:word,b:word
uses	ax,cx,si
	mov	al,10
	int	29h
	mov	al,13
	int	29h
	mov	si,a
	mov	cx,b
	xor	ax,ax
@@01:	lodsb
	call	OutNum,ax
	loop	@@01
	ret
OutMas	endp
OutNum	proc	a:word
uses	ax,bx,cx,dx
	mov	ax,a
	xor	cx,cx
	mov	bl,10
@@01:	neg	al
	js	@@01
@@02:	xor	ah,ah
	div	bl
	inc	cx
	xchg	ah,al
	or	al,'0'
	push	ax
	xchg	ah,al
	or	al,al
	jnz	@@02
	mov	ax,a
	and	al,80h
	mov	al,' '
	jz	@@03
	mov	al,'-'
@@03:	inc	cx
	push	ax
	mov	al,' '
	cmp	cx,sizeNum
	jnz	@@03
@@04:	pop	ax
	int	29h
	loop	@@04
	ret
OutNum	endp
SummMas	proc	a:word,b:word
uses	ax,bx,dx,cx,si
	xor	dx,dx
	xor	bx,bx
	mov	si,a
	mov	cx,b
	xor	ah,ah
@@01:	lodsb
	test	al,01
	jnz	@@02
	add	dx,ax
	jmp	@@03
@@02:	add	bx,ax
@@03:	loop	@@01
@@04:	neg	bx
	js	@@04
@@05:	neg	dx
	js	@@05
	mov	ax,bx
	sub	ax,dx
	ret
SummMas	endp
SetMas	proc	a:word,b:word
uses	ax,bx,cx,si,di
	mov	si,a
	mov	di,a
	mov	cx,b
	xor	bx,bx
@@01:	lodsb
	add	ax,bx
	stosb
	xor	bx,1
	loop	@@01
	ret
SetMas	endp
dbMas	label	byte
i	=	-10
	rept	sizemas
	db	i
	i	=i+1
	endm	
end	begin

Удачи!


Консультировал: Зенченко Константин Николаевич (Старший модератор)
Дата отправки: 30.11.2020, 14:55

5
нет комментария
-----
Дата оценки: 30.11.2020, 17:08

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

+2

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.