1

假设变量 x 表示的数组是一个从 address 开始的有符号整数数组,0x10010000并将表达式的结果放入寄存器$t0

x[5] + x[8]

我想检查我的答案是如何完成的,或者我哪里出错了?感谢您的任何帮助/反馈。

lui  $t1, 0x10010000
ori  $t1, $t1, 0x00010100 
lui  $t2, 0x10010000
ori  $t2, $t2, 0x00001001
add $t0, $t1, $t2
4

2 回答 2

1

您的代码中有几个错误:

  • lui 不允许这样大小的立即数。您应该使用伪li $t1, 0x10010000指令或两条指令来形成基地址(例如 alui和 an ori)。lui将高 16 位设置为指令中的中间集,低 16 位将设置为零,ori可用于设置低 16 位。但是,在您的示例中,较低的 16 位为零,因此将指令更改lui $t1, 0x10010000为即可lui $t1, 0x1001
  • 您不是在添加内容,而是添加地址。您应该使用lw指令,例如:lw $t2, 20($t1)阅读第五个元素
于 2012-10-10T14:48:23.830 回答
0

1)我认为错误出现在第二个和第四个语句中。数字 0x00010100 是十进制的 65792。当您尝试访问数组中的第五个元素时,该数字应为 20 或 0b00010100 或 0x14。同样,第四条语句应该是 32 或 0x20。这个答案假设整数的大小是 4 个字节。

2)另外,您只是添加地址,而不是数据。您需要更改代码以从 $t1 和 $t2 寄存器中的地址给出的位置获取数据。由于这是家庭作业,我不想为您更改代码。

于 2012-10-10T14:32:07.910 回答