我是靠谱客的博主 幽默樱桃,这篇文章主要介绍【汇编】正确使用IDIV指令【汇编】正确使用IDIV指令,现在分享给大家,希望可以做个参考。

【汇编】正确使用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指令内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(97)

评论列表共有 0 条评论

立即
投稿
返回
顶部