BcD数调整指令 BCD运算是逢十进一,而四位二进制数 运算是逢16进一,而计算机总是按二进制规律 运算,所以对BCD运算,要进行调整,由调整 指令来实现 (一)、压缩型BCD数运算(一个字节存放两位 十进制数) 1.压缩型BcD加法调整 格式:DAA 操作:将AL中的和调整为BCD数→AL 调整规则:( AL AND OFH)>9或辅助进位AF=1,则 AL加6;( AL AND OF0H)>90H或CF=1,则AL加 60H
三. BCD数调整指令 ∵BCD运算是逢十进一,而四位二进制数 运算是逢16进一,而计算机总是按二进制规律 运算,所以对BCD运算,要进行调整,由调整 指令来实现。 (一)、压缩型BCD数运算(一个字节存放两位 十进制数) 1. 压缩型BCD加法调整 格式: DAA 操作:将AL中的和调整为BCD数→AL 调整规则: (AL AND 0FH)>9或辅助进位AF=1,则 AL加6;(AL AND 0F0H)>90H或CF=1,则AL加 60H
例.87+39=126→AX 10000111 +00111001 XOR AH,AH 11000000 MOV AL, 87H: AL=COH +01100110 ADD AL, 39H: AF=1, CF=0 100100110 DAA CF=1 RCL AH, 1 AX=0126H 该指令操作数隐含为AL,即只能对AL调整,以AL 为目的。 ∵调整时要用到CFAF标志,所以调整指令应紧 跟ADD指令 DAA指令会影响标志
例. 87+39=126→AX XOR AH , AH MOV AL,87H ;AL=C0H ADD AL,39H ;AF=1,CF=0 DAA ; CF=1 RCL AH,1 ;AX=0126H • 该指令操作数隐含为AL,即只能对AL调整,以AL 为目的。 • ∵调整时要用到CF,AF标志,所以调整指令应紧 跟ADD指令。 • DAA指令会影响标志。 1000 0111 + 0011 1001 1100 0000 + 0110 0110 1 0010 0110
2、压缩型BCD减法调整 格式:DAS 操作:将AL中的差调整为BCD数→AL 调整规则:( AL AND0FH)>9或AF=1,则AL减6 ( AL AND OF0H)>90H或CF=1,则AL减60H 例4位压缩型BCD数加减运算(设不向更高位产 生进位或借位)。 如:3754+5219-4981=3992
格式:DAS 操作:将AL中的差调整为BCD数→AL 调整规则:(AL AND 0FH)>9或AF=1,则AL减6 (AL AND 0F0H)>90H或CF=1,则AL减60H 例.4位压缩型BCD数加减运算(设不向更高位产 生进位或借位)。 如: 3754+5219-4981=3992 2、压缩型BCD减法调整
DATA SEGMENT BCD1 DB 54H 37H BCD2 Db 19H 52H BCD3 Db 81H 49H BCD Db DATA ENDS MOV AL BCD1 完成54+19→BCD ADD AL BCD2 单元 DAA MOV BCD AL MOV AL BCD1+1 ADC AL BCD2+1 完成37+52→BCD+1单 DAA 元 MO∨BCD+1,AL
DATA SEGMENT BCD1 DB 54H , 37H BCD2 DB 19H , 52H BCD3 DB 81H , 49H BCD DB ? , ? DATA ENDS MOV AL , BCD1 ADD AL , BCD2 DAA MOV BCD , AL MOV AL , BCD1+1 ADC AL , BCD2+1 DAA MOV BCD+1,AL 完成54+19→BCD 单元 完成37+52→BCD+1单 元
MOV AL BCD SUB AL BCD3 完成减81→BCD DAS MOV BCD AL MOV AL BCD+1 SBB AL BCD3+1 完成减49→BCD+1 DAS MOV BCD+1 AL 只能对AL调整,∴BCD运算只能是字节运算 注意算法—即运算步骤:一个数运算完成后,才能运 算第二个数;先运算低字节,后运算高字节,高字节 带进位加减
MOV AL , BCD SUB AL , BCD3 DAS MOV BCD , AL MOV AL , BCD+1 SBB AL , BCD3+1 DAS MOV BCD+1 , AL • 只能对AL调整 ,∴BCD运算只能是字节运算。 • 注意算法—即运算步骤:一个数运算完成后,才能运 算第二个数;先运算低字节,后运算高字节,高字节 带进位加减。 完成减81→BCD 完成减49→BCD+1