【408精华知识】程序的机器级代码表示

在这里插入图片描述

程序的机器级代码表示是计算机组成原理的核心内容,其综合第四章指令与第五章CPU,并常常结合第三章存储系统进行考察,可以说是把计算机组成原理最核心的内容都汇集在了一起。本文着重讨论程序的机器级代码表示,并辅以历年真题进行讲解。关于存储、指令、CPU组成请详见:【408精华知识】关于存储系统,看这一篇就够了!【408精华知识】指令的寻址方式【408精华知识】指令周期的数据流【408精华知识】计算机系统结构等文章。

一、考试要求

  1. 只需关注x86汇编语言,若考察其他汇编语言题目会详细注释;
  2. 题目给出某段简单程序的C语言、汇编语言、机器语言表示,能结合C语言看懂汇编语言的关键语句(看懂常见指令、选择结构、循环结构、函数调用);
  3. 汇编语言、机器语言 一 一对应,要能结合汇编语言分析机器语言指令的格式、寻址方式

在这里插入图片描述

二、汇编语言基础

(一)指令格式

在这里插入图片描述

(二)寄存器

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 通用寄存器E*X(X = 未知);
  2. 变址寄存器(用于线性表、字符串处理等):E*I (I = Index);
  3. 堆栈指针(用于实现函数调用等):E*P(P = Pointer);

注意:每个寄存器大小都是32bit,通用寄存器要根据取数大小使用部分寄存器而不是整个寄存器。

(三)例子

在这里插入图片描述

  1. 寄存器:见(三);
  2. 立即数:常量;
  3. 主存中:给出地址与读写长度;

在这里插入图片描述

(四)总结

在这里插入图片描述

三、常用的x86汇编指令

(一)指令类型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(二)选择语句(jmp/jxxx)

  1. jmp:无条件转移指令
    在这里插入图片描述

  2. jxxx:条件转移指令
    在这里插入图片描述
    注意:关于这几个标志位,详见:【408精华知识】计组中关于数据的考察

举个栗子
在这里插入图片描述

(三)循环语句(loop)

  1. 条件转移指令实现:
    在这里插入图片描述

  2. loop指令实现:
    在这里插入图片描述

(四)函数调用(call/ret)

在这里插入图片描述

  1. 函数调用指令: call <函数名>
    ①将PC旧值压栈保存(保存在函数的栈帧顶部)
    ②设置PC新值,无条件转移至被调用函数的第一条指令
  2. 函数返回指令: ret
    从函数的栈帧顶部找到PC旧值,将其出栈并恢复PC寄存器

1.函数调用栈的位置

在这里插入图片描述

注意:栈底在高地址,栈顶在低地址
在这里插入图片描述

2.如何访问栈帧

在这里插入图片描述

3.栈桢包含的内容

  1. gcc 编译器将每个栈帧大小设置为 16B 的整数倍(当前函数的栈帧除外),因此栈帧内可能出现空闲未使用的区域
  2. 通常将局部变量集中存储在栈帧底部区域
  3. 通常将调用参数集中存储在栈帧顶部区域
  4. 栈帧最底部一定是上一层栈帧基址(ebp旧值)
  5. 栈帧最顶部一定是返回地址(当前函数的栈帧除外)

在这里插入图片描述
在这里插入图片描述

4.总结

在这里插入图片描述

四、历年真题

(一)2014-44、45

(二)2015-43、44

(三)2019-45、46

(四)2020-43、44

写在后面

这个专栏主要是我在学习408真题的过程中总结的一些笔记,因为我学的也很一般,如果有错误和不足之处,还望大家在评论区指出。希望能给大家的学习带来一点帮助,共同进步!!!

参考资料
[1]王道408教材(2025版)
[2]王道课程资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值