压缩的(8421)BCD码 用四位二进制数表示一位十进制数
非压缩的(8421)BCD码 用八位二进制数(即一个字节,该字节的高4位全为0)表示一位十进制数
计算机在进行加法时,并不关心运算数是不是BCD码,它只按二进制运算规则进行处理。所以如果对两个BCD码做加法,想要得到以BCD码表示的结果,就需要对add指令产生的结果进行修正。
对非压缩的BCD码修正的方法就是执行 aaa 指令。
aaa 指令可以解释为(图来自stack overflow):
即:若AL的低四位大于9,或标志位AF=1,则,AH=AH+1,AL=AL+6,并置AF和CF为1。最后将AL的高四位置为0。
AF标志位为辅助进位标志。当执行add 指令时, 如果两个操作数的低四位相加后产生进位,则置AF=1,否则置AF=0。
举例:
(令:AL=BCD 5,BL=BCD 8, AH=0)
ADD AL,BL
AAA
得到的结果就是:AH = 01H, AL=03H,同时CF标志位=1