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

