26考研 | 王道 | 计算机组成原理 | 四、指令系统
26考研 | 王道 | 计算机组成原理 | 四、指令系统
文章目录
- 26考研 | 王道 | 计算机组成原理 | 四、指令系统
- 1.指令系统
- 0.指令集体系结构
- 1. 指令格式
- 1.按地址码数目不同来分
- 2.指令-按指令长度分类
- 3.指令-按操作码长度分类
- 4.指令-按操作类型分类
- 2. 扩展操作码指令格式
- 2.指令的寻址方式
- 1.顺序寻址(PC)+“1”–>PC
- 2.跳跃寻址:由转移指令指出
- 2. 数据寻址
- 1.常见寻址方式
- 2. 数据寻址–偏移寻址
- 3. 数据寻址–堆栈寻址
- 3.程序的机器级代码表示
- 1. 高级语言与机器级代码之间的对应
- 2. 常用的X86汇编语言指令
- 3. ATu0026T格式和intel格式
- 4. 选择语句的机器级表示
- 5. 循环语句机器级表示
- 6.函数调用的机器级表示
- 1.call和ret指令
- 2.如何访问栈帧
- 3.如何切换栈帧
- 进入函数
- 函数返回
- ret指令
- 4.如何传递参数和返回值
- 4. CISC和RISC
1.指令系统
0.指令集体系结构
1. 指令格式
1.按地址码数目不同来分
2.指令-按指令长度分类
机器字长和存储字长固定不变。
3.指令-按操作码长度分类
4.指令-按操作类型分类
程序控制类指令除了上述还有循环指令
2. 扩展操作码指令格式
2.指令的寻址方式
###1. 指令寻址
1.顺序寻址(PC)+“1”–>PC
图中的指令字长是变化的,不是右边的16bit,所以才会每次读入一个字
2.跳跃寻址:由转移指令指出
本节回顾
- 转移指令是通过修改PC实现的
- 程序计数器PC:存放下一条指令所在单元的地址
- 累加器ACC:用来存放操作数或运算结果
- 指令寄存器IR:临时放置从内存里面取得的程序指令的寄存器,用于存放当前从主存储器读出的正在执行的一条指令。
- 地址寄存器MAR:用来保存当前CPU所访问的内存单元的地址。
2. 数据寻址
1.常见寻址方式
取指令也需要一次访存(如果指令字长等于存储字长的话)
直接寻址
间接寻址
寄存器寻址
寄存器间接寻址
隐含寻址
立即寻址
2. 数据寻址–偏移寻址
基址寻址
变址寻址
其实IX的值就是个偏移量
基址&变址复合寻址
相对寻址
等到取指令取完第M+3条指令之后,PC值就会变为M+4,而不是M+3,所以相对寻址(跳转指令)就得按照PC=M+4来算,也就是补码表示的-4
基址寻址中程序浮动指的是整段程序在内存里的浮动,相对寻址中程序浮动指的是一段代码在程序内部的浮动。
本节回顾
硬件如何实现数的“比较”
注:无条件转移指令jmp2,就不会管PSW的各种标志位。PC=2
3. 数据寻址–堆栈寻址
硬堆栈压入和弹出都不需要访存,而软堆栈不管压入还是弹出都需要一次访存,因为软堆栈是在主存中划分出来了一部分内容作为堆栈(也是函数调用时候保存信息的哪个堆栈)
3.程序的机器级代码表示
1. 高级语言与机器级代码之间的对应
X86汇编语言指令基础
以MOV指令为例
X86架构CPU,有哪些寄存器?
通用寄存器另外两种表示方式
####📊 通用寄存器功能概览
寄存器 | 主要用途 | 细分功能 | 典型指令示例 |
---|---|---|---|
AX | 累加器(核心运算) | 乘除运算、I/O操作、数据中转 | MUL 、DIV 、IN 、OUT |
BX | 基址寄存器(内存寻址) | 存储偏移地址、数组/结构体访问 | MOV AX, [BX] 、LEA |
CX | 计数器(循环/字符串控制) | 循环次数计数、字符串操作重复控制 | LOOP 、REP MOVSB |
DX | 数据寄存器(I/O及高精度运算) | I/O端口寻址、乘除法辅助、大数存储 | IN AX, DX 、MUL DX |
更多例子
总结
2. 常用的X86汇编语言指令
常见的算数运算指令
destination:目的地(d目的操作数)
source:来源地(s源操作数)
目的操作数d不可以是常量,可以来是寄存器或者主存
而s三者都可以
在进行除法运算之前,需要把被除数位扩展,如32bit/32bit要变成64b/32b,存放64位的被除数需要两个寄存器,edx:eax,高32位存放在edx,低32位存放在eax
X86汇编语言当中不允许两个操作数同时来源于主存。
3. ATu0026T格式和intel格式
4. 选择语句的机器级表示
程序默认是顺序执行的
程序中的选择语句(分支结构)
无条件转移指令–jmp
无条件转移指令,类似于c语言里的goto语句
无条件转移指令无法实现if,else语句,因为不需要任何条件就可以跳转
条件转移指令–jxxx
示例:选择语句的机器级表示
扩展:cmp指令的底层原理
5. 循环语句机器级表示
用条件转移指令实现循环
用loop指令实现循环
6.函数调用的机器级表示
1.call和ret指令
2.如何访问栈帧
3.如何切换栈帧
进入函数
通过这两条命令保存上一层函数的栈帧地址,并设置当前函数的栈帧地址
enter是零地址指令,直接等价于那两条命令
函数返回
执行那两条指令前是这样的
执行第一条指令后,也就是让esp和ebp指向同一个位置
执行第二条指令后,就返回了上一层函数调用
这两条等价于leave
ret指令
4.如何传递参数和返回值
如果用来保存 被调用函数的返回值 的寄存器原来有数据,那就得压栈,然后去保存返回值,等把返回值读出来以后再回复原来的数据
前两句代码执行:相当于enter
执行sub指令,相当于划分了一片属于自己的空间,即图中绿色部分
执行接下来两句,作用是初始化变量temp1和temp2
接下来四句指令都是给下层函数add传递参数,需要倒腾一遍,先把temp1放到寄存器,再从寄存器放回主存的对应地址(不从主存直接写到主存是因为汇编的源操作数和目的操作数不可以同时是主存)
执行call指令,然后就是惯例执行add的前两行,这是保存上一层函数的信息
通过ebp访问上层函数保存的本层函数要用的参数,保存到寄存器中
执行add
执行leave
执行ret
通过eax寄存器使用返回值
再次使用eax给再上一层函数返回值
之后就是leave和ret了
4. CISC和RISC
有的复杂指令用硬件实现困难,那就把组成复杂指令的一些简单的指令存储起来(微程序),完成这个复杂指令
比如矩阵乘就可以由剩下的整数加减乘和矩阵加减来完成
相关文章:

