jal mips什么都没做

时间:2013-03-22 16:38:42

标签: mips

我的目标是交换swap:function

中的值 然而,它没有做任何事情。

我将a0和a1的值设置为任意值,并且不会覆盖它们的值。 我不允许使用t0,我必须使用堆栈。

仍然,为什么不对a0和a1做任何事情,我是否必须在v0中返回一些内容?

    .text
main:
    la  $a0,n1
    la  $a1,n2
    jal     swap
    li  $v0,1   # print n1 and n2; should be 27 and 14
    lw  $a0,n1
    syscall
    li  $v0,11
    li  $a0,' '
    syscall
    li  $v0,1
    lw  $a0,n2
    syscall
    li  $v0,11
    li  $a0,'\n'
    syscall
    li  $v0,10  # exit
    syscall

swap:


    addi $sp, $sp, -4
    sw $a0, 0($sp)
    addi $a0, $a1, 0
    lw $a1, 0($sp)
    addi $sp, $sp, 4        
    jr $ra


L1: 

    .data
n1: .word   14
n2: .word   27

1 个答案:

答案 0 :(得分:1)

您正在交换指针,而不是他们将指向的值。当您打印这些值时,您可以直接从n1n2而不是通过您交换的指针读取这些值。

要解决此问题,您可以:

  • 在调用n1之前加载n2swap的值(而不是其地址)。然后打印$a0$a1,而不是重新加载n1n2中的值。
  • 取消引用swap中的指针以实际交换值。
  • 在执行print_int系统调用之前取消引用指针,而不是直接从n1n2读取值。

第一种解决方案是最简单的。