关于BCD码的疑问
请问我直接用DIV,ADD,SUB等指令进行二进制计算后取得计算后的二进制结果然后在高级语言中对它进行处理不就行了么?
为什么还要用DAA,DAS等进行BCD码的调整呢?
DAA,DAS等主要用于什么方面的用途?
我不明白。
比如:
;计算W<-X+Y+24-Z
;X,Y,Z都为字格式
MOV AX,X ;将X的低位移到AX
MOV DX,X+2 ;将X的高位(X+2)移动到DX
;因为在INTEL X86中,AX保存字的低半位,
;DX保存字的高半位
ADD AX,Y ;将Y的低半位同AX中的X的低半位相加
ADC DX,Y+2 ;将Y的高半位同DX中的X的高半位相加
ADD AX,24 ;将十进制数24和AX相加(因为字的半位是8位,
;最多可以表示至十进制的255,因24小于255,
;只需同8位的字相加即可
ADC DX,0 ;因为24是8位数,高位为全0,所以仅需加上CF
;中的进位即可
SUB AX,Z ;将Z的低位同AX相减
SBB DX,Z+2 ;将Z的高位同DX相减
MOV W,AX ;将AX的内容传给W的低位
MOV W+2,DX ;将DX的内容传给W的高位
;计算完毕
;最终W,W+2即是要求的结果
再看:
MOV AL,BCD1
ADD AL,BCD2
DAA
MOV BCD3,AL
MOV AL,BCD1+1
ADC AL,BCD2+1
DAA
MOV BCD3+1,AL
最后BCD3,BCD3+1中的内容就是经过BCD调整后的结果
我不明白这和上面那个例子中的W,W+2有什么本质上的不同?
本质上两者都是计算的结果而已,只不过经过BCD调整后的数已经不是纯粹的二进制数,比W,W+2要容易计算一点而已啊?
请高手解答两者的不同之处