26考研 | 王道 | 计算机组成原理 | 四、指令系统
26考研 | 王道 | 计算机组成原理 | 四、指令系统 文章目录 26考研 | 王道 | 计算机组成原理 | 四、指令系统1.指令系统0.指令集体系结构1. 指令格式1.按地址码数目不同来分2.指令-按指令长度分类3.指令-按操作码长度分类4.指令-按操作类型分类 2. 扩展操作码指令格式 2.指令的寻…...
互联网大厂Java求职面试:AI与大模型技术在企业知识库中的深度应用
互联网大厂Java求职面试:AI与大模型技术在企业知识库中的深度应用 第一轮:场景引入与基础架构设计 面试官(技术总监): “郑薪苦,我们先从一个实际场景开始吧。假设我们要为企业知识库设计一个深度融合AI大…...

在 Windows 系统安装 Git
前往官网下载Git - Downloads 目录 一、下载安装包 二、安装 Git 三、安装完成 四、验证安装 五、问题解决 解决步骤 一、下载安装包 点击页面右侧 “Download for Windows” 按钮。 点击页面最上方 “Click here to download” ,下载 Git for Windows/x64 …...
JavaSec-SSTI - 模板引擎注入
简介 SSTI(Server Side Template Injection):模板引擎是一种通过将模板中的占位符替换为实际数据来动态生成内容的工具,如HTML页面、邮件等。它简化了视图层的设计,但如果未对用户输入进行有效校验,可能导致安全风险如任意代码执行…...

基于InternLM的情感调节大师FunGPT
基于书生系列大模型,社区用户不断创造出令人耳目一新的项目,从灵感萌发到落地实践,每一个都充满智慧与价值。“与书生共创”将陆续推出一系列文章,分享这些项目背后的故事与经验。欢迎订阅并积极投稿,一起分享经验与成…...

