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

给定C代码对应的MIPS汇编代码正确性验证咨询

MIPS汇编代码正确性分析

前提条件

  • 寄存器与变量映射:f→$s0,g→$s1,数组A基地址→$s6,数组B基地址→$s7
  • 目标C代码:
B[g] = A[f + 1] + A[f]; 
f = A[f];

你编写的汇编代码

sll $t0,$s0,2
add $t0,$t0,$s6
lw $t0,0($t0)
lw $t1,4($t0)
add $t2,$t0,$t1
sll $t3,$s1,2
add $t3,$t3,$s7
sw $t2,0($t3)

add $s0,$t0,$zero

错误点说明

你的代码存在逻辑错误,核心问题出在内存地址的处理上:

  • 第3行lw $t0,0($t0)执行后,$t0的含义从**A[f]的内存地址变成了A[f]的数值**
  • 第4行lw $t1,4($t0)会把A[f]的数值当作内存地址,去读取该地址+4位置的数据,这和C代码中A[f+1]的语义完全不符——A[f+1]应该是数组A中索引为f+1的元素,正确地址是A的基地址 + (f+1)*4,而非基于A[f]数值的偏移。

正确实现示例

要匹配原C代码逻辑,需保留A[f]的地址来获取A[f+1],示例代码如下:

# 计算A[f]的地址,存入$t0
sll $t0, $s0, 2
add $t0, $t0, $s6
# 取出A[f]的值存入$t1
lw $t1, 0($t0)
# 取出A[f+1]的值(地址为$t0+4)存入$t2
lw $t2, 4($t0)
# 计算两个元素的和
add $t3, $t1, $t2

# 计算B[g]的地址,存入结果
sll $t4, $s1, 2
add $t4, $t4, $s7
sw $t3, 0($t4)

# 更新f的值为A[f]
add $s0, $t1, $zero

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:42:14