为什么我没有得到正确的结果
问题描述:
我想在程序集中添加两个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
答
谢谢我的朋友对我的帮助,我发现了这个问题。我们应该有更换 MOV和[SI + 1],人 代替 MOV和[SI + 2],人
当你的问题被充分地回答,你应该接受现场给出最好的答案,即使这是你自己的! (这会给你一个徽章) – SamStar 2012-04-19 14:43:50