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

MIPS汇编中div指令执行后mflo获取商结果不符合预期问题

MIPS汇编问题解答

你遇到的问题本质是混淆了ASCII字符值和整型数值:

  • 代码中str存储的是ASCII字符串"10010008",每个字符对应独立的ASCII编码,其中字符'8'的ASCII值为十进制的56,不是整型数值8。
  • lb $t3, 7($t6)指令加载的是该字符串最后一个字节的ASCII值,也就是56存入$t3。

你之前调用系统调用11(打印字符)输出$t3时,系统会直接将56解析为ASCII编码对应的字符'8'输出,这让你误以为$t3存储的是数值8,但如果调用系统调用1(打印整数)输出$t3,会直接打印56而非8。

你执行div $t3, $t2时,实际参与运算的两个数是56(存在$t3)和8(存在$t2):

  • 余数 = 56 % 8 = 0,所以mfhi $t4得到的值为0,符合你的预期
  • 商 = 56 / 8 = 7,所以mflo $t7得到的值为7,就是你最后打印的结果

如果要实现你预期的8除以8的运算,只需要在加载$t3后,将ASCII字符转为对应的整型值,添加一行代码即可:

lb $t3, 7($t6)
addi $t3, $t3, -48  # ASCII '0'的值为48,减去48就得到字符对应的整型数值

修改后再执行除法,得到的商就是1,余数为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:54:10