Mips 日航没有做任何事

Mips 日航没有做任何事,mips,Mips,我的目标是交换swap:函数中的值 但是它什么也没做 我将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

我的目标是交换swap:函数中的值

但是它什么也没做

我将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
您正在交换指针,而不是指针指向的值。当您打印这些值时,您直接从
n1
n2
读取它们,而不是通过您交换的指针

要解决此问题,您可以:

  • 在调用
    swap
    之前,加载
    n1
    n2
    的值(而不是它们的地址)。然后打印
    $a0
    $a1
    ,而不是从
    n1
    n2
    重新加载值
  • 取消对swap中指针的引用,以便实际交换值
  • 在执行
    print\u int
    syscall之前取消对指针的引用,而不是直接从
    n1
    n2
    读取要打印的值
第一个解决方案将是最简单的