Найти сумму цифр данного четырехзначного числа. Где ошибка? - Assembler
Формулировка задачи:
stk SEGMENT
db 256 DUP (0)
stk ENDS
data segment
mess db ' $'
data ends
text SEGMENT
ASSUME CS:text, DS:stk, SS:data
begin:
mov ax, 1234
xor dx, dx
mov bl, 10
m:
div bl
add dl, ah
inc dh
xor ah, ah
cmp ax, 0
jne m
add dl,1
mov al,dl
mov bx,0A30h
xor ah,ah
div bh
add bl,ah
xor ah,ah
div bh
mov dx,3030h
add dx,ax
mov ah,2
int 21h
mov dl,dh
int 21h
mov dl,bl
int 21h
xor ah,ah
int 16h
mov ah,4Ch
int 21h
text ENDS
END beginРешение задачи: «Найти сумму цифр данного четырехзначного числа. Где ошибка?»
textual
Листинг программы
mov ax,9999 xor cx,cx mov bx,10 @@: cwd div bx add cx,dx or ax,ax jne @b; в cx сумма цифр
Объяснение кода листинга программы
- mov ax,9999 - Переменная
axпринимает значение 9999. - xor cx,cx — Переменная
cxинициализируется как 0. - mov bx,10 - Переменная
bxпринимает значение 10. - cwd - Команда деления по модулю 10 (с остатком) с регистра bx на регистр dx.
- div bx - Деление регистра bx на 10 с остатком.
- add cx,dx - Сумма цифр числа в регистре dx добавляется к переменной
cx. - or ax,ax - Переменная
axустанавливается равной 0. - jne @b - Если переменная
cxне равна 0, то происходит переход к метке@b. - В переменной
cxхранится сумма цифр числа.