【问题标题】:Loading address stored in register in MIPS加载存储在 MIPS 寄存器中的地址
【发布时间】:2012-01-28 20:19:28
【问题描述】:

我遇到了一个似乎无法解决的小问题。我有几个数字以下列方式存储在堆栈中:

|5|   0($sp)
|4|   4($sp)
|3|
|8|

我想遍历堆栈,一次比较两个数字。我的意思是我想比较 0($sp) 和 4($sp),然后 0($sp) 和 8($sp),...,然后 4($sp) 和 8($ sp)。所以,5 对 4、5 对 3、5 对 8、4 对 3、4 对 8、3 对 8。

我的尝试是

lw $t3, 0($sp) ##
la $t4, 4($sp) ##
Sum2:
    beq $t2, $zero, Exit
    lw $t5, $t4  ##

    add $a0, $t5, $zero
    li $v0, 1
    syscall 
    add $t4, $t4, 4
    addi $t2, $t2, -1
    j Sum2

主要是第1、2、5行。 我将堆栈顶部的整数值加载到 $t3 并将堆栈中下一项的地址加载到 $t4。

然后我想在 $t4 中存储的地址加载 ,进行比较(现在我只是加到零,以便打印它),然后增加存储的地址在 t4 中按 4 个字节获取堆栈中的第 3 项。我会一直这样做,直到寄存器值达到 0 。一旦发生这种情况,我会将 $sp 增加 4 并重复该过程。

每当我尝试在 PCSpim 中加载它时,都会出现语法错误。我做错了什么?

【问题讨论】:

  • la 不是 MIPS 指令。 (第 2 行)
  • 这是一个伪指令,在这种情况下变成了addiu t4,sp,4。
  • 如果您希望人们继续回答您的问题,请接受正确答案。

标签: assembly stack mips memory-address mips32


【解决方案1】:

如果我没看错你的问题,你想要

lw $t5, 0($t4)

使用存储在 $t4 指向的值加载 t5。

【讨论】:

  • 并获取$a0的内存地址?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
  • 2013-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多