本次笔记内容:
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】子程序设计:子程序的嵌套与递归,多个模块之间的参数传送相关推荐

  1. 【汇编语言与计算机系统结构笔记15】子程序设计:调用与返回,保护与恢复寄存器,子程序的参数传递,堆栈平衡,结构伪操作 STRUC

    本次笔记内容: 20.子程序设计-1-1 21.子程序设计-1-2 22.子程序设计-1-3 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的 ...

  2. 【汇编语言与计算机系统结构笔记01】x86/MIPS/ARM指令集概述与特性,一篇HPCA引发的思考(商业生态的决定性作用)

    资源Bilibili AV46914471 + AV57921488 汇编语言与计算机系统结构 清华大学 张悠慧 本次笔记内容: 01.汇编语言与计算机系统结构 02.汇编基础知识--指令集综述 文章 ...

  3. 【汇编语言与计算机系统结构笔记17】MIPS 汇编初步

    本次笔记内容: 25.MIPS汇编初步-1 26.MIPS汇编初步-2 27.MIPS指令集与汇编程序设计 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录 ...

  4. 【汇编语言与计算机系统结构笔记20】补充内容:可定制处理器指令集

    本次笔记内容: 31.补充内容--可定制处理器指令集-1 32.补充内容--可定制处理器指令集-2 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库. 本节课对应幻灯片:汇编语言程序设计 ...

  5. 【汇编语言与计算机系统结构笔记19】虚存概念初步,MIPS内存管理

    本次笔记内容: 29.虚存概念初步 30.MIPS内存管理 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库. 本节课对应幻灯片:汇编语言程式设计-MIPS.pdf,第92页起. 这是课 ...

  6. 【汇编语言与计算机系统结构笔记18】MIPS指令集与汇编程序设计 异常处理

    本次笔记内容: 28.MIPS指令集与汇编程序设计-2 补充:MIPS32异常处理 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库. 本节课对应幻灯片:汇编语言程式设计-MIPS.pd ...

  7. 【汇编语言与计算机系统结构笔记14】循环和分支程序设计

    本次笔记内容: 18.循环程序设计-1 19.分支程序设计 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的内容与对应ppt页码. 本节课对应 ...

  8. 【汇编语言与计算机系统结构笔记12】序格式与伪操作:简化段的定义、操作符等

    本次笔记内容: 15.程序格式与伪操作-2 16.上机过程-1(前15分钟) 注:我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的内容与对应ppt ...

  9. 【汇编语言与计算机系统结构笔记11】程序格式与伪操作:段定义、堆栈 #简洁笔记形式

    本次笔记内容: 14.程序格式与伪操作-1 注:本节课更换为一名女老师.我找到了对应内容的课件,请见我于GitHub的CS笔记仓库.因此,为了节省时间,我只记录老师上课强调的内容与对应ppt页码. 注 ...

最新文章

  1. Spring Boot与Web开发简介||SpringBoot对静态资源的映射规则
  2. inner join和left join还有right join的区别
  3. python每隔30s检查一次_用Python写一个“离线语音提示器”来提醒我们别忘记了时间...
  4. 在线代码编辑器 CodeMirror 配置说明 - javascript开发的代码语法高亮显示引擎
  5. javascript实现的复制到剪贴板
  6. python scrapy框架爬虫_Python Scrapy爬虫框架
  7. 【Level 08】U07 Mixed Feelings L5 Front page news
  8. 图片圆角边框自适应宽高(深夜原创)
  9. window 后台启动java参数启动
  10. Linux内核入门(七)—— 必要的编译知识
  11. 用Java实现MD5加盐
  12. GraphQL 总结 + 在Django应用(Graphene)
  13. Qt for Python做一个虚拟示波器软件
  14. 6.WIN10 short cut
  15. 通过Windows任务计划 ,定期恢复虚拟机快照
  16. 斩断***黑手:如何使用IceSword冰刃
  17. NSG是什么?适用于哪些产品?
  18. Excel如何统计指定背景颜色数据个数
  19. 老鹰主机怎么样_HawkHost老鹰主机香港机房速度怎么样?
  20. 免费临时网页邮箱(可丢弃式邮箱)

热门文章

  1. 【SQL】CASE与DECODE
  2. Genymotion 启动app闪退解决方案
  3. PyCharm无法找到已安装的Python类库的解决方法
  4. informatica 常见问题及解决方案
  5. 无法连接Elasticsearch解决方案
  6. 解决springmvc加载JS,CSS等文件问题【转】
  7. sun.misc.BASE64Encoder找不到的解决方法
  8. MySQL存储过程的异常处理
  9. 启动程序端口被占用Address already in use: bind解决方案
  10. MySQL字符串替换