关于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要容易计算一点而已啊?

请高手解答两者的不同之处

[1031 byte] By [oldgameman-月光轮舞] at [2007-12-16]
# 1
我想请教1个问题
1)这里应不应该添加一句
'[]=================================[]
CLC ;清除cf
'[]=================================[]

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即是要求的结果
JennyVenus at 2007-10-21 > top of Msdn China Tech,其他开发语言,汇编语言...
# 2
up先~
oldgameman-月光轮舞 at 2007-10-21 > top of Msdn China Tech,其他开发语言,汇编语言...
# 3
没有什么不同
Areslee-懒虫易水 at 2007-10-21 > top of Msdn China Tech,其他开发语言,汇编语言...
# 4
X是字还是双字,你说是字
MOV AX,X
MOV DX,X+2
如果是字,并且X、Y、Z是连续存入的,那个DX中就该是Y的值,而不是你说的是X的高位,还有我要提醒你,两个操作数的类型应一至
"因为在INTEL X86中,AX保存字的低半位,DX保存字的高半位",这是什么意思,请指教,谢了
# 5
我的理解是,在cpu看来,bcd和bin,hex没什么区别,是你怎么看待的问题,bcd码更接近人的习惯吧,所以才会有它
piziwolf-小小的狼 at 2007-10-21 > top of Msdn China Tech,其他开发语言,汇编语言...