Assembly 在函数中使用jal的MIPS
我正在使用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
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,我可以自由吗?我不确定“我可以自由吗”是什么意思。试试看会发生什么。