[英]Using MIPS 32 assembly language, how can I use the addu and ori commands to load and add 4 integers?
这就是我所拥有的,但是它不想执行最后一个 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,$0,0x3 # put two's comp. three into register 9
ori $11,$0,0x4 # put two's comp. four into register 11
ori $12,$0,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 菜单项“寄存器”。 窃听器并不真正知道您要显示什么,但它可以将所有显示的寄存器从二进制切换到十六进制再到十进制。
无论调试器选择何种显示形式,寄存器中保存的实际值都是相同的。 虽然硬件使用二进制来存储寄存器值,但存储在寄存器中的值只是一个数字,无论我们如何显示它 - 并且要清楚数字(如 100)的任何字符序列是使用数字的显示格式根据。 寄存器不知道显示格式和数字基数,它们只是使用二进制存储数字 - 这是调试器在数字基数中解释数字以进行显示。 他们只使用二进制意味着他们不能存储大于 32 位的数字,但否则存储 100 个十进制或十六进制 64 在寄存器中都是相同的数字(完全相同的位模式)。
如果你想要实际的 output 你需要一个指令序列来将数字打印为字符序列,使用某种系统调用 - 加载一个值以显示到$a0
并使用系统调用 #1 以十进制打印。 我不知道 QtSpim 中的打印十六进制,但 MARS(它在 MIPS 模拟领域的表亲)具有系统调用 #34 来打印十六进制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.