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
相关产品推荐
相关产品推荐

