两位十进制bcd码加法

来源:百度知道 编辑:UC知道 时间:2024/07/07 09:45:33
这个结果应该是87才对,可我得到的是77,哪里错了,改错,不要给我写个新的,谢谢

STACK SEGMENT STACK
DW 64 DUP(?)
STACK ENDS
DATA SEGMENT
ORG 3700H
X DW 0208H
Y DW 0509H
ORG 3710H
Q DW ?
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV AH,00H
SAHF ;将ah送标志器
MOV CX,0002H
MOV SI,OFFSET X
MOV DI,OFFSET Q
A1:MOV AL,[SI]
ADC AL,[SI+02H]
DAA ;调整为bcd码
PUSHF ;压堆栈
AND AL,0FH ;与运算
POPF
MOV [DI],AL
INC DI
INC SI
LOOP A1
INT 03H
CODE ENDS
END START
这个程序改成两个数相减sbb al [si+02h]结果就对
怎么加法就错了
ADC是有进位加法没错

X DW0028
Y DW0059

续:
DAA是对压缩BCD码进行十进制调整,AND AL,0FH语句将清除掉高位的数据,必须删除此语句,其它部分没有问题,改过后就应该得到正确结果的。
又:ADC是有进位加法没错
ADC进位加使用的是CF标志,而十进制调整的进位加是AF标志。