Assembly 在函数中使用jal的MIPS

Assembly 在函数中使用jal的MIPS,assembly,mips,Assembly,Mips,我正在使用mips,我必须在这样一个函数中调用一个函数 main() { func1(); } func1(){ func2(); } func2(){} 我试过这个: .data str1: .asciiz "Başlıyo\n" str2: .asciiz "Bitti\n" str3: .asciiz "Loopta\n" str4: .asciiz "funct1\n" str5: .asciiz "funct2\n" .text .globl main

我正在使用mips,我必须在这样一个函数中调用一个函数

main() {
    func1();
}
func1(){ 
    func2(); 
}
func2(){}
我试过这个:

.data

str1: .asciiz "Başlıyo\n"   
str2: .asciiz "Bitti\n"
str3: .asciiz "Loopta\n"
str4: .asciiz "funct1\n"
str5: .asciiz "funct2\n"

.text
.globl main
main:

    li $v0, 4
    la $a0, str1
    syscall

    jal func1
    jal func2
    j exit

func1:

    li $v0, 4
    la $a0, str4
    syscall

    jal func2

    jr $ra

func2:

    li $v0, 4
    la $a0, str5
    syscall

    jr $ra;

exit :

    li $v0, 4
    la $a0, str2
    syscall
我在
Ubuntu
中使用
QtSpim
,它没有给出错误,但看不到输出

str2“Bitti”


您意识到每次使用
jal
时,
$ra
寄存器都会更新吗?因此,如果函数A调用函数B,那么A必须将
$ra
保存到某个地方(例如堆栈上),才能返回给调用A的人。如果堆栈并推送$ra,我可以自由吗?我不确定“我可以自由吗”是什么意思。试试看会发生什么。