You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让CodeWarrior编译C代码生成小数据加载指令匹配PS2原汇编

PS2调试版游戏反编译:数组初始化汇编不匹配问题

我正在反编译一款以调试版发布的PS2游戏,为验证手写C代码与原代码一致,使用对应版本的Metrowerks CodeWarrior编译器(MW MIPS C Compiler (2.4.1.01).PlayStation2)编译后反汇编ELF文件进行对比。目前整体已接近完全匹配,但局部数组的初始化汇编仍未对齐。

原游戏中的对应汇编代码:

lui          a3,hi(@113+259)
addiu        a3,a3,lo(@113+-12800)
addiu        a2,sp,160
li           a1,4
lw           a0,0(a3)
lw           v1,4(a3)
addiu        a3,a3,8
addiu        a1,a1,-1
sw           a0,0(a2)
sw           v1,4(a2)
addiu        a2,a2,8
bgtz         a1,*-28

这段汇编对应函数顶部的C代码:

int_union* patsettbl[8] =
{
  0,
  &scra_h_posit,
  &scrb_h_posit,
  &scrc_h_posit,
  0,
  &scra_v_posit,
  &scrb_v_posit,
  &scrc_v_posit
};

但我编译后得到的汇编代码如下:

lui          v1,hi(@112+259)
addiu        v1,v1,lo(@112+-13568)
addiu        a1,sp,160
lq           a0,0(v1)
lq           v1,16(v1)
sq           a0,0(a1)
sq           v1,16(a1)

可见编译生成的汇编使用大数据块加载指令初始化数组,而非原汇编中的循环加载小数据指令。我已关闭所有优化,请问哪里操作有误?

内容的提问来源于stack exchange,提问作者user16316067

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 10:41:24