Assembly MIPS:使用带有内存偏移量的标签,比如$sp,可行吗?坏习惯?

Assembly MIPS:使用带有内存偏移量的标签,比如$sp,可行吗?坏习惯?,assembly,stack,mips,Assembly,Stack,Mips,我有一个编程环境,堆栈可以很好地满足我的需要。我想知道在寻址这个分配的空间时,是否有可能以类似的方式使用内存偏移量值,比如$sp 即: 将值保存到字符堆栈的第二个字节?如果我的价值观是错误的,但想法是正确的,请让我知道这个想法-这些价值观纯粹是我希望做的示范 这是可怕的做法吗?我应该避免做的事? 如果不是,但没有办法做到这一点,那么最接近的近似值是使用“la”和增量寄存器吗 (我正在使用SPIM模拟MIPS) 此外,我正在处理在异常处理程序(奇怪的赋值)中编写的大部分内容,因此我无法真正有效地使

我有一个编程环境,堆栈可以很好地满足我的需要。我想知道在寻址这个分配的空间时,是否有可能以类似的方式使用内存偏移量值,比如$sp

即:

将值保存到字符堆栈的第二个字节?如果我的价值观是错误的,但想法是正确的,请让我知道这个想法-这些价值观纯粹是我希望做的示范

这是可怕的做法吗?我应该避免做的事? 如果不是,但没有办法做到这一点,那么最接近的近似值是使用“la”和增量寄存器吗

(我正在使用SPIM模拟MIPS)


此外,我正在处理在异常处理程序(奇怪的赋值)中编写的大部分内容,因此我无法真正有效地使用$SP。

为什么这是一种糟糕的做法?我不明白你害怕什么。如果您描述的是您希望使用自定义堆栈解决的确切问题,那么我们可能会更好地了解这是否是一种糟糕的做法。在这种情况下,您的堆栈有24个字节的空间,不是一个非常大的堆栈,但取决于您试图做什么,它可能是足够的

但是,您似乎使用的寻址模式是错误的,并且不存在,在MIPS上只有
偏移量(寄存器)
可用。(您可以使用
offset(zero)
来模拟它,但无论如何,我认为这不是您想要在这里做的。)

相反,您希望在程序中初始化一次指向
char\u stack
的寄存器(堆栈指针),然后在堆栈上推送数据时增加它,在弹出时减少它

我坚持认为
sp
只是
r29
的别名,它通常是堆栈指针,但任何其他寄存器都适合作为指向另一个堆栈的本地指针


如果您只在程序的一部分中使用此自定义堆栈,并且希望寄存器在程序其余部分的其他地方可以免费使用,请在离开时将其存储到内存中的专用位置,当您在使用自定义堆栈的例程中返回时,将其加载回去。

我需要将字符写入内存映射的输出缓冲区,以创建计时器,因此我的想法是使用堆栈使输出循环更加直观,因为我必须逐字符执行此操作。因此使用了堆栈(虽然我的mm:ss将是七个字节),但我不知道你为什么称它为堆栈。堆栈是一种数据结构,您可以在其中推入额外的元素,然后可以按照先入后出的顺序将它们拉出。似乎您更希望有一个7字节的缓冲区。
.data
char_stack: .space 24

.text
main:
addi $t0, $zero, 18
sw $t0, 2(char_stack)