Массив: посчитать количество одиночных единиц в окружении нулей - Assembler
Формулировка задачи:
Помогите решить,не могу понять!
13. Дан массив из 3 байт. Рассматривая его, как массив из 24 бит, посчитать количество одиночных единиц в окружении нулей. Конец последовательности рассматривать как нуль.
Текст программы:
что не так с этой программой!?
data segment tick1 dw ? tick2 dw ? mass db 10101010b,11111111b,010000000b data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov dx,2 mov tick1,dx lea bx, mass mov cx, 3 beg: mov al,[bx] M3: test al,00000001b ; проверяем установлен ли 0-й бит jnz M1 ; если нет то к М1 inc tick1 ;да увеличиваем счетчик для 0 shr al,1 ;сдвигаем биты inc tick2; увеличиваем счетчик битов cmp tick2,8 ;если он равен 8-ми загружаем след байт je m4 jmp M3 M1: cmp tick1,1 ; jne M2 ; если счетчик не подходит то к М2 mov tick1,0 ;подходит обнуляем его inc si ; увеличиваем счетчик совпадений 010 M2: mov tick1,0 shr al,1 inc tick2 cmp tick2,8 je m4 jmp M3 M4: mov tick2,0 add bx,1 loop beg mov ax,4c00h int 21h code ends end start
Решение задачи: «Массив: посчитать количество одиночных единиц в окружении нулей»
textual
Листинг программы
data segment a dw ? mass db 10101010b, 10101010b, 10101010b data ends data segment assume cs: code, ds: data start: mov ax, data mov ds, ax xor dx, dx mov cx, 3 lea bx, mass beg: mov al, [bx] beg1: jc no test al,1 jz no test al, 2 jnz no inc dx no: loop beg1 shr ax,1 loop beg mov a, dx quit:mov ax, 4c00h int 21h code ends end start