版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如果有侵权请立即联系:55525090@qq.com,我们立即下架或删除。
简介:3. 乘法指令 MUL,IMUL,AAM
乘法指令包括无符号数乘法指令 MUL、有符号数乘法指令 IMUL 和乘法的十进制调正
指令 AAM。8088/8086CPU 乘法指令能实现字节乘法和字的乘法。字节乘法的乘积为 16 位
存放在 AX 中,字的乘法的乘积为 32 位存放在 DX:AX。指令的目的操作数采用隐含寻址方
式。
(1)无符号数乘法指令 MUL
指令格式: MUL src
功能:如果 src 为字节类型,累加器 AL 与 src 相乘,结果存在 AX 中;如果 src 为字类
型累加器 AX 与 src 相乘,结果存在 DX:AX 中。
说明:两个乘数的数据类型要相同,指令影响标志位 CF,OF 位。
例如:
MUL AH ;AL×AH 结果保存在 AX 中。
MUL BX ;AX×BX 结果保存在 DX:AX 中。
MUL BYTE PTR[SI] ;AL×[SI]结果保存在 AX 中。
MUL WORD PTR[BX+DI] ;AX×[BX+DI]结果保存在 DX:AX 中。
字节相乘的乘积在 AX 中,如果标志位 CF=OF=1,表明 AH 不为 0;字相乘的乘积在
DX:AX 中,如果标志位 CF=OF=1,表明乘积的高位 DX 不为 0。
(2)有符号数乘法指令 IMUL
指令格式: IMUL src
功能:指令的功能和用法与 MUL 指令相同,只是操作数为带符号数,结果也是带符号
数。说明:指令影响标志位 CF、OF 位。如果标志位 CF=OF=0,表明乘积的高位部分
是低位的符号扩展,可以忽略。如果标志位 CF=OF=1,表明 DX 含有乘积的高位,不
能忽略。
(3)乘法的十进制调正指令 AAM
AAM 指令完成 AL 中数的调正。使用 AAM 的前提是两个非压缩 BCD 码相乘,乘积在
AL 中,AH=0。
指令格式:AAM
功能:把 AL 寄存器的内容除以 0AH,商存在 AH 中,余数存在 AL 中。
例如:
MOV AL, 8
MOV BL, 7
MUL BL
AAM ;AH=5,AL=6
4. 除法指令 DIV,IDIV,CBW,CWD,AAD
除法指令包括无符号数除法指令 DIV,带符号数除法指令 IDIV。这两条指令都隐含了
被除数 AX 或 DX:AX,除数可以是寄存器或存储器操作数,但不能是立即数。被除数的字
长要求是除数字长的两倍,如果除数是字节类型,被除数必须是字类型而且要预置在 AX 中;
如果除数为字类型,被除数必须是双字类型而且要预置在 DX:AX 中。
(1)无符号数除法指令 DIV
指令格式: DIV OPRD
功能:如果 OPRD 是字节类型,被除数 AX 除 OPRD,结果的商存到 AL 中,余数存到
AH 中;如果 OPRD 是字类型,被除数 DX:AX 除 OPRD,结果的商存到 AX 中,余数存到
DX 中。
说明:在指令执行前,必须检查被除数的长度,如果不符合要求,要用位扩展指令来转
换。
例如:
DIV BL
DIV BX
DIV BYTE PTR[SI]
DIV WORD PTR[DI]
如果字节操作的结果大于 FFH 则溢出,如果字操作的结果大于 FFFFH 则溢出,溢出将
产生除法错中断。
(2)带符号数的除法 IDIV
IDIV 指令与 DIV 指令相似,只是参加运算的是带符号数,结果也是带符号数,符号与
被除数一致。如果是字节除法,操作结果超出-127~+127 的范围,则产生除法错中断;如果
是字除法,操作结果超出-32767~+32767 的范围,产生除法错中断。在指令执行前,必须检
查被除数的长度,如果不符合要求,要用位扩展指令来转换。
指令格式: IDIV OPRD
例如:
MOV AL, 98H
MOV BL, 13H
CBW ;将 AL 中的数据扩展为 16 位。
IDIV BL
结果 AX=F7FBH,AL 中的 FBH 为商,是负数,AH 中的 F7H 为余数。
(3)符号扩展指令 CBW,CWD
除法指令对操作数的长度严格要求,如果长度不符合要求,可以使用符号扩展指令对数
据类型进行调整。指令不影响标志位。
指令格式:CBW
功能:字节转换为字,如果 AL<80H,则 AH 置 0;如果 AL≥80H,则将 FFH 赋给 AH。
说明:将 AL 中的数的符号位扩展至 16 位,扩展的符号部分存入 AH 中,即由 AL 扩
展为 AX,值保持不变。
例如:... 更多>>