Посчитать количество байт в массиве - Assembler

Формулировка задачи:

Дан массив из 6 байт. Посчитать количество байт, число единиц в которых не превышает 3.

Код к задаче: «Посчитать количество байт в массиве - Assembler»

textual
.model small
.stack 100h
.data
a db 1,2,3,15,15,14
len dw $-a
.code
begin:
mov     ax,     @data
mov     ds,     ax
mov     es,     ax  
 
mov     cx,     len     ; помещаем в СХ длину массива  
lea     si,     a       ; в SI адрес массива
xor     bx,     bx      ; BX - счётчик байтов, где не более 3-х единиц
c1:    
mov     al,     a[si]   ; загружаем в AL очередной элемент массива
xor     dx,     dx      ; DX = 0, счётчик единиц в байте
c2:    
test    al,     al      ; сравниваем с нулём. test - побитовое & без сохранения результата. Команда воздействует на флаги
je      skp1            ; Если = 0 -> goto skp1 (выходим из цикла, т.к. сдвигать больше нечего)
shr     al,     1       ; если != 0, сдвигаем вправо на 1 разряд. Ушедший разряд попадает в CF (Carry Flag)
adc     dx,     0       ; DX = DX + 0 + CF
jmp     c2              ; Возвращаемся к С2
skp1:            
cmp     dx,     3       ; сравниваем DX с 3
jg      skp2            ; если DX > 3 - goto skp2
inc     bx              ; Увеличиваем bx на 1
skp2:
inc     si              ; увеличиваем индекс на 1
loop    c1
 
mov     dx,     bx      ; выводим результат
add     dx,     '0'
mov     ah,     2
int     21h      
 
mov     ah,     4ch
int     21h
end begin

8   голосов, оценка 4.250 из 5


СОХРАНИТЬ ССЫЛКУ