【性能调优系列】深入解析火焰图:从基础阅读到性能优化实战
博客目录 一、火焰图基础:结构与阅读方法二、深入分析火焰图:关键观察点与性能瓶颈识别1. 识别最宽的函数块2. HTTP 请求处理分析3. 数据库操作分析4. 业务逻辑分析 三、性能优化实战:从火焰图到解决方案1. 线程池性能优化2. 数据库访问优化3…...

Docker 与容器技术的未来:从 OCI 标准到 eBPF 的演进
Docker 的出现无疑是云计算发展史上的一个里程碑。它以其直观的打包、分发和运行方式,极大地简化了应用程序的部署和管理,从而推动了微服务架构和 DevOps 文化的普及。然而,容器技术的未来并非仅仅局限于 Docker,它正朝着更深层次的标准化和更底层的操作系统内核创新方向演…...

PLC远程控制网关支持多塘口水环境数据边缘计算与远程安全传输的配置指南
一、项目背景 渔业养殖是关系到我国食物安全和海洋经济发展的重要产业,随着科技的不断进步,传统的养殖模式面临着诸多挑战,如养殖环境复杂、水质变化难以实时监测、设备运行状态不稳定等,这些问题不仅增加了养殖成本,还…...
3.3 HarmonyOS NEXT原子化服务开发:卡片设计、轻量部署与场景化编排实战
HarmonyOS NEXT原子化服务开发:卡片设计、轻量部署与场景化编排实战 在HarmonyOS NEXT的全场景生态中,原子化服务作为"设备即服务"理念的核心载体,通过免安装、跨设备流转的轻量化形态,重新定义了用户与服务的交互方式…...

C++11 中 final 和 override 从入门到精通
文章目录 一、引言二、final 关键字2.1 final 关键字的基本概念2.2 final 关键字的语法2.3 final 关键字的使用示例2.3.1 防止类被继承2.3.2 防止虚函数被重写 2.4 final 关键字的使用场景2.5 final 关键字的注意事项 三、override 关键字3.1 override 关键字的基本概念3.2 ove…...
跨多个微服务使用 Redis 共享数据时,如何管理数据一致性?
在跨多个微服务使用 Redis 共享数据时,管理数据一致性是一个复杂但至关重要的问题。Redis 本身提供的原子操作和一些数据结构可以提供帮助,但大部分一致性保障需要应用层面的设计和策略。 首先要明确一点:在分布式系统中,强一致性…...
Linux网络——socket网络通信udp
文章目录 UDP通信基础UDP的特点 Linux下UDP通信核心步骤创建UDP套接字绑定本地地址(可选)发送数据函数:sendto()函数原型参数详解典型使用示例 接收数据函数:recvfrom()函数原型参数详解返回值典型使用示例 关键设计原因无连接特性…...

大数据-275 Spark MLib - 基础介绍 机器学习算法 集成学习 随机森林 Bagging Boosting
点一下关注吧!!!非常感谢!!持续更新!!! 大模型篇章已经开始! 目前已经更新到了第 22 篇:大语言模型 22 - MCP 自动操作 FigmaCursor 自动设计原型 Java篇开…...
大模型微调技术全景图:从全量更新到参数高效适配
在预训练大语言模型(LLM)展现出惊人能力之后,如何让这些“通才”模型蜕变为特定领域的“专家”?微调(Fine-Tuning)正是解锁这一潜力的核心技术。本文将深入解析主流微调技术,助你找到最适合任务…...
c++ chrono头文件含义
在C中,<chrono> 是一个标准库头文件,用于处理时间相关的操作,包括时间点、时间间隔和时钟。它提供了一套强大的时间处理功能,支持高精度的时间测量、时间间隔的计算以及时间点的表示。 1. <chrono> 的主要功能 <…...

