gpt4 book ai didi

c - 将 Quake 2 中的 MASM5 代码移植到 GAS——意外的渲染结果

转载 作者:行者123 更新时间:2023-12-04 11:13:10 27 4
gpt4 key购买 nike

我正在将 Quake 2 的 MSVC 内联汇编代码移植到 MASM,然后最后移植到 GAS(用于 MinGW)。有问题的具体代码是针对皮肤绘图的(R_PolysetCalcGradients 对于那些想要查找它的人)。代码几乎“起作用”了,但皮肤似乎错误地拉伸(stretch)了模型。

Incorrect skin stretching我注意到一些有趣的事情是,当我运行 objdump -dwrC r_polysa.obj > r_polysa.masm 并且 GAS 版本相同时,除了 fsubpfsubrp 已在 MASM 中交换。请注意不是操作数(我已经在 GAS 中知道这个问题)。 Swapped fsubp/fsubrp图中左边是GAS版本,右边是MASM版本。原始 MASM 代码(因此我在 GAS 中拥有的代码)应该位于左侧。我不确定为什么 MASM 显然交换了这个或者 objdump 是否错误地报告了它。但是,如果我交换两者,这并不能解决问题。它只是以另一种错误的方式倒置了。 Still wrong skin stretching

我提到这个 FSUBP/FSUBRP 交换是因为这是移植粒子混合内联 ASM 代码时的一个问题。这有一个在 MASM 版本中使用 FSUBRP 的调用,objdump 报告它现在是 FSUBP,我必须在 GAS 版本中将它更改为 FSUBP 才能工作!我不明白为什么会这样?

无论如何,我是汇编的新手,但了解一些基础知识并且一直在阅读。显然这里的数学不太正确,但似乎应该如此。我不知道下一步该怎么做。如何修复和调试此问题?

我正在处理的代码库位于:https://bitbucket.org/neozeed/q2dos/commits/branch/win32_asm (特别是 Win32_ASM 分支)。我正在使用的文件是 gas\r_polysa.sref_soft\r_polysa.asm

最佳答案

操作码被颠倒了,所以在 fsubp 之后的 GAS 和 fsubrp 有一个怪癖。还有另一个问题,与该问题无关。对于那些感兴趣的人,请参阅:https://bitbucket.org/neozeed/q2dos/commits/f5bf93e3a78e112ae1f766606471a6c5e67283d4

关于c - 将 Quake 2 中的 MASM5 代码移植到 GAS——意外的渲染结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56211009/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com