所以我编写了下面的汇编代码来计算一个数字的总和(TASM)。问题是它一直显示我除以零。这是什么意思,错误在哪里?我是新手汇编所以任何帮助都会很棒。这是代码:
dosseg
.model small
.stack
.data
nr DB 10,10 dup(?)
rezultat DB 10,10 dup(?)
mesaj db 13,10,'Introduceti numarul:$'
mesaj_suma db 13,10,'Suma cifrelor numarului este: $'
.code
pstart:
mov ax,@data
mov ds,ax
mov ah,09 ; aici se afiseaza mesajul initial de introducere
mov dx,offset mesaj ; a numarului
int 21h
mov ah,0ah ; functia 10(0ah) citeste un sir de caractere de la
; tastatura intr-o variabila de memorie
mov dx,offset nr
int 21h
mov si,1
mov cl,nr[si] ; incarc in CL numarul de cifre al numarului introdus
and cx,00FFh
inc cx ; CX stocheaza acum ultima pozitie din sirul de cifre
xor ax,ax ; stocam rezultatul in AX, pe care il initializam cu zero
urmatorul_caracter:
inc si ; SI creste de la inceputul sirului spre sfarsit
add al,nr[si]
sub al,30h ; scadem codul ASCII al lui zero
cmp si,cx ; in sir se va merge pana la pozitia cl+1
jne urmatorul_caracter
xor si,si
cifra:
mov bx,0ah
div bx
add dl,30h
mov rezultat[si],dl
inc si
xor dx,dx
cmp ax,0
jne cifra
mov ah,9
mov dx,offset mesaj_suma
int 21h
caracter:
dec si
mov ah,02
mov dl,rezultat[si]
int 21h
cmp si,0
jne caracter
mov ah,4ch
int 21h ; terminarea programului
END pstart