Assembly 其中';我的MIPS代码中的错误是什么?
我需要帮助。我在火星上写了这段代码。它应该从用户处接收一个整数,并将其转换为十六进制。我已经检查了好几个小时了,就我所知,它应该可以正常工作。我只包括了程序的循环和输出部分,因为这是唯一不起作用的部分。有人能指出代码哪里出错了吗?多谢各位 附言。 我认为这是一点一点的混乱,我用它来掩盖较低的位,但出于某种原因,它似乎是在增加而不是增加-( 循环: MakeHighDigit:Assembly 其中';我的MIPS代码中的错误是什么?,assembly,mips,mars-simulator,Assembly,Mips,Mars Simulator,我需要帮助。我在火星上写了这段代码。它应该从用户处接收一个整数,并将其转换为十六进制。我已经检查了好几个小时了,就我所知,它应该可以正常工作。我只包括了程序的循环和输出部分,因为这是唯一不起作用的部分。有人能指出代码哪里出错了吗?多谢各位 附言。 我认为这是一点一点的混乱,我用它来掩盖较低的位,但出于某种原因,它似乎是在增加而不是增加-( 循环: MakeHighDigit: subi $t0, $t0, 10 # Subtract 10 from low bits
subi $t0, $t0, 10 # Subtract 10 from low bits
addi $t0, $t0, 64 # Add them to the code for 'A' (65), becomes a..f
j DigitOut
MakeLowDigit:
addi $t0, $t0, 47 # Combine it with ASCII code for '0', becomes 0..9
数码输出:
move $a0, $t0 # Output the ASCII character
li $v0, 11
syscall
subi $s1, $s1, 1 # Decrement loop counter
bne $s1, $zero, Loop # Keep looping if loop counter is not zero
你至少用了一个错误的常数:
and $t0, $s0, 16 # Mask off low bits (logical AND with 000...01111)
整数16具有位模式…010000
,也就是说,它的结尾不是四个一。您需要15,即16-1
通常,要创建设置了n个位的右调整位掩码,需要计算
2n-1,在C表示法中是
(1至少用了错误的常数:
and $t0, $s0, 16 # Mask off low bits (logical AND with 000...01111)
整数16具有位模式…010000
,也就是说,它的结尾不是四个一。您需要15,即16-1
通常,要创建设置了n个位的右调整位掩码,需要计算
2n-1,在C表示法中是(1除了滚动错误的常量外,您的ASCII值设置不正确。ASCII中的“A”由数字65表示。在代码中,您将滚动掩码的结果加上64。如果最后四位等于10(十进制),换句话说,$t0包含十进制10,代码从$t0中减去10。因此,$t0的十进制结果为0。当您将64添加到其中时,代码将获得@字符的ASCII值
除了滚动错误的常量外,您的ASCII值设置不正确。ASCII中的“A”由数字65表示。在代码中,您将向滚动掩码的结果中添加64。如果最后四位等于10(十进制),换句话说,$t0包含十进制10,代码从$t0中减去10。因此,$t0的十进制结果为0。当您将64添加到其中时,代码将获得@字符的ASCII值
and $t0, $s0, 16 # Mask off low bits (logical AND with 000...01111)