[汇编]指令系统算术指令

上传人:豆浆 文档编号:37557060 上传时间:2018-04-18 格式:DOC 页数:8 大小:56.50KB
返回 下载 相关 举报
[汇编]指令系统算术指令_第1页
第1页 / 共8页
[汇编]指令系统算术指令_第2页
第2页 / 共8页
[汇编]指令系统算术指令_第3页
第3页 / 共8页
[汇编]指令系统算术指令_第4页
第4页 / 共8页
[汇编]指令系统算术指令_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《[汇编]指令系统算术指令》由会员分享,可在线阅读,更多相关《[汇编]指令系统算术指令(8页珍藏版)》请在金锄头文库上搜索。

1、汇编8086 指令系统-算术指令(二)4 除法指令DIVDIV srcsrc 无符号数除法(unsignedunsigned dividedivide)IDIVIDIV srcsrc 带符号数除法(signedsigned dividedivide)字节操作: (AL) (AX) / src 的商(AH) (AX) / src 的余数字操作: (AX) (DX, AX) / src 的商(DX) (DX, AX) / src 的余数参加运算的除数和被除数是无符号数时,使用 DIV 指令,其商和余数也均为无符号数。IDIV 指令执行的操作与 DIV 相同,但操作数必须是带符号数,商和余数也均为带

2、符号数,而且余数的符号与被除数的符号相同。这两条除法指令的被除数必须存放在 AX 或 DX,AX 中,源操作数 src 作为除数,可用除立即数以外的任一种寻址方式来取得。除法指令对所有条件码均无定义,因此对除法指令产生的错误,如除数为 0 或商溢出等错误,程序员都不能用条件码进行判断,而是由系统直接转入 0 型中断来处理。所谓商溢出,是指被除数高一半的绝对值大于除数的绝对值时,商超出了 16 位的表示范围(字操作)或 8 位的表示范围(字节操作)。由于使用除法指令的需要,经常要将字节数据扩展为字数据,或者将字数据扩展为双字数据,所以我们先介绍下面的符号扩展指令,然后再对除法指令举例。3.3.2

3、.5 符号扩展指令CBWCBW 字节扩展为字(convertconvert bytebyte toto wordword)执行操作:(AH)= 00H 当(AL)的最高有效位为 0 时(AH)= FFH 当(AL)的最高有效位为 1 时CWDCWD 字扩展为双字(convertconvert wordword toto doubledouble wordword)执行操作:(DX)=0000H 当(AX)的最高有效位为 0 时(AH)=FFFFH 当(AX)的最高有效位为 1 时这是两条无操作数指令,进行符号扩展的操作数必须存放在 AL 寄存器或 AX 寄存器中。这两条符号扩展指令都不影响条件

4、码。注意:注意:除法指令要求字操作时,被除数必须为 32 位,除数是 16 位,商和余数是 16 位的;字节操作时,被除数必须为 16 位,除数是 8 位,得到的商和余数是 8 位的。例 假设(AX)= 0BA45H,下列指令分别执行后的结果是什么?CBW ; 执行后,(AH)=00, (AL)=45H, 或 (AX)=0045HCWD ; 执行后,(DX)=0FFFFH, (AX)=0BA45H例 编写程序,分别实现下列数据的无符号除法和带符号除法。DATA7 DW 9400H ; numeratorDATA8 DW 0060H ; denominatorQUOT DW ? ; quotie

5、ntREMAIN DW ? ; remainder; unsigned divideMOV AX,DATA7 ; AX holds numeratorMOV DX,0 ; (DX,AX)= 0000 9400HDIV DATA8 ; unsigned divideMOV QUOT,AX ; quotient is in AX,(AX)=018AHMOV REMAIN,DX ; remainder is in DX,(DX)=0040H; signed divideMOV AX,DATA7 ; (AX)=9400HCWD ; (DX,AX)=0FFFF, 9400HIDIV DATA8 ; si

6、gned divideMOV QUOT,AX ; quotient is in AX,(AX)=0FEE0HHMOV REMAIN,DX ; remainder is in DX,(DX)=03.3.2.6 十进制调整指令80x86 微型机提供了一组十进制调整指令,用来处理 ASCII 码和 BCD 码表示的数。BCDBCD 码码:BCD(Binary Coded Decimal)是用二进制编码表示的十进制数(见表 3.3),十进制数采用 09 十个数字,是人们最常用的。在计算机中,同一个数可以用两种 BCD 格式来表示:压缩的 BCD 码 非压缩的 BCD 码压缩的压缩的 BCDBCD 码码

7、:压缩的 BCD 码用 4 位二进制数表示一个十进制数位,整个十进制数用一串 BCD 码来表示。例如,十进制数 59 表示成压缩的 BCD 码为 0101 1001,十进制数 1946 表示成压缩的BCD 码为 0001 1001 0100 0110。非压缩的非压缩的 BCDBCD 码码:非压缩的 BCD 码用 8 位二进制数表示一个十进制数位,其中低 4 位是 BCD 码,高 4 位是 0。例如,十进制数 78 表示成压缩的 BCD 码为 0000 0111 0000 1000。从键盘输入数据时,计算机接收的是 ASCII 码,要将 ASCII 码表示的数转换成 BCD 码是很简单的,只要把

