3.2 80×86汇编乘法和除法指令以及位数扩展

2018-11-12  本文已影响0人  迎风布阵x

乘法指令

源操作数
字节 ax = al × 源操作数
字 dx:ax = ax × 源操作数
双字 edx = eax × 源操作数

注意:
如果乘积结果高位部分不为零,那么进位标志位CF和溢出标志位OF将置为1

除法指令

单操作数除法指令
被除数长度默认是源操作数长度的两倍。例如,若源操作数是一个字长,则双字长度的被除数高16位存放在DX寄存器中,低16位存放在AX寄存器中

源操作数(除数) 第二个操作数(被除数) 余数
字节 AX AL AH
DX:AX AX DX
双字 EDX:EAX EAX EDX


除法指令的两种常见错误

  1. 除数为零
  2. 商太大而不能存入单倍长的目的地址中(这时就要用到位数扩展)


位数扩展(cdw,cwd,cdq用于有符号的除法指令)

指令 含义
cbw(字节转换为字) 将AL寄存器中的二进制补码数扩展位AX中的字长
cwd(字转换为双字) 将AX寄存器中的二进制补码数扩展为DX和AX中的双字
cdq(将双字转换为四字) EAX -> EDX:EAX
cwde(字 to 双字) AX -> EAX(不和除法指令配套使用)
movzx 寄存器,源操作数 用0来扩展源操作数
movsx 寄存器,源操作数 复制符号位来扩展源操作数

说明:

  1. movzx和movsx指令源操作数可以存放在寄存器或存储器,源操作数可以是8位,16位,目的地址寄存器可以是16位或32位
上一篇 下一篇

猜你喜欢

热点阅读