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

MIPS Mars汇编循环后array_cidades前两个元素丢失问题求助

问题根源分析

你的代码中**array_even_odd数组的空间分配错误**,导致城市名字符串被意外覆盖,这是cidade_1和cidade_2无法显示的核心原因:

1. 数据段布局冲突

.data段的内存顺序是:
array_temperaturas(20字节)→ array_cidades(5个word,20字节)→ array_even_odd → 后续是cidade_1、cidade_2等字符串

你给array_even_odd的定义是:

array_even_odd: .word 20

这个指令的作用是在当前地址存入一个值为20的单字数据,仅占用4字节空间,而非分配能容纳5个元素的数组空间。

2. 内存覆盖过程

在foreach循环中,你通过sw $t5, array_even_odd($t0)存储奇偶标记:

  • 当$t0=0:写入array_even_odd+0,属于正常范围;
  • 当$t0=4:写入array_even_odd+4,该地址正好是cidade_1字符串的起始位置,会覆盖cidade_1的前4字节(原字符串"Porto - "的前4个字符"Port"被替换为奇偶值0或1);
  • 当$t0=8:写入array_even_odd+8,覆盖cidade_2的前4字节("Lisb"被破坏);

被破坏的字符串无法被打印字符串的syscall(服务号4)正确识别,因此后续遍历array_cidades时无法显示这两个城市名。

修复方案

将array_even_odd的定义改为分配20字节的数组空间,以容纳5个word类型的奇偶标记:

array_even_odd: .space 20

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:57:53