MIPS汇编语言学习笔记18:函数嵌套调用、递归

本文已收录于 MIPS汇编语言学习笔记 系列,共计 27 篇,本篇是第 16 篇

本文已收录到:MIPS汇编语言学习笔记 专题

[title]函数递归——复杂的函数调用[/title]

本节主要讲述的是汇编语言中函数的嵌套调用和递归。

我们先来看递归,因为递归是最复杂的函数嵌套调用,我们只要把递归搞明白了,函数的嵌套调用自然不成问题。

关于汇编语言递归的视频,可以参考Youtube上的这个视频:

在这个教学视频中,以高级语言为例,写出了递归法计算阶乘的代码:

[title]计算n阶乘[/title]

 

[title]视频讲解[/title]

 

[title]汇编代码[/title]

  1. .text
  2. main:
  3. addi $a0, $zero, 4
  4. jal fact
  5. #打印
  6. add $a0, $zero, $v0
  7. li $v0, 1
  8. syscall
  9. # 宣告主程序结束
  10. li $v0, 10
  11. syscall
  12. fact:
  13. addi $sp, $sp, -8
  14. sw $a0, 0($sp)
  15. sw $ra, 4($sp)
  16. slti $t0, $a0, 1
  17. beq $t0, $zero, L1
  18. addi $v0, $zero, 1
  19. addi $sp, $sp, 8
  20. jr $ra
  21. L1:
  22. addi $a0, $a0, -1
  23. jal fact
  24. lw $a0, 0($sp)
  25. lw $ra, 4($sp)
  26. mul $v0, $a0, $v0
  27. addi $sp, $sp, 8
  28. jr $ra
.text
	main:
		addi	$a0, $zero, 4
		
		jal	fact
		
		#打印
		add	$a0, $zero, $v0
		li 	$v0, 1
		syscall
		
		# 宣告主程序结束
		li $v0, 10
		syscall 
	fact:
		addi	$sp, $sp, -8
		sw	$a0, 0($sp)
		sw	$ra, 4($sp)
		slti	$t0, $a0, 1
		beq	$t0, $zero, L1
		
		addi	$v0, $zero, 1
		addi	$sp, $sp, 8
		
		jr	$ra
		
		
	L1:
		addi	$a0, $a0, -1
		jal	fact
		
		lw	$a0, 0($sp)
		lw	$ra, 4($sp)
		mul	$v0, $a0, $v0
		addi	$sp, $sp, 8
		jr	$ra

演示文件:

演示

作者: 高志远

高志远,24岁,男生

《MIPS汇编语言学习笔记18:函数嵌套调用、递归》有一条评论

  1. 提示:博客中的视频如果播放卡顿可以在阿里云盘上下载/在线看视频:
    「mips18.mp4」https://www.aliyundrive.com/s/tL2Ser7zj9N
    点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。

发表评论

邮箱地址不会被公开。