使用 MIPS 32 汇编语言,如何使用 addu 和 ori 命令加载和添加 4 个整数?

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     ,[=10=],0x2       # put two's comp. two into register 8
        ori     ,[=10=],0x3       # put two's comp. three into register 9
        ori     ,[=10=],0x4      # put two's comp. four into register 11
        ori     ,[=10=],0x5      # put two's comp. five into register 12
        addu    ,,       # add register 8 and 9, put result in 10
        addu    ,,     # add register 11 and 12, put result in 13
        addu    ,,     # 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 来打印十六进制。