汇编十进制调整指令.ppt

十进制调整指令 P120 习题3.4 阅读指令序列,在后面空格中填入该指令序列的执行结果。 MOV BL, 85H MOV AL, 17H ADD AL,BL DAA 指令执行后: AL= , BL= ,CF= CBW指令 字节置换成字的指令(Convert Byte to Word) 功能:隐含的操作数为AL AL7=0时,AH←00H AL7=1时,AH←FFH CWD指令 字置换成双字的指令(Convert Word to Double Word) 功能:隐含的操作数为AX AX15=0时,DX←0000H AX15=1时,DX←FFFFH * * 1、压缩BCD码十进制调整指令 加法十进制调整 DAA;(Decimal Adjust for Add) 执行的操作:这条指令执行前必须先执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存放在AL寄存器中。 减法十进制调整 DAS;(Decimal Adjust for Subtraction ) 执行的操作:这条指令执行之前,必须先执行SUB或SBB指令,减法指令必须把两个BCD码相减,并把结果存放在AL寄存器中。 压缩BCD码:用一个字节表示2位十进制数。 如 0011 1001若将这个字节的数据理解为BCD码,则其代表的数据是十进制的39 调整的方法: 累加器AL低4位大于9或辅助进位标志位AF=1,则累加器AL加06H修正。 累加器AL高4位大于9或进位标志位CF=1,则累加器AL加60H修正。 累加器AL高4位大于9,低4位大于9,则累加器AL进行加66H修正。 例:进行BCD码加法运算59+68=127 0101 1001 59 + 0110 1000 68 1100 0001 C1 + 0110 0110 66 10010 0111 127 加法运算结果为C1, AF=1,高位大于9 加66H进行压缩BCD调整 说明: 压缩BCD码加法或减法十进制调整指令必须在ADD(ADC)或SUB(SBB)指令之后,调整结果对标志OF无影响,对其它状态标志位均有影响。 减法十进制调整方法与加法十进制调整方法类同,只是将加6变为减6操作。 AL=9CH AL+06H=A2H A2H+60H=02H,但有进位 02H 85H 1 2、非压缩BCD码十进制调整指令 指令格式: 加法十进制调整 AAA ( Ascii Adjust for Addition); 减法十进制调整 AAS ;( Ascii Adjust forSubtraction); 乘法十进制调整 AAM ; ( Ascii Adjust for Multiplication); 除法十进制调整 AAD ; ( Ascii Adjust for Division); 非压缩BCD码:用一个字节表示一位十进制数,通常用字节的低4位表示该十进制数,如数的ASCII码表示即可以看作是BCD码表示。 它就表示数字4的非压缩BCD码。 AAA指令将AL的内容变换成一位十进制数。AAA检查AL低四位,如低四位是0--9的数字,AAA就清除AL的高四位,以及AF和CF标志;如AL低四位表示的数大于9或AF=1,AAA执行: 加6到AL寄存器; 加1到AH寄存器; 置AF=1,CF=1; 清除AL高四位为0。 例: MOV AH,0 MOV AL,8 MOV BL,7 ADD AL,BL;AL和BL中的数相加 AAA ;非压缩BCD码调整 AL=0FH 调整过程 :AL+06H=0FH+06H=05H 调整后:AF=1,CF=1,AH=01H 加法的结果即为AX=0105H,由于数的表示为非压缩BCD码,可以理解为15。 AAS为非压缩BCD码减法调整指令。它检查AL低四位,如低四位表示的数是0-9的数字,AAS清除AL高四位及CF和AF标志;如AL低四位表示的数大于9或AF=1,AAS进行如下调整: AL减去6; AH减去1; 置AF=1,CF=1; 清除AL中高四位。 例: MOV AH,01H MOV AL,05H MOV BL,09H SUB AL,BL; AAS AL=0CH,且CF=1 调整过程: AL-06H=0CH-06H=06H AH=01H-1=00H 故减法指令的结果为AX=0006H. 编程者的意图是作

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档