gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:15:21 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com