为什么我没有得到正确的结果

时间:2012-04-15 16:38:35

标签: assembly x86 x86-16

我想用汇编添加两个30位数字。正如您在8086中所知,我们无法添加两个数字,包含30位数字。所以我必须用字符串来做。并使用AAA命令并将结果放入sum变量,最后检查我们是否执行,但主要问题是总和的结果不正确。它给了我59427532这个668399 + 759133的总和。

你能告诉我确切的问题在哪里吗?

    .model small
    .stack 64
    .data
    max1 db 30  
    acc1 db ?
    num1 db 30 dup('0')
    max2 db 30
    acc2 db ?
     num2 db 30
    sum db 31 dup('0'),'$'
    .code 
    start:
     mov ax,@data
     mov ds, Ax
     mov ah,0ah
     lea dx, max1   ;take max 1 and length store it to acc1
     int 21h 
     mov ah,0ah
     lea dx,max2    ;take max2 and length store it to acc2
     int 21h
       mov cl,acc1  ;check if they are equal
     cmp cl,acc2
     jne exit
     mov ch,0   ;make sure our cx is the length of our string
     clc
      mov si,cx ;set the length for index the char
      dec si        
      l1:
      mov al,num1[si]   ;sum two hex number
      adc al,num2[si]   ;add with carry flag
       aaa          ;seperate carry and  hex number and store it into al
       pushf    
       add al,30h       ;convert it to ascii again
       mov sum[si+2],al ;because of dec si we have to step
       popf
       dec si
       loop l1
       jne print
        mov sum,31h     ; if we have carry flag add to sum otherwise jumpt print 
       print:
       mov ah,09h       ;the main problem is here shows the result
       lea dx,sum
        int 21h                      
       exit:
      mov ax,4c00h
       int 21h
     end start    

1 个答案:

答案 0 :(得分:1)

谢谢你的帮助,我找到了问题。我们应该更换 mov sum [si + 1],al 代替 mov sum [si + 2],al