MIPS指针数组打印32字节对齐字符串时首元素乱码问题求助
问题根因
核心问题是指针数组越界写入,覆盖了首个字符串的前4字节,具体原因如下:
- 你声明的指针数组
dataAddr分配了64字节空间,MIPS架构下每个指针占4字节,最多只能存储16个指针。 - 初始化指针的循环判断条件为
ble $t0, 16, startCode,$t0从0开始计数,循环会执行17次:第17次写入时,地址已经超出了dataAddr的64字节范围,刚好覆盖了紧随其后的字符串段dataName的前4个字节,也就是第一个字符串的前4个字符,因此首字符串输出会出现乱码。
你测试15个字符串时问题消失,是因为15个字符串只需要15个指针,即使循环多执行了2次,覆盖的是未被使用的对齐填充空间,不会破坏有效字符串内容。
修复方案
二选一即可:
- 修改循环判断条件,把17次循环改为刚好16次,将代码里的
ble $t0, 16, startCode
修改为:
blt $t0, 16, startCode
- 如果你后续需要扩展更多字符串,可以扩大
dataAddr的分配空间,需要存储N个指针就分配4*N字节的空间,示例(支持最多32个指针):
dataAddr: .space 128 # 支持最多32个指针
内容的提问来源于stack exchange,提问作者yohijoey
相关产品推荐
相关产品推荐

