【汇编语言与计算机系统结构笔记16】子程序设计:子程序的嵌套与递归,多个模块之间的参数传送
本次笔记内容:
23.子程序设计-2-1
24.子程序设计-2-2
注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库。因此,为了节省时间,我只记录老师上课强调的内容与对应ppt页码。
本节课对应幻灯片:汇编语言程序设计-循环与分支,第23页起。
上节课讲了子程序设计:
- 子程序的定义(简化形式):
子程序名字 PROC
- 子程序调用基本指令:
CALL
- 如果是段内调用,子程序可以定义为一个进的属性,
ret
也是近的调用; - 不在一个代码段中,则是远调用,要定义为
far
; - 关于子程序的保存和恢复,要放在堆栈里;
- 子程序间的参数传递:通过寄存器、通过存储器(子程序取程序变量的名字,但是这样不能重复操作,因为主程序变量名变了,子程序就得重写)、因此使用地址表;此外,还有
通过堆栈传参
,最为常用,也是高级语言的习惯。
文章目录
- P23 子程序的嵌套与递归
- P24 以n!为例
- P29 更简单的写法
- P32 多个模块之间的参数传送
- P33 举例
- 拓展
P23 子程序的嵌套与递归
P24 以n!为例
把问题一步步化小,并且还有个回归问题。
对于参数部分,我们压了个 result
的地址。放了个cs_ip
,看样子也做了个远程调用。
如上,在主程序中压了 result 与 n 。
然后开始调用了,call
。
如上,把 0 压入时,已经压倒最深处了,此刻相当于剥洋葱剥到芯处了。
BP不压到堆栈不可以,因为没有BP没法不做嵌套返回。
实际运行与偏移量如上。
如上,堆栈段的显示。
P29 更简单的写法
如上,每次返回返回到上一层的部分。
递归调用结束,要 pop 。
此外,老师还举了不少实例,但是PPT里没有,视频里也没有。还举了用高级语言的递归,其编译后是什么样的。
P32 多个模块之间的参数传送
之前涉及的,都是在一个模块中的传参。
- 局部符号:在本模块中定义,在本模块中引用的符号。
- 外部符号:在某一模块中定义,在另一模块中引用的符号。
PUBLIC 符号
EXTRN 符号:类型
P33 举例
如上,调用了其他模块,后面的会覆盖前面的同名片段。
拓展
此外,老师还介绍了:
- 模式
- 可视区域
- 一些高级语法,子程序传参,这可以帮助我们自动地压入参数(在调用子程序时)
- 将 proc 改为 proto ,声明子程序
- 一般把子程序声明放在头文件中
- 一般会把定义写在调用的后面,这样可以先调用后定义
- 使用 involve 来调用,则传参必须用堆栈来调用,并且汇编器会自动完成堆栈平衡
- 可以用别的方式传参吗?放到内存,也像一帧一帧的,但是在内存中,同一条语句,存到了同一个位置;但是堆栈中,默认sp的位置,同一条指令的具体操作可能不同。
但是都没有资料。
【汇编语言与计算机系统结构笔记16】子程序设计:子程序的嵌套与递归,多个模块之间的参数传送相关推荐
- 【汇编语言与计算机系统结构笔记15】子程序设计:调用与返回,保护与恢复寄存器,子程序的参数传递,堆栈平衡,结构伪操作 STRUC
本次笔记内容: 20.子程序设计-1-1 21.子程序设计-1-2 22.子程序设计-1-3 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的 ...
- 【汇编语言与计算机系统结构笔记01】x86/MIPS/ARM指令集概述与特性,一篇HPCA引发的思考(商业生态的决定性作用)
资源Bilibili AV46914471 + AV57921488 汇编语言与计算机系统结构 清华大学 张悠慧 本次笔记内容: 01.汇编语言与计算机系统结构 02.汇编基础知识--指令集综述 文章 ...
- 【汇编语言与计算机系统结构笔记17】MIPS 汇编初步
本次笔记内容: 25.MIPS汇编初步-1 26.MIPS汇编初步-2 27.MIPS指令集与汇编程序设计 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录 ...
- 【汇编语言与计算机系统结构笔记20】补充内容:可定制处理器指令集
本次笔记内容: 31.补充内容--可定制处理器指令集-1 32.补充内容--可定制处理器指令集-2 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库. 本节课对应幻灯片:汇编语言程序设计 ...
- 【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理
本次笔记内容: 29.虚存概念初步 30.MIPS内存管理 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库. 本节课对应幻灯片:汇编语言程式设计-MIPS.pdf,第92页起. 这是课 ...
- 【汇编语言与计算机系统结构笔记18】MIPS指令集与汇编程序设计 异常处理
本次笔记内容: 28.MIPS指令集与汇编程序设计-2 补充:MIPS32异常处理 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库. 本节课对应幻灯片:汇编语言程式设计-MIPS.pd ...
- 【汇编语言与计算机系统结构笔记14】循环和分支程序设计
本次笔记内容: 18.循环程序设计-1 19.分支程序设计 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的内容与对应ppt页码. 本节课对应 ...
- 【汇编语言与计算机系统结构笔记12】序格式与伪操作:简化段的定义、操作符等
本次笔记内容: 15.程序格式与伪操作-2 16.上机过程-1(前15分钟) 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的内容与对应ppt ...
- 【汇编语言与计算机系统结构笔记11】程序格式与伪操作:段定义、堆栈 #简洁笔记形式
本次笔记内容: 14.程序格式与伪操作-1 注:本节课更换为一名女老师.我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的内容与对应ppt页码. 注 ...
最新文章
- Spring Boot与Web开发简介||SpringBoot对静态资源的映射规则
- inner join和left join还有right join的区别
- python每隔30s检查一次_用Python写一个“离线语音提示器”来提醒我们别忘记了时间...
- 在线代码编辑器 CodeMirror 配置说明 - javascript开发的代码语法高亮显示引擎
- javascript实现的复制到剪贴板
- python scrapy框架爬虫_Python Scrapy爬虫框架
- 【Level 08】U07 Mixed Feelings L5 Front page news
- 图片圆角边框自适应宽高(深夜原创)
- window 后台启动java参数启动
- Linux内核入门(七)—— 必要的编译知识
- 用Java实现MD5加盐
- GraphQL 总结 + 在Django应用(Graphene)
- Qt for Python做一个虚拟示波器软件
- 6.WIN10 short cut
- 通过Windows任务计划 ,定期恢复虚拟机快照
- 斩断***黑手:如何使用IceSword冰刃
- NSG是什么?适用于哪些产品?
- Excel如何统计指定背景颜色数据个数
- 老鹰主机怎么样_HawkHost老鹰主机香港机房速度怎么样?
- 免费临时网页邮箱(可丢弃式邮箱)