汇编语言课件十进制调整指令讲解

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4.2.3 这组指令是在二进制数计算的基础上, 给予十进制数调整,
得到十进制数的结果。计算机中常用8421码表示十进制数。十 进制数码所对应的8421码如表4 - 1所示。
表 4-1 8421码
在PC机里,表示十进制数的8421码可以用压缩的8421码和 非压缩的8421码两种格式来表示。压缩的8421码用4位二进制数 表示一个十进制数位。
这一组指令适用于数字ASCII的调整, 也适用于一般的非 压缩8421码的十进制调整。
十进制调整指令不能单独使用,必须与加、减、乘、除二 进制指令配合使用才能进行十进制调整。十进制调整指令形式 上均为零地址指令, 其操作对象由AX寄存器隐含。
十进制调整指令 8086专门为完成十进制数运算而提供了一组十进制调
0010 1000 + 0110 1000
1001 0000
AF=1 执行ADD指令后,(AL)=90,CF=0,AF=1
执行DAA指令时,因AF=1而做 (AL) (AL)+06
1001 0000 + 0000 0110
1001 0110 得(AL)=96,CF=0,AF=1结果正确。
例: ADD AL,BL DAA
非压缩的8421码用8位表示一个十进制数位, 8位中的低4位 表示8421码,而高4位则没有意义。
显然,数字的ASCII码是一种非压缩8421码。 因为数字的 ASCII码的高4位值为0011B,而低4位是以8421码表示的十进制 数位, 这符合非压缩8421码高4位无意义的规定。
相应地PC机的十进制调整指令分为两组,下面分别加以说 明:
若CF=1或者(AL)的高4位是十六进制的A~F,则使AL的 内容减去60H,并将CF位置1。
DAS指令对OF标志无定义,但影响所有其它ຫໍສະໝຸດ Baidu件标志。
例如:编写程序段,完成1234-3099的操作。
分析: 0011 0100
- 1001 1001 整
调整
1001 1011 - 0000 0110 AF=1调
整指令。进行十进制运算时,首先将十进制数据编码成为 BCD码。
压缩的BCD码调整指令
(1) DAA
DAA是加法的十进制调整指令,它必须跟在ADD或ADC指 令之后使用。
功能:将存于AL寄存器中的2位BCD码加法运算的结果调整 为2位压缩型十进制数,仍保留在AL中。
AL寄存器中的运算结果在出现非法码(1010B~1111B)或本 位向高位(指BCD码)有进位(由AF=1或CF=1表示低位向高位 或高位向更高位有进位)时,由DAA自动进行加6调整。
执行指令前,(AL)=55,(BL)=36 执行ADD指令后
0101 0101 + 0011 0110
1000 1011 AF=0,但低4位出现非法码1011,加06 +0000 0110 执行DAA指令时
1001 0001 高4位CF=0,且高4位无非法码,不调整 最后得(AL)=91,CF=0,AF=0结果正确
MOV AL,AH
ADC AL,BH ;高字节相加
DAA
;高字节调整
MOV AH,AL
MOV AL,CL
(2) DAS DAS是减法的十进制调整指令,它必须跟在SUB或
SBB指令之后,将AL寄存器中的减法运算结果调整为2 位压缩型十进制数,仍保留在AL中。
调整方法如下:
若AF=1或者(AL)的低4位是十六进制的A~F,则使AL寄 存器的内容减去06H,并将AF位置1。
压缩的8421码调整指令:
DAA(Decimal Adjust for Addition) 加法的十进制调整指令
DAS(Decimal Adjust for Subtraction)减法的十进制调整指令
ADD、 ADC以及SUB、 SSB指令只用于二进制数加、减法, 是逢二进一,借一当二, 对连续的4位二进制数是逢十六进一, 借一当十六。但压缩的8421码却是逢十进一,借一当十。因此 使用加、减法指令对8421码运算后,必须经调整才能得到正确 的结果。
由于DAA指令只能对AL中的结果进行调整,因此,
对于多字节的十进制加法,只能从低字节开始,逐个字节 地进行运算和调整。
例如:设当前AX=6698,BX=2877,如要将这两个 十进制数相加,结果保留在AX中,则需要用下列几条指 令完成。
ADD AL,BL ;低字节相加
DAA
;低字节调整
MOV CL,AL
非压缩的8421码调整指令: AAA(ASCII Adjust for Addition)加法的ASCII AAS(ASCII Adjust for Subtraction)减法的ASCII AAM(ASCII Adjust for Multiplication)乘法的ASCII调整指令 AAD(ASCII Adjust for Division)除法的ASCII
调整的方法如下:
若AF=1或者(AL)的低4位是在A~F之间,则(AL)加06H,且 自动置AF=1;
若CF=1或者(AL)的高4位是在A~F之间,则(AL)加60H,且 自动置CF=1
说明:
本条指令对PSW中的OF标志位无影响,但影响所有其他 条件标志。
例: ADD AL,BL
DAA
如执行指令前,(AL)=28,(BL)=68
CF=1,AF=0
CF=1,AF=0
所得结果为 1234-3099=8135,CF=1。
8135为-1865的十进制补码,CF=1表示有借位。
程序如下: MOV DX, 3099H MOV BX, 1234H MOV AL,BL SUB AL,DL DAS MOV CL,AL MOV AL,BH SBB AL,DH DAS MOV CH,AL
1001 1011 CF=1,AF=1
1001 0101
1001 0101
- 0110 0000 CF=1调 整
35)
0011 0101 (十进制
CF=1,AF=1
0001 0010
1110 0001
-0011 0000
调整
-0110 0000
-
1
1000 0001(十进制81)
1110 0001
非压缩的BCD码调整指令
(3) AAA AAA是加法的ASCII码调整指令,也是只能跟在ADD指令之
后使用。其功能是将存于AL寄存器中的1位ASCII码数加法运 算的结果调整为1位非压缩型十进制数, 仍保留在AL中;如果 向高位有进位(AF=1),则进到AH中。因为数字0~9的ASCII 码是一种准非压缩BCD码(即低4位为BCD值,高4位有数值, 处理掉高4位的数值即为非压缩BCD码)
相关文档
最新文档