概述
下表描述的指令支持产生两个 32 位数字的全 64 位乘积以及整数除法。
指令 | 效果 | 描述 |
imull S mull S | R[%edx]:R[%eax] S * R[%edx] R[%edx]:R[%eax] S * R[%eax] | 有符号全 64 位乘法 无符号全 64 位乘法 |
cltd | R[%edx]:R[%eax] SignExtend(R[%eax]) | 转为四字 |
idivl S
| R[%edx] R[%edx]:R[%eax] mod S; R[%eax] R[%edx]:R[%eax] / S | 有符号除法
|
divl S | R[%edx] R[%edx]:R[%eax] mod S; R[%eax] R[%edx]:R[%eax] / S | 无符号除法 |
imull 指令称为 “双操作数”乘法指令。它从两个 32 位操作数产生一个 32 位成绩,。将乘法截取位 32 位时,无符号乘法和补码的位级行为是一样的。 IA32 还提供了两个不同的 “单操作数” 乘法指令,以计算两个 32 位值的全 64 位乘积 —— 一个是无符号数乘法(mull),而另一个是补码乘法(imull)。这两条指令都需要求一个参数必须在寄存器 %eax 中。虽然 imull 这个·名字可以用于两个不同的乘法操作,但是汇编器能够通过计算操作数的数目,分辨出想用哪条指令。
最后
以上就是不安小笼包为你收集整理的随笔三十:特殊的算术操作的全部内容,希望文章能够帮你解决随笔三十:特殊的算术操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复