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

Обсуждение

давно
Старший Модератор
31795
6196
30.11.2020, 14:55
общий
это ответ
Здравствуйте, 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

Удачи!
5
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа