我是 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/