请教:51单片机,用汇编语言实现指令DAA的功能?

如题所述

DA A指令,是专门用于BCD码加法计算调整的,例如,计算十进制数26+17,用指令:
MOV A ,#26H
ADD A ,#17H
这样计算的结果是3DH,这不是十进制数,在加法指令后加上DA A,则进行十进制数调整,调整后的结果就是43了。追问

谢谢你^O^!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-06-03
DA指令实质上是低四位或者高四位超过9的话加6,然后向上进位,用汇编指令应该很好实现,分别对低四位、高四位进行超过9的比较,如果超过则加6之后进位追问

能否帮我写写这个程序呢?感激不尽

追答

MOV A,R0 ;R0存储要运算的数据
ANL A,#0FH ;取低四位
CJNE A,#0AH,NEXT_L ;不等于10,跳转
ADD06H: ADD A,#06H
MOV 30H,A
LJMP HIG
NEXT_L: JC NOADDL ;小于10,跳转
LJMP ADD06H
NOADDL: MOV 30H,A
HIG: MOV A,R0
ANL A,#0F0H ;取高四位
ADD A,30H ;加低位进位
ANL A,#0F0H
CJNE A,#0A0H,NEXT_H
ADD60H: ADD A,#60H
MOV 31H,A
LJMP ADDALL
NEXT_H: JC NOADDH
LJMP ADD60H
NOADDH: MOV 31H,A
ADDALL: MOV A,30H
ANL A,#0FH
ADD A,31H
MOV R1,A ;运算结果保存于R1
RET

本回答被提问者采纳
第2个回答  2013-06-04
用加06H,60H 66H方式,就可以了.追问

能把程序写给我吗,谢了!~

追答

就是如果底四位大于9的,就加06h
如果高四位大于9的,就加60h\
如果高低四位都大于9的就加66h
例子:mov a,#0ah;
add a,#06h;
立即数A就为十进制的10;
mov a,#0a0h;
add a,#060h;
立即数A0就为十进制的100;
mov a,#0aah;
add a,#66h;
立即数Aa就为十进制的110;

追问

那如果是不使用ADD语句,又要实现add的功能,怎么弄呢

求指教呀

追答

直接 da a就可以了,这样就将十六进制转成十过制了

追问

谢谢你了!

相似回答