stack - MIPS 交换程序/函数问题

标签 stack mips swap

我是 MIPS 的新手,虽然我有点了解如何用它执行基本任务,但我在程序/函数方面遇到了很大的困难。

我希望有人能解释如何解决一个简单的 CPP 程序,例如

void swap( int & a, int & b )
{
  register int t;
  t = a; a = b; b = t;
}

进入 MIPS。 在类里面我们讨论了帧指针和堆栈指针、偏移量,但我只是迷失了。如何将 int a 和 int b 传递给函数?如何返回一个值并在 MIPS 中使用它?我见过类似的数组问题,但希望有人能帮助我解决一个只有两个整数需要交换的问题。谢谢。

最佳答案

首先,您不应该在 C++ 中使用关键字 register,如 it is deprecated在大多数情况下as meaningful as whitespace .

How do you pass int a, and int b to the function?

将 a 和 b 存储在将在子例程中使用的寄存器中。

如果你想交换数组中的两个值,假设在 0x80080000:

lui $t0, 0x8008     ;$t0 = 0x80080000
lw  $t1 0($t0)      ;load (0x80080000) in $t1
lw  $t2 4($t0)      ;load (0x80080004) in $t2
sw  $t1 4($t0)      ;store $t1 in 0x80080004
sw  $t2 0($t0)      ;store $t2 in 0x80080000

如果要交换两个寄存器的值 ( xor swap algorithm ):

xor $t0, $t0, $t1
xor $t1, $t0, $t1
xor $t0, $t0, $t1

或者,如果您关心可读性:

add $t2, $r0, $t0
add $t0, $r0, $t1
add $t1, $r0, $t2

关于stack - MIPS 交换程序/函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34162172/

相关文章:

gcc - gcc 选项 -fstack-check 到底如何工作?

assembly - 在 MIPS 中实现 toUpper 函数

python - 如何交换列表中的多个元素(Python)

Python:如何有效地创建数组的所有可能的 2 元素交换?

memory-management - 差异交换和分页

c - 什么时候为局部变量分配栈空间?

java - 从堆栈打印时如何跳过空格

assembly - 谁负责在 MIPS 中保存被调用者保存的寄存器?

MIPS——追踪这段代码

C++ 使用自己的类的元素继承堆栈