Массив: посчитать количество одиночных единиц в окружении нулей - 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

Оцени полезность:

7   голосов , оценка 4.286 из 5
Похожие ответы