检查作业:评估以下表达式的MIPS指令

时间:2012-10-10 14:09:54

标签: assembly mips

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

x[5] + x[8]

我想检查一下我的回答是怎么做的,或者我哪里出错了?感谢您提供任何帮助/反馈。

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

2 个答案:

答案 0 :(得分:1)

您的代码中存在多个错误:

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

答案 1 :(得分:0)

1)我认为错误发生在第二和第四个陈述中。数字0x00010100是十六进制65792。当您尝试访问数组中的第五个元素时,该数字应为20或0b00010100或0x14。类似地,第四个语句应该是32或0x20。这个答案假定整数的大小是4个字节。

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