这周看了刘老师提供的相关视频,以及书中对应的章节“3.7 过程”

这一节分为运行时栈、转移控制、数据传送、栈上的局部存储、寄存器中的局部存储空间和递归过程这 6 个小节

其中前 3 小节看懂了一部分内容,后面两个还没来得及看,下周看完补上

下面记录一下看懂的部分内容

首先,过程作为一种很重要的抽象(方法、函数都是过程),必然存在互相调用的情况,而过程调用有三个要点(以过程 P 调用过程 Q 为例):

传递控制:调用过程 Q 时,需将程序计数器指向 Q 的起始地址;调用结束之后,程序计数器需指向过程 P 调用 Q 指令之后的那条指令(该指令地址称为返回地址)

传递数据:P 向 Q 传递参数,Q 向 P 返回结果

分配和释放内存:Q 的执行可能需要新的内存空间,使用结束之后,需要将其释放

运行时栈

为函数分配的栈空间被称为栈帧,在调用的一开始,就会有定长的栈帧被分配,由于栈向下生长(栈顶的地址在整个栈空间中永远是最小的)。

所以,分配栈帧,在内存中的表现就是栈顶指针(%rsp)减小一个适当的量。

上面提到了,Q 在被调用时可能需要新的空间。

为什么是可能而不是一定呢?

因为当满足以下条件时,过程并不需要栈帧,只需要使用寄存器处理参数和局部变量即可,条件如下:

当所有的局部变量都可以保存在寄存器中,且该函数不会调用任何其他过程

转移控制

转移控制主要涉及 call 和 ret 这两条指令

call 指令将控制转移到一个过程的起始,主要做以下两件事:

跳转到目标过程的起始地址

将原过程中的返回地址压入栈中(放在原过程栈顶)

ret 指令弹出原过程栈顶的值,并跳转至对应的返回地址

数据传送

参数传递时,前 6 个参数会根据参数位置和数据大小选定对应的寄存器,规则如下表(来源于书):

如果参数的个数超过 6 个,那么超出的部分需要通过栈来传递(P 调用 Q 时,存储在 P 的栈帧中)

深入理解计算机系统 第三章 程序的机器级表示 part3的更多相关文章

  1. 深入理解计算机系统 第三章 程序的机器级表示 Part2 第二遍

    第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/9943779.html 本章汇编代码中常出现的几个指令及其含义 1.push 操作数的个数:1 将操作数(一般 ...

  2. 深入理解计算机系统 第三章 程序的机器级表示 Part1 第二遍

    第一遍对应笔记链接 https://www.cnblogs.com/stone94/p/9905345.html 机器级代码 计算机系统使用了多种不同形式的抽象,利用更简单的抽象模型来隐藏实现的细节. ...

  3. 深入理解计算机系统 第三章 程序的机器级表示 part1

    如题所示,这一章讲解了程序在机器中是怎样表示的,主要讲汇编语言与机器语言. 学习什么,为什么学,以及学了之后有什么用 我们不用学习如何创建机器级的代码,但是我们要能够阅读和理解机器级的代码. 虽然现代 ...

  4. 深入理解计算机系统 第三章 程序的机器级表示 part2

    这周由于时间和精力有限,只读一小节:3.4.4  压入和弹出栈数据 栈是一种特殊的数据结构,遵循“后进先出”的原则,可以用数组实现,总是从数组的一端插入和删除元素,这一端被称为栈顶. 栈有两个常用指令 ...

  5. CSAPP:第三章程序的机器级表示3

    程序的机器级表示3 关键点:过程.调试.指针 过程1.运行时栈2.转移控制3.数据传递4.栈上的局部存储5.寄存器中的局部存储空间理解指针使用GDB调试器 过程 1.运行时栈   x86-64的栈向低 ...

  6. CSAPP:第三章程序的机器级表示2

    CSAPP:程序的机器级表示2 关键点:算术.逻辑操作 算术逻辑操作1.加载有效地址2.一元二元操作3.移位操作 算术逻辑操作   如图列出了x86-64的一些整数和逻辑操作,大多数操作分成了指令类( ...

  7. CSAPP:第三章程序的机器级表示1

    CSAPP:程序的机器级表示1 关键点:数据格式.操作数指示符. 数据格式访问信息操作数指示符举例说明 数据格式   术语字(word)表示16位数据类型,32位数为双字(double words), ...

  8. 【CSAPP】第三章 程序的机器级表示

    目录 1. 数据的编码与存储 2. 汇编指令 2.1 数据传送指令 访存方式 数据传送指令 入栈出栈 2.2 算术/逻辑指令 2.3 过程控制指令 控制码 比较指令 跳转指令 条件设置指令 3. 程序 ...

  9. 【CSAPP】三、程序的机器级表示

    本章基于两种相关的机器语言:Intel IA32和x86-64,前者注重32位,后者注重64位. 本章脉络:c\汇编\机器码之间的关系,数据的表示,控制结构如何实现.运行栈,局部变量的存储,数据结构. ...

随机推荐

  1. docker的使用之镜像命令

    说明 Docker运行容器前需要本地存在对应的镜像 ,如果镜像不存在本地,Docker会从镜像仓库下载 获取镜像 通过网址可以找到目标镜像 https://hub.docker.com/explore ...

  2. JVM垃圾回收(上)

    Java 中的垃圾回收,常常是由 JVM 帮我们做好的.虽然这节省了大家很多的学习的成本,提高了项目的执行效率,但是当项目变得越来越复杂,用户量越来越大时,还是需要我们懂得垃圾回收机制,这样也能进行更 ...

  3. MS12-042 用户态调度机制特权提升漏洞

    漏洞编号:MS12-042 披露日期: 2012/6/12 受影响的操作系统:Windows 2000;XP;Server 2003;windows 7;Server 2008; 测试系统:windo ...

  4. windows下cmd组合命令和管道命令

    组合命令:&& 管道命令:|

  5. jmeter基本组件介绍

    常用术语统一:元件-jmeter工具菜单的一个子菜单(功能)  组件-一组元件的集合.如http请求与取样器的的关系  jmeter测试计划要素: (1)脚本中测试计划只能有一个: (2)测试计划中至 ...

  6. Uipath 选择页面下拉列表中的选项

    http://www.rpatokyo.com/ 使用Select item Activity选择页面下拉列表中的选项 在open browser中拖入Select Item Activity,配置参 ...

  7. 【Autofac打标签模式】PropertySource和Value

    [ Autofac打标签模式]开源DI框架扩展地址: https://github.com/yuzd/Autofac.Annotation/wiki *:first-child { margin-to ...

  8. GO实现简单(命令行)工具:sftp,文檔压解,RDS备份,RDS备份下载

    GO实现简单(命令行)工具:sftp,文檔压解,RDS备份,RDS备份下载 轉載請註明出處:https://www.cnblogs.com/funnyzpc/p/11721978.html 内容提要: ...

  9. Spring Boot入门(二):获取配置文件值

    本篇博客主要讲解下在Spring Boot中如何获取配置文件的值. 1. 使用yaml配置文件 Spring Boot默认生成的配置文件为application.properties,不过它也支持ya ...

  10. OsmocomBB软件实现栈概况

    OsmocomBB软件实现栈概况 简单地说,本文仅描述软件中GSM信号接收到部分. 暂不提及发送流程,引导加载/引导流程,以及各种控制路径特别是从layer1到RF硬件. 首先,通过天线接收RF信号, ...