Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 其中';我的MIPS代码中的错误是什么?_Assembly_Mips_Mars Simulator - Fatal编程技术网

Assembly 其中';我的MIPS代码中的错误是什么?

Assembly 其中';我的MIPS代码中的错误是什么?,assembly,mips,mars-simulator,Assembly,Mips,Mars Simulator,我需要帮助。我在火星上写了这段代码。它应该从用户处接收一个整数,并将其转换为十六进制。我已经检查了好几个小时了,就我所知,它应该可以正常工作。我只包括了程序的循环和输出部分,因为这是唯一不起作用的部分。有人能指出代码哪里出错了吗?多谢各位 附言。 我认为这是一点一点的混乱,我用它来掩盖较低的位,但出于某种原因,它似乎是在增加而不是增加-( 循环: MakeHighDigit: subi $t0, $t0, 10 # Subtract 10 from low bits

我需要帮助。我在火星上写了这段代码。它应该从用户处接收一个整数,并将其转换为十六进制。我已经检查了好几个小时了,就我所知,它应该可以正常工作。我只包括了程序的循环和输出部分,因为这是唯一不起作用的部分。有人能指出代码哪里出错了吗?多谢各位

附言。 我认为这是一点一点的混乱,我用它来掩盖较低的位,但出于某种原因,它似乎是在增加而不是增加-(

循环:

MakeHighDigit:

   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)