概述
【汇编】正确使用IDIV指令
div
为无符号除法,idiv
为有符号除法
idiv
进行的是128 / 64
位除法,即被除数为128位、除数为64位。
64位操作系统中寄存器大小当然只有64位,因此,idiv
使用rdx:rax
作为被除数
即rdx
中的值作为高64位、rax
中的值作为低64位
格式:idiv src
,结果存储在rax
中
因此,在使用idiv
进行计算时,rdx
中不得为随机值,否则会发生浮点异常。
可以在使用idiv
前做如下处理:
以10/2
为例
使用A&T汇编进行展示
- 方法一:将
rdx
置为0
movq
$10, %rax
movq
$2, %rbx
pushq
%rdx
xorq
%rdx, %rdx
idivq
%rbx
popq
%rdx
- 方法二:使用
cqo
指令
cqo
指令的作用是扩展双字,即从64位扩展到128位,具体是将eax
寄存器的值进行扩展,高位置于rdx
中
movq
$10, %rax
movq
$2, %rbx
pushq
%rdx
cqo
idivq
%rbx
popq
%rdx
最后
以上就是幽默樱桃为你收集整理的【汇编】正确使用IDIV指令【汇编】正确使用IDIV指令的全部内容,希望文章能够帮你解决【汇编】正确使用IDIV指令【汇编】正确使用IDIV指令所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复