用于计算数字组件的数字总和的代码

时间:2018-05-27 10:53:04

标签: assembly

所以我编写了下面的汇编代码来计算一个数字的总和(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

0 个答案:

没有答案