помогите пожалуста,а то в армию придётся топать(((

  • Автор темы deni
  • Дата начала
D

deni

#1
что-то нужно подправить,а я не понимаю что...не бум-бум в ассемблере :(




data segment
NB db 04h, 07h, 14h, 23h, 04h,38h, 3Fh, 2Ah0Dh, 34h
data ends
code segment
assume cs: code. ds:data
START: mov ax, data
mov ds, ax ; Загрузить сегментный адрес данных
lea bx, NB ; bx-текущий адрес массива NB
mov cx, 10 ; cx-счетчик числа итераций
BEG: mov al, [bx] ; считать очередной байт массива
test al, 1b ; установлен ли бит 0?
jz BITOCLR ; нет, бит 0 сброшен
; бит 0 установлен
test al, 0ffh ; четное число единиц?
jp OK ; да, больше ничего делать не надо
or al, 80h ; нечетное дополнить до четного?
jmp short OK
; бит 0 сброшен
BITOCLR: test al, 0ffh ; четное число единиц?
jnp OK ; нет, больше ничего делать не нужно
or al,80h ; нечетное, дополнить до нечетного

OK: mov [bx], al ; записать измененный байт массива
loop BEG
QUIT: mov ax, 4c00h ; Код завершения 0
Int 21h ; Выход в DOS
code ends
end START


Дан массив из 8 байт. Рассматривая его, как массив из 64 бит, посчитать количество пар единиц в окружении нулей. Конец последовательности рассматривать как нуль.