二)、非压缩型BCD数运算指令(又称ASCI码 BcD运算) 压缩型BCD没有乘除调整,∵找不到一种简便算法, 要实现压缩型BCD乘除运算时,往往是先转换成等 效的二进制数,再进行二进制乘除运算,然后再转换 成压缩型BCD数。而非压缩型BCD数一个数字占一个 字节,∴可进行加、减、乘、除运算 1.加法调整 格式:AAA 此进位同时 操作;将AL中的和调整为BCD→AL 体现在CF AH加调整时出现的一位BCD进位→AH 调整原则:( AL AND0FH)>9或AF=1,则 (AL+6)AND0FH→AL, AH+1→AH,且CF=1,AF=1
(二)、非压缩型BCD数运算指令(又称ASCII码 BCD运算) 压缩型BCD没有乘除调整, ∵找不到一种简便算法, ∴要实现压缩型BCD乘除运算时,往往是先转换成等 效的二进制数,再进行二进制乘除运算,然后再转换 成压缩型BCD数。而非压缩型BCD数一个数字占一个 字节,∴可进行加、减、乘、除运算. 1.加法调整 格式:AAA 操作;将AL中的和调整为BCD→AL, AH加调整时出现的一位BCD进位→AH 调整原则:(AL AND 0FH)>9或AF=1,则 (AL+6) AND 0FH→AL , AH+1→AH , 且CF=1 , AF=1. 此进位同时 体现在CF
调整后的存放规律可理解为调整后的十 位数,即进位→加到AH中,个位数→AL 般执行该指令前AH应为0(若原不为 0,也是加上调整的进位) 调整时要用到标志,∴应紧跟ADD指令
• 调整后的存放规律可理解为调整后的十 位数,即进位→加到AH中,个位数→AL ∴一般执行该指令前AH应为0(若原不为 0,也是加上调整的进位)。 • 调整时要用到标志, ∴应紧跟ADD指令
例。非压缩BCD运算,如:89+67=156 BCD1 DW 0809H BCD2 DW 0607 BCD3 DB 3 DUP() MOV AL BYTE PTR BCD1: AL=09H ADD AL, BYTE PTR BCD2: AL=10H, AF=1 AAA AL=06H, CF=1 MOV BCD3 AL 存个位 MOV AL BYTE PTR BCD 1+1: AL-08H ADC AL, BYTE PTR BCD2+1;AL=0FH,加低位CY AAA AL=05H, CF=1 MOV BCD3+1, AL ;存十位 MOV BCD3+2, 0 RCL BCD3+2,1;存百位,(BCD3)=010506BCD
例. 非压缩BCD运算,如: 89+67=156 BCD1 DW 0809H BCD2 DW 0607H BCD3 DB 3 DUP(?) MOV AL , BYTE PTR BCD1 ;AL=09H ADD AL , BYTE PTR BCD2 ; AL=10H,AF=1 AAA ; AL=06H,CF=1 MOV BCD3 , AL ;存个位 MOV AL , BYTE PTR BCD1+1 ;AL=08H ADC AL , BYTE PTR BCD2+1 ; AL=0FH,加低位CY AAA ;AL=05H,CF=1 MOV BCD3+1,AL ;存十位 MOV BCD3+2,0 RCL BCD3+2,1 ;存百位,(BCD3)=010506BCD
调用AAA指令,因为进位既加到了AH中,又体现在CF 中,所以对进位(高位)的处理有多种方法。 MOV AH, 0 MOV BCD3+2,AH;进位AH即高位 MO∨BCD3+2,0 进位CF即高位 RCL BCD3+2 1 MOV BCD3+2,0;进位CF即高位 ADC BCD3+2 0
• 调用AAA指令,因为进位既加到了AH中,又体现在CF 中,所以对进位(高位)的处理有多种方法。 MOV AH,0 : MOV BCD3+2 , AH ; 进位AH即高位 MOV BCD3+2 , 0 ;进位CF即高位 RCL BCD3+2 , 1 MOV BCD3+2 , 0 ;进位CF即高位 ADC BCD3+2 , 0
2.减法调整 格式:AAS 此借位同时 体现在CF 操作:将AL中的差调整为BCD→AL AH减调整时产生的借位→AH 调整原则:若( AL AND OFH)>9或AF=1 则(AL6) AND OFH→AL,AH-1→AH, CF=1, AF=1 同样应紧跟SUB或SBB指令
2. 减法调整 格式:AAS 操作:将AL中的差调整为BCD→AL, AH减调整时产生的借位→AH 调整原则:若 (AL AND 0FH)>9 或AF=1 则(AL-6) AND 0FH→AL , AH-1→AH , CF=1, AF=1 • 同样应紧跟SUB或SBB指令. 此借位同时 体现在CF