2012-04-15 134 views
-4

我想在程序集中添加两个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

谢谢我的朋友对我的帮助,我发现了这个问题。我们应该有更换 MOV和[SI + 1],人 代替 MOV和[SI + 2],人

+1

当你的问题被充分地回答,你应该接受现场给出最好的答案,即使这是你自己的! (这会给你一个徽章) – SamStar 2012-04-19 14:43:50

相关问题