Cornell平台中RISC-V解释器代码异常:处理下一个整数时持续运行
RISC-V汇编代码循环错误分析
核心问题
- 循环跳转标签错误:在
fast_multiply2函数的skip2标签之后,BNE a7, zero, next_digit指令的目标标签写错了,应当跳转到当前函数的循环入口next_digit2,实际却指向了第一个乘法函数的next_digit标签。
错误导致的执行流程
当程序处理第二个乘法逻辑(计算5×5)时:
- 第一次循环处理完
a7的最低位后,a7经右移变为2(非零),触发该错误的跳转指令。 - 跳转到第一个函数的
next_digit标签后,由于a6已经被第一个函数处理为0,该段的循环会直接退出。 - 程序随后会顺序执行到第二个函数的初始化代码(
addi t1, zero, 5、addi a7, zero, 5),重新进入fast_multiply2函数,形成无限循环,导致程序持续运行无法终止。
修复方法
将fast_multiply2中的这条错误指令修改为:
BNE a7, zero, next_digit2
内容的提问来源于stack exchange,提问作者Andy McDonough
相关产品推荐
相关产品推荐

