问题描述
这就是我所拥有的,但是它不想做最后一个 addu,它试图将寄存器 10 和 13 加在一起到寄存器 14 中。最后一个 addu 命令将字母“e”放入寄存器 14。
.text
.globl main
main:
ori $8,$0,0x2 # put two's comp. two into register 8
ori $9,0x3 # put two's comp. three into register 9
ori $11,0x4 # put two's comp. four into register 11
ori $12,0x5 # put two's comp. five into register 12
addu $10,$8,$9 # add register 8 and 9,put result in 10
addu $13,$11,$12 # add register 11 and 12,put result in 13
addu $14,$10,$13 # add register 10 and 13,put result in 14
## End of file
解决方法
它是十六进制 E,又名 0xe,又名 14(dec),而不是字母“e”。
您正在查看以十六进制显示内容的调试器。这不是“输出”,而是由调试器完成的对寄存器中值的解释。调试器具有以二进制、十六进制或十进制显示寄存器的模式——使用 QtSpim 菜单项“寄存器”。 bugger 并不知道你想显示什么,但它可以将所有显示的寄存器从二进制切换到十六进制再到十进制。
无论调试器选择何种显示形式,寄存器中保存的实际值都是相同的。虽然硬件使用二进制来存储寄存器值,但存储在寄存器中的值只是一个数字,无论我们如何显示——并且要清楚数字的任何字符序列(如 100)是使用数字的显示格式根据。寄存器不知道显示格式和数字基数,它们只是使用二进制存储数字——这是调试器解释数字基数中的数字以进行显示。他们使用二进制仅意味着他们不能存储大于 32 位的数字,但在其他情况下存储 100 十进制或十六进制 64 在寄存器中都是相同的数字(完全相同的位模式)。
如果您想要实际输出,您需要一个指令序列将数字打印为字符序列,使用某种系统调用——加载一个值以显示到 $a0
中,并使用系统调用 #1 以十进制打印。我不知道 QtSpim 中的打印十六进制,但 MARS(它在 MIPS 模拟领域的表亲)有系统调用 #34 来打印十六进制。