8、 ASCII 码的高 4 位清零即可。压缩的压缩的 BCDBCD 码调整指令码调整指令DAA 和 DAS 指令完成加法和减法的调整功能。DAADAA 加法的十进制调整(decimal adjust for addition)执行操作:(AL) 把 AL 中的和调整为压缩的 BCD 格式DASDAS 减法的十进制调整(decimal adjust for subtraction)执行操作:(AL) 把 AL 中的差调整为压缩的 BCD 格式DAA 和 DAS 指令的调整方法如下:执行加法指令(ADD、ADC)或减法指令(SUB、SBB)后,1如果结果的低 4 位 (AL)039 或 AF=1,则

9、(AL)(AL)06H,且 AF 置 1;2如果结果的高 4 位 (AL)479 或 CF=1,则(AL)(AL)60H,且 CF 置 1。对上述方法,加法调整作+06H 和+60H,减法调整作06H 和60H。这两个调整的条件,如果满足其一,则06H 或60H;如果同时满足,则06H 后,再60H。非压缩的非压缩的 BCDBCD 码调整指令码调整指令AAAAAA 加法的 ASCII 调整(ASCII adjust for add)执行操作:(AL) 把 AL 中的和调整为非压缩的 BCD 格式(AH)(AH)+ 调整产生的进位值AASAAS 减法的 ASCII 调整(ASCII adjust

10、 for sub)执行操作:(AL) 把 AL 中的差调整为非压缩的 BCD 格式(AH)(AH) 调整产生的借位值加法和减法的操作数可以直接使用 ASCII 码,而不必把高位 0011 清为 0000,AAA 和AAS 指令就是专门为 ASCII 码操作数或非压缩 BCD 码操作数的加减法而设计的。AAA 和 AAS 的调整方法如下:执行加法指令(ADD、ADC)或减法指令(SUB、SBB)后,结果存放在 AL 寄存器中:(1)如果(AL)03= 09,且 AF=0,则(AL)47= 0,AF 的值送 CF;(2)如果(AL)03=AF,或 AF=1,则(AL)(AL)06H,(AL)47=

11、 0,(AH)(AH)1,AF 的值送 CF。AAA 和 AAS 指令除影响 AF 和 CF 标志外,其余标志位均无定义。AAMAAM 乘法的 ASCIIASCII 调整(ASCIIASCII adjustadjust forfor mulmul)执行操作:(AX) 把 AX 中的积调整为非压缩的 BCD 格式AADAAD 除法的 ASCIIASCII 调整(ASCIIASCII adjustadjust forfor divdiv)执行操作:(AX) AX 中的被除数(非压缩的 BCD 格式)转化为二进制数以上两条指令是专为非压缩的 BCD 码的乘除法而设计的,它们将乘法和除法的结果转换为非

12、压缩的 BCD 码。注意注意:AAM 和 AAD 都只对 AX 寄存器中的数进行调整,它们只影响 SF、ZF 和 PF 标志位,其它标志位无定义。AAMAAM 的调整方法为的调整方法为:执行乘法指令(MUL)后,调整存放在 AL 寄存器中的乘积:(AH)(AL)/ 0AH 的商(AL)(AL)/ 0AH 的余数AAM 实际上是将两个一位数的非压缩 BCD 码相乘后得到的乘积进行二化十的转换,十位数放在 AH 中,个位数放在 AL 中,那么 AX 中就是乘积的非压缩 BCD 码。注意注意:如果是两个 ASCII 码数相乘,要先将它们转换成非压缩 BCD 码。AADAAD 的调整方法为的调整方法为

13、:执行除法指令之前,对 AX 中的非压缩 BCD 码(被除数)执行:(AL)(AH)10(AL)(AH) 0与其它调整指令不同的是,AAD 用在 DIV 指令之前,即先将 AX 中的被除数调整成二进制数,并存放在 AL 中,再用 DIV 指令作二进制数的除法。AX 中的被除数是二位非压缩 BCD码,AH 中的十位数乘 10,再加上 AL 中的个位数,即转换为二进制数。表 3.3 ASCII 和 BCD 码十进制数字ASCII 码压缩 BCD 码非压缩 BCD 码 00011 000000000000 0000 10011 000100010000 0001 20011 001000100000

14、 0010 30011 001100110000 0011 40011 010001000000 0100 50011 010101010000 0101 60011 011001100000 0110 70011 011101110000 0111 80011 100010000000 1000 90011 100110010000 1001例 ASCII 码转换为 BCD 码。ASC DB 9562481273 ; ASCII stringORG 0010HUNPACK DB 10 DUP(?) ; store BCD number MOV CX,10 ; load the counter

15、SUB BX,BX ; clear BXAGAIN: MOV AL,ASCBX; move to AL content of mem BX+ASCAND AL,0FH ; mask the upper nibbleMOV UNPACKBX,AL ; move to mem BX+UNPACK the ALNC BX ; make the pointer to point at next ASCII numberLOOP AGAIN ; loop until finished上例中的 AND 指令完成逻辑与操作,AL 寄存器的内容和 0FH 相与,结果使 ASCII 码的高 4 位清零,低 4

16、位保持不变,于是一个 ASCII 码数就转换成了 BCD 码。例 编写程序,实现 BCD 数据的加法和减法。 BCD3BCD1BCD2 ; BCD3=27841839=4623 BCD3BCD1BCD2 ; BCD3=27841839=0945编写程序如下:DATA SEGEMENTBCD1 DB 84H,27H ; BCD format of 2784BCD2 DB 39H,18H ; BCD format of 1839BCD3 DB 2 DUP(?)DATA ENDS MOV AL,BCD1 ; AL84HADD AL,BCD2 ; AL84H+39H=0BDH (B9,D9)DAA ; AL0

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号