Подсчет в целочисленном массиве суммы элементов - Assembler

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

Составить программу для подсчета в целочисленном массиве суммы элементов, предшествующих первому нулевому элементу. При отсутствии нулевых элементов выдать соответствующее сообщение и подсчитать сумму всех элементов массива.

Код к задаче: «Подсчет в целочисленном массиве суммы элементов - Assembler»

textual
.model small
.stack 100h
.data
    arr db 1,2,3,4,5,0,7,8,9,10,11,12,13
    len dw $-arr  
    res_hlp1 db "No null elements! Result: $"
    res_hlp2 db "Exist null elements! Result: $"
.code
begin:
    mov ax, @data
    mov ds, ax
    mov es, ax
   
    lea si, arr
    mov cx, len
    xor bl, bl  
    xor dx, dx
c1:
    add bl, arr[si] ; bl = bl + arr[si]
    cmp arr[si], 0   ; сравниваем с нулем
    jne skip ; arr[si] != 0 -> skip
    jmp stop ; arr[si] == 0 -> stop
skip:
    inc si ; si = si + 1
    loop c1 ; цикл
   
stop:  
    cmp cx, 0 ; сравниваем СХ с нулем
    jne msg2 ; если не равно - значит есть нулевые элементы (т.к. цикл прерван был раньше времени)
    lea dx, res_hlp1
    jmp ex
msg2:
    lea dx, res_hlp2
ex:
    mov ah, 9 ; выводим сообщение
    int 21h
    mov al, bl ; тут выводим сумму элементов (единственный момент - корректно выводит числа от 0 до 99). Если нужно трёхзначное - напишите.
    aam
    or ax, 3030h
    mov dl, ah
    mov dh, al
    mov ah, 2
    int 21h
    mov dl, dh
    int 21h
 
    mov ax, 4c00h
    int 21h    
ends
 
end begin

10   голосов, оценка 4.200 из 5


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