本文已收录到:MIPS汇编语言学习笔记 专题
- MIPS汇编语言学习笔记03:print HelloWorld
- MIPS汇编语言学习笔记04:print character
- MIPS汇编语言学习笔记05:print integer
- MIPS汇编语言学习笔记06:print a float
- MIPS汇编语言学习笔记07:print a double
- MIPS汇编语言学习笔记08:Adding Integers
- MIPS汇编语言学习笔记09:Subtracting Integers
- MIPS汇编语言学习笔记10:Multiplying Integers (mul方法)
- MIPS汇编语言学习笔记11:Multiplying Integers (mult方法)
- MIPS汇编语言学习笔记12:Multiplying Integers sll
- MIPS汇编语言学习笔记13:Dividing Integers part 1
- MIPS汇编语言学习笔记14:Dividing Integers part 2
- MIPS汇编语言学习笔记15:Introduction to Functions
- MIPS汇编语言学习笔记16:Function Arguments and Return Values
- MIPS汇编语言学习笔记17:将寄存器保存到堆栈
- MIPS汇编语言学习笔记18:函数嵌套调用、递归
- MIPS汇编语言学习笔记19:获取用户输入的整数
- MIPS汇编语言学习笔记20:获取用户输入的单精度浮点数
- MIPS汇编语言学习笔记21:获取用户输入的双精度浮点数
- MIPS汇编语言学习笔记22:获取用户输入的文本
- MIPS汇编语言学习笔记23:if 语句分支指令
- MIPS汇编语言学习笔记26:MIPS While 循环
- MIPS汇编语言学习笔记27:数组
- MIPS汇编语言学习笔记28:使用While循环打印数组
- MIPS汇编语言学习笔记29:数组初始化
- MIPS汇编语言学习笔记30:浮点数(小数)运算
- MIPS汇编语言学习笔记32:浮点数 与 If 语句
原视频:
https://www.bilibili.com/video/BV19J411y7pA?t=49&p=17
程序功能:
通过函数传递参数过程,理解和使用堆栈(push和pop)。
可参考图:
视频讲解:
视频播放器
00:00
00:00
代码:
- .text
- main:
- # 四个参数 g h i j 存在$a0-$a3寄存器中
- addi $a0, $zero, 10
- addi $a1, $zero, 30
- addi $a2, $zero, 10
- addi $a3, $zero, 0
- # 调用leaf_example函数
- jal leaf_example
- # 打印
- addi $v0, $zero, 1
- syscall
- # 宣告主程序结束
- li $v0, 10
- syscall
- leaf_example:
- # 因为要将函数中用到的变量 f,(g+h),(i+j) 暂时存放起来,存放在哪里?答:放在stack中。
- # 下面进行压栈操作
- # 先将sp指针(stack pointer)向低字节方向移动12字节
- addi $sp, $sp, -12
- # 将子函数中的三个变量压栈
- sw $t1, 0($sp)
- sw $t0, 4($sp)
- sw $s0, 8($sp)
- # 函数内部
- add $t0, $a0, $a1
- add $t1, $a2, $a3
- sub $s0, $t0, $t1
- add $a0, $zero, $s0
- # pop
- lw $s0, 8($sp)
- lw $t0, 4($sp)
- lw $t1, 8($sp)
- jr $ra
堆和栈的区别:
一、堆栈空间分配的区别:
1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;
2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
二、堆和栈缓存方式的区别:
1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。
三、堆栈数据结构的区别:
- 栈(数据结构):一种先进后出的数据结构。
- 堆(数据结构):堆可以被看成是一棵树,如:堆排序;
参考文献:https://blog.csdn.net/u014306011/article/details/51044091
提示:博客中的视频如果播放卡顿可以在阿里云盘上下载/在线看视频:
「2021-04-01-11-24-50.mp4」https://www.aliyundrive.com/s/fVP9j8MyWH7
点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看,视频原画倍速播放。
我感觉最后是不是得把指 回 来 呀 , 倒 数 第 二 句 加 个 sp,$sp,12
是的,应该加上这句
支持,讲解很细致,不过私以为有些时候没有必要太过详细关于C的内容,应该不会有人不学C直接学MIPS吧。。。orz
哈哈哈,好建议,我也觉得不会有人直接学汇编,就是讲的时候顺口不小心带了一下C :huaji11:
捉虫,lw sp)应该是lw sp)。。。刚开始还没看懂QAQ
两者意思一样,应该还是MARS软件伪代码的原因。 OωO