MIPS交换程序/函数问题

问题描述 投票:0回答:2

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

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

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

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

stack mips swap
2个回答
4
投票

OpenAI 可以吃掉我的泥土。我拒绝将我的贡献提供给 OpenAI。


1
投票

您可以创建一个进行交换的函数。 类似这样的东西:

swap:                # Swap function

addi    $sp,$sp,-4  
sw  $t0, 0($sp)      # Stack[0] = $t0
    
add $t0,$a0,$zero    # $t0 = $a0
add $a0,$a1,$zero    # $a0 = $a1
add $a1,$t0,$zero    # $a1 = $t0 (swapping $a0 and $a1)

lw  $t0,0($sp)
addi    $sp,$sp,4   # $t0 = Stack[0]
jr  $ra             # Return to the code 

并使用 Swap 函数,如下所示:

li  $a0,100    # $a0 = 100
li  $a1,33     # $a1 = 33

jal swap       # Swapping $a0 & $a1

注意:寄存器的名称并不重要,您可以使用其他名称。

© www.soinside.com 2019 - 2024. All rights reserved.