На
.model small
.stack 100h
.data
msg1 db 'Enter number (0 to finish): $'
msg2 db 13, 10, 'Product is: $'
product dw 1 ; Для хранения произведения
temp dw 0 ; Временная переменная
count db 0 ; Счетчик введенных чисел
.code
start:
mov ax, @data
mov ds, ax
input_loop:
; Вывод приглашения
mov dx, offset msg1
mov ah, 9
int 21h
; Ввод числа
mov ah, 1
int 21h
; Преобразование ASCII в число
sub al, '0'
mov ah, 0
mov temp, ax
; Проверка на ввод 0 (условие выхода)
cmp temp, 0
je print_result
; Умножение на введенное число
mov ax, product
mul temp
mov product, ax
; Увеличение счетчика
inc count
; Демонстрация LOOP
mov cl, 1
delay_loop:
loop delay_loop
; Демонстрация LOOPE/LOOPZ
mov cx, 5
mov al, 0
equal_loop:
cmp al, 0
loope equal_loop
; Демонстрация LOOPNE/LOOPNZ
mov cx, 5
mov al, 1
not_equal_loop:
cmp al, 0
loopne not_equal_loop
jmp input_loop
print_result:
; Проверка, было ли введено хотя бы одно число
cmp count, 0
je exit
; Вывод сообщения о результате
mov dx, offset msg2
mov ah, 9
int 21h
; Преобразование числа в ASCII и вывод
mov ax, product
mov bx, 10
mov cx, 0
convert_loop:
mov dx, 0
div bx
push dx
inc cx
test ax, ax
jnz convert_loop
print_loop:
pop dx
add dl, '0'
mov ah, 2
int 21h
loop print_loop
exit:
mov ah, 4ch
int 21h
end start
возможных циклов в Assembler (LOOP, LOOPE/LOOPZ, LOOPNE/LOOPNZ). В пункте
описывается то, что должно быть в цикле.
задание
Вычислить произведение введенных чисел пользователем.