git互联GitHub 使用教程
一、下载git Git 公司 右键 git config --global user.name "name" git config --global user.email "email" ssh-keygen -t rsa -C email :生成的ssh密钥需要到github 网站中保存ssh 二、GitHub新建repository 三、本地git互联GitHub 找…...
Python爬虫与Java爬虫深度对比:从原理到实战案例解析
在当今数据驱动的时代,网络爬虫技术已成为获取和分析网络数据的重要手段。作为两种最流行的爬虫开发语言,Python和Java各有其独特的优势和适用场景。本文将全面对比Python爬虫与Java爬虫的核心差异,并通过实际代码示例展示它们的具体实现方式,帮助开发者根据项目需求做出合…...
汇编语言综合程序设计:子程序、分支与循环深度解析
本文将通过一个完整的控制台计算器案例,深入探讨汇编语言中子程序、分支结构和循环结构的综合应用,展示模块化编程、输入输出处理和算法实现的核心技术。 一、模块化编程架构设计 1. 系统架构规划 Calculator System ├── main.asm (主程序)…...

SpringBoot+Mysql实现的停车场收费小程序系统+文档
💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...

面向对象进阶 | 深入探究 Java 静态成员与继承体系
个人主页 文章专栏 文章目录 个人主页文章专栏 一、static(静态)1.static 静态变量代码展示内存图 2.static 静态方法工具类:练习: 3.static注意事项4.重新认识main方法 二、继承1.继承概述2.继承的特点3.子类到底能继承父类中的…...

人脸识别技术成为时代需求,视频智能分析网关视频监控系统中AI算法的应用
一、应用背景:时代需求与技术革新的双重驱动 1)传统安防系统的困境:传统监控系统依赖人工逐帧筛查海量视频,在人流密集场所极易漏检,且缺乏实时锁定和主动预警能力,面对突发安全事件响应迟缓。 2&a…...
青岛国瑞数据采集网关软件平台:工业互联的智能基石——安全、高效、开放,驱动企业数字化转型
一、产品定位:工业数据的智能枢纽 青岛国瑞数据采集网关软件平台,以“连接万物、赋能智能”为核心理念,专为工业场景打造,解决设备互联、数据互通、业务融合的核心痛点。无需深奥技术背景,通过极简配置,…...
Git的由来与应用详解:从Linux内核到现代开发的革命性工具
1. Git的诞生背景与历史 1.1 Linux内核开发的困境 1991年,Linus Torvalds创建了开源的Linux操作系统。随着Linux的不断发展壮大,全球各地的志愿者纷纷参与到Linux内核的开发中。然而,在2002年之前,Linux内核的代码管理却处于一种原始状态——世界各地的开发者通过diff方式…...
@Prometheus 监控-MySQL (Mysqld Exporter)
文章目录 **Prometheus 监控 MySQL ****1. 目标****2. 环境准备****2.1 所需组件****2.2 权限要求** **3. 部署 mysqld_exporter****3.1 下载与安装****3.2 创建配置文件****3.3 创建 Systemd 服务****3.4 验证 Exporter** **4. 配置 Prometheus****4.1 添加 Job 到 prometheus…...

pc端小卡片功能-原生JavaScript金融信息与节日日历
代码如下 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>金融信息与节日日历</title><…...
窗口聚合窗口聚合
taskmanager.memory.managed.fraction 在 Apache Flink 中,配置项 taskmanager.memory.managed.fraction 用于控制任务管理器(TaskManager)所占用的总内存中,分配给管理内存(Managed Memory)的比例。管理内…...
es在Linux安装
如果服务器能访问外网: wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.zip不能就手动下载,解压文件到合适目录 unzip elasticsearch-6.4.0.zip -d /opt/ mv /opt/elasticsearch-6.4.0 /opt/elasticsearch创建和日志…...

Go语言学习-->第一个go程序--hello world!
Go语言学习–>第一个go程序–hello world! 1 写代码前的准备 1 创建编写代码的文件夹 2 使用vscode打开3 项目初始化 **go mod init*(初始化一个go mod)Go Module 是 Go 1.11 版本引入的官方依赖管理系统,用于替代传统的 GOPATH…...

高雄市12岁以下身心障碍儿童口腔保健合作院所名单数据集
描述: 关键字:儿童、口腔、保健、院所、名单 字段特征:序号、院所分级、合作医疗院所、市话、地址 语言:繁体 行数/数量:129行,5列 数据量 :7.27KB 格式:CSV、JSON、XML 目录…...
Spring Boot 自动参数校验
在 Spring Boot 中实现参数自动校验主要依靠 Java Bean Validation API(JSR 380)和 Spring 的集成支持。以下是详细实现步骤: 1. 添加依赖 在 pom.xml 中添加验证依赖: <dependency><groupId>org.springframework.b…...