首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Objdump在已编译的程序集上将fsubrp交换为fsubp?

Objdump在已编译的程序集上将fsubrp交换为fsubp?
EN

Stack Overflow用户
提问于 2019-05-20 01:21:50
回答 1查看 113关注 0票数 3

我正在将Quake 2的内联Win32程序集移植到GAS。我首先获取内联程序集,然后将其放入自己的ASM文件中。修复了所有问题,然后开始移植到GAS。我知道在AT&T vs Intel语法中src/dst是颠倒的(包括用于一些数学运算的浮点寄存器)和其他一些小问题,但是当我在编译成功时注意到代码没有按预期工作。我用比较实用程序和阅读汇编手册仔细检查了几个小时,最后在GAS和MASM版本上尝试了"objdump -dwrC > out.txt“。我注意到的很奇怪。

除了在MASM版本中有一个"fsubp st(1),st(0)“行,而在GAS中是"fsubrp st(1),st(0)”行之外,所有的代码看起来都是一样的。这很奇怪,因为MASM和GAS中的实际汇编代码都使用了fsubrp。将其更改为fsubp允许粒子绘制代码按预期工作。

为什么会发生这种情况?

所采取的步骤:使用比较实用程序逐行验证src/dst,阅读包括教程在内的x87汇编手册和用于任何怪癖的GCC ASM手册。

代码片段:原始MASM代码:

fsubrp st(1), st(0)

GAS代码:

fsubrp %st(0), %st(1)

根据objdump的MASM代码:

fsubp %st(0), st(1)

根据objdump的GAS代码:

fsubrp %st(0), st(1)

预期结果:我期望在MASM文件的objdump中生成subrp,而不是fsubp。

EN

回答 1

Stack Overflow用户

发布于 2019-05-20 12:28:46

我想通了。多亏了Peter Cordes,我在MASM和GAS版本上使用了-Mintel。操作码是错误的,就像他说的那样。出于某种原因,对于GAS,如果你有和fsubp,后面跟着和fsubrp,你必须颠倒过来。一旦完成此操作,它就会生成正确的操作码。我不确定这是不是一个非常模糊的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56210264

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档