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

询问该MIPS代码是否存在地址越界问题及代码功能解析

MIPS代码功能与问题分析

代码功能

这段代码试图实现滑动窗口三数求和的逻辑:

  • 初始从array数组取前3个值(均为1),将三者之和存入当前窗口起始位置往后第4个元素的地址;
  • 把窗口起始地址后移4字节(一个word的长度),重复求和存储操作,总共执行25次循环。

具体执行流程:

  1. .data段定义了连续的两个数据区域:array是3个初始值为1的word(占12字节),tmp是25个初始为0的word(占100字节);
  2. 主函数将array的起始地址加载到$t0,设置循环计数器$t1为25;
  3. 每次循环内:
    • 从$t0、$t0+4、$t0+8三个地址读取三个整数;
    • 累加三个数得到总和;
    • 将总和存入$t0+12的地址;
    • 窗口地址$t0后移4字节,计数器减1,直到计数器为0时退出程序。

存在的问题:确实存在严重地址越界

你的怀疑完全正确,这段代码会出现多次地址越界访问,具体情况如下:

  • 存储越界:第一次循环时,sw $t2, 12($t0)会把数据存入array+12(即tmp的起始地址),这还在分配的空间内。但循环执行25次后,$t0会移动到array + 4*25 = array+100,此时12($t0)指向array+112,而array加tmp总共仅占112字节,该地址已超出分配的.data段空间;
  • 加载越界:循环到后期时,比如第23次循环,$t0为array+92,此时lw $t5, 8($t0)会访问array+100——这已经是tmp最后一个元素之后的地址,属于越界读取;后续循环的加载操作会持续访问超出分配空间的内存。

此外,循环次数设置完全不合理:算上array和tmp的总空间,最多仅能执行23次有效循环(保证$t0+8不越界),硬写25次循环直接触发了越界问题。

内容的提问来源于stack exchange,提问作者SiHan.Z

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:07:31