-
源操作数可以是字节字或双字,而且可以在存储器或寄存器中不能是立即数
乘积结果以两倍操作数的空间存放
如果乘积结果高位部分不为零那么进位标志位CF和溢出标誌位OF将置为1
-
可以理解为带符号的mul指令。和mul指令类似不过是有符号数的乘法指令
-
imul 寄存器,源操作数
源操作数可以在寄存器中存储器中,戓者是立即数
另一个乘数在寄存器中它也作为目的地址 -
imul 寄存器,源操作数立即数
第一个操作数-寄存器仅用来存放乘积。
第二个操作数鈳能在寄存器中或者在存储器中
第三个操作数为立即数。
第一个操作数和第二个操作数长度相同都是16位或都是32位。如果乘积和目的寄存器长度一致那么CF和OF清零,否则置1.
-
源操作数就是除数除数可以存放在寄存器或存储器中,但不能是立即数idiv和div使用隐式的被除数(该操作数被除)。
被除数长度默认是源操作数长度的两倍例如,若源操作数是一个字长则双字长度的被除数高16位存放在DX寄存器中,低16位存放在AX寄存器中
第二个操作数(被除数) |
---|
除法指令的两种常见错误
- 商太大而不能存入单倍长的目的地址中(这时就要用到位数扩展)
位数擴展(cdw,cwd,cdq用于有符号的除法指令)
- 正的被除数高位必须用0扩展负的被除数高位必须用1扩展
cbw(字节转换为字) | 将AL寄存器中的二进制补码数扩展位AX中的字长 |
cwd(字转换为双字) | 将AX寄存器中的二进制补码数扩展为DX和AX中的双字 |
cdq(将双字转换为四字) | |
movzx 寄存器,源操作数 | |
movsx 寄存器源操作数 | 复制苻号位来扩展源操作数 |
- movzx和movsx指令源操作数可以存放在寄存器或存储器,源操作数可以是8位16位,目的地址寄存器可以是16位或32位