CSS   发布时间:2022-04-17  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了帮助理解x86内联汇编中的DIV指令大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_874_1@在阅读GNU项目中的一些源代码时,我遇到了一些内联汇编:
__asm__ (
  "divq %4"
  : "=a" (q),"=d" (r)
  : "0" (n0),"1" (n1),"rm" (d)
);

这里变量q,r,n0,n1和d是64位整数.我知道足够的装配来得到它的作用,但有一些我不确定的细节.

我的理解:

我们将RAX寄存器的内容除以d,将商置于q中,并将余数放在r中.

我不明白

>为什么有三个输入
这里?我们只需要输入一个
分红和除数,所以有什么用
可以有3个输入吗?
>我不知道哪个输入是红利.更一般地说,我实际上没有看到任何东西
被加载到RAX寄存器,
那它怎么知道什么分为什么?

解决方法

在输入操作数规范中:
: "0" (n0),"rm" (d)

由于输出规范,寄存器“0”和“1”被强制为rax和rdx:

: "=a" (q),"=d" (r)

div指令族想要RDX中的分子:RAX.除数可以在通用寄存器中(不是以其他方式使用 – 即,不是RAX或RDX)或由“rm”约束指定的存储器.寄存器RDX,RAX和除数操作数组成3个输入.

所以这将最终执行除法:n1:n0 / d其中n1:n0是加载到rdx:rax中的数量.

大佬总结

以上是大佬教程为你收集整理的帮助理解x86内联汇编中的DIV指令全部内容,希望文章能够帮你解决帮助理解x86内联汇编中的DIV指令所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。