-4

我想用汇编添加两个 30 位数字。如您所知,在 8086 中我们不能添加两个 30 位数字。所以我必须用字符串来做。并使用 AAA 命令将结果放入 sum 变量中,最后检查我们是否执行过,但主要问题是 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    
4

1 回答 1

1

谢谢我的朋友的帮助,我发现了问题。我们应该替换 mov sum[si+1], al 而不是 mov sum[si+2],al

于 2012-04-19T11:34:49.840 回答