计算机组成原理完整学习笔记(六):指令系统
前言
如果你对这篇文章可感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。
文章目录
- 前言
- 第六章 指令系统
- 6.1 指令系统概述
- 6.1.1 指令系统
- 6.1.2 机器指令格式
- 6.1.3 操作码设计举例
- 6.1.3 指令字长
- 6.2 操作类型
- 6.2.1 数据传送类指令
- 6.2.2 运算类指令
- 6.2.3 移位指令
- 6.2.4 转移指令
- 6.2.5 输入输出指令
- 6.2.6 其他指令
- 6.3 数据寻址方式
- 6.3.1 立即寻址
- 6.3.2 直接寻址
- 6.3.3 隐含寻址
- 6.3.4 间接寻址
- 6.3.5 寄存器寻址
- 6.3.6 寄存器间接寻址
- 6.3.7 基址寻址
- 6.3.8 变址寻址
- 6.3.9 相对寻址
- 6.3.10 堆栈寻址
第六章 指令系统
6.1 指令系统概述
6.1.1 指令系统
物理的计算机只能够执行机器语言程序,组成程序的每一条语句称作一条机器指令,一种计算机能够执行的机器指令的集合就是这种计算机的指令系统。
6.1.2 机器指令格式
指令的一般格式
操作码
操作码位数反映机器指令数目,内容反映机器做什么操作。
操作码类别:
- 长度固定,如 RISC 机器,指令规整,译码简单
- 长度可变,操作码分散在指令字的不同字段中,控制器设计复杂
地址码
地址码用来指定该指令操作数的地址、结果的地址,以及(可能有的)下一条指令的地址。
例如指令: MOV AX, [40],其中 “40” 指明了要操作的源操作数的地址,AX 指明了目的操作数的地址。
操作码扩展技术
通过操作码扩展(对应的地址码长度收缩)技术,能够有效地缩短指令的平均长度。
6.1.3 操作码设计举例
例题
假设一台计算机指令字长 16 位,操作码与地址码都为 4 位,请列出几种可能的操作码设计方法。
固定操作码
扩展操作码
扩展方案非常多,下面给出两种扩展方式。
6.1.3 指令字长
指令字长取决于操作码长度、地址码长度和地址码个数。指令按照字长是否可变分为两种:
- 指令字长固定: 指令字长 = 存储字长
- 指令字长可变: 按字节的倍数变化
指令字长可变,导致控制电路复杂,多字长指令需要多次访存,应尽量把常用指令设计为单字长或短字长指令。
6.2 操作类型
6.2.1 数据传送类指令
数据传送类指令主要分为 “源地址” 和 “目的地址” 两个部分。
- 寄存器-寄存器 MOV AX, BX
- 寄存器-存储器 MOV [20], AX(STORE指令)
- 存储器-寄存器 MOV AX, [20](LOAD指令)
- 存储器-存储器 MOV [20], [30]
- 堆栈操作: PUSH AX(入栈),POP AX(出栈)
- 清零、置1: MOV AX,0(清零),MOV AX,1(置1)
6.2.2 运算类指令
算术运算
加、减、乘、除、求补、浮点、十进制运算
- ADD AX, 20
- DIV AX, 3
逻辑运算
与、或、非、异或
- AND AX, 30
- XOR AX, 30
其他运算
位测试、位清楚、位求反
6.2.3 移位指令
一般来说,有 8 种移位指令:
算术左移、算术右移、逻辑左移、逻辑右移、小循环左移、小循环右移、大循环左移、大循环右移
6.2.4 转移指令
无条件转移指令
直接跳转到某处,不取决于任何条件。类似 C 中的 goto 语句,例如 JMP LOOP。
条件转移指令
根据机器当前的程序状态字中的某位来决定是否执行转移,例如 JZ LOOP。
JZ LOOP: 如果当前指令运算结果为0,则会跳转到 LOOP 标号处。
调用与返回指令
类比 C 程序中的函数调用,以及函数返回。例如 CALL PRO1、RET
子程序调用特点:
- 子程序可以在多处被调用
- 子程序调用可以嵌套
- CALL 与 RET 指令配对使用
- 要妥善保存子程序的返回地址
陷阱(TRAP)指令
- 一旦机器运行出现意外故障(未定义指令、除0、设备故障、电压不稳),计算机发出陷阱信号(陷阱隐指令),暂停当前指令的执行,转入故障处理程序。陷阱指令不提供给用户使用,由机器自动执行。
- 也有某些机器提供陷阱指令,例如 IBM-PC 提供的 INT xx 软中断指令,用来完成系统调用。
6.2.5 输入输出指令
对 I/O 单独编址对计算机,设置有专门的输入输出指令,用来操纵外设,如下所示。
- IN AX, [20](外设端口 →\rightarrow→ CPU 的寄存器)
- OUT DX, AX(CPU 的寄存器 →\rightarrow→ 外设端口)
6.2.6 其他指令
- 停机指令、空操作指令、开中断指令、关中断指令、置条件码指令
- 字符串传送、字符串比较、字符串查询
- 特权指令(操作系统用)
- 向量指令
- 多处理机指令
6.3 数据寻址方式
数据寻址有多种,需要在指令中明确指出采用哪一种寻址方式,可以专门设置一个寻址方式特征字段,或纳入地址码中。
形式地址 A: 指令字中的地址
有效地址 EA: 操作数的真实地址
有效地址由形式地址根据寻址方式来确定。
在大多数机器中,指令字长 = 存储字长 = 机器字长。
6.3.1 立即寻址
又称为立即数寻址,即指令中的形式地址部分不是一个操作数的地址,而是操作数本身,因此该指令的执行过程不需要寻址。
如指令 “MOV AX, 20H”,将 20H 放入 AX 寄存器中,其中立即数可正可负,负数需要用补码来表示。
特点
- 立即寻址的指令执行阶段不访存
- A 的位数限制了立即数的范围
6.3.2 直接寻址
指令中的形式地址部分即为有效地址,即 EA = A。
例如指令 “MOV AX, [20H]”,即是将 [20H] 地址中的数据传输到 AX 寄存器中。
特点
- 执行阶段访问一次存储器
- A 的位数限制了该指令操作数的寻址范围
- 操作数的地址不易修改
6.3.3 隐含寻址
指令中不直接给出操作数地址,操作数地址通常隐含在操作码或某个(约定)寄存器中。
如 ADD 操作,即是默认另一个操作数在 ACC 中。将 A 地址中的数取出与 ACC 中的数进行加法运算。
6.3.4 间接寻址
指令中的形式地址不是操作数的地址,而是 “操作数地址的地址”。
其中在多次间址时,需要查看数据单元格中的第一位数据,如果为 1 则表示继续间址,如果为 0 则为真正地址。
特点
- 可以扩大寻址范围
- 便于编制转移程序
JMP @A 指令,表示跳转到 A 单元中所指示的地址,为间接寻址。正因为这条间址指令,我们转入子程序时只需修改 A 单元中数据,即可实现从子程序再跳转回主程序的功能。
6.3.5 寄存器寻址
指令中的形式地址直接指出寄存器的编号,操作数存储于寄存器中,即 EA=RiEA=R_iEA=Ri,有效地址即为寄存器编号。
如 “MOV AX, BX” 指令,即是将 BX 寄存器中的数据送到 AX 中。
特点
- 执行阶段不访存,只访问寄存器,执行速度快
- 寄存器个数有限,可缩短指令字长
6.3.6 寄存器间接寻址
指令中的形式地址为寄存器的编号,寄存器的内容是操作数的有效地址。
EA=(Ri)EA = (R_i)EA=(Ri),有效地址在寄存器中。
如指令 “MOV AX, [BX]”,就是根据 BX 寄存器中的地址,去主存中访问对应数据,并将数据存入 AX 寄存器中。
特点
有效地址在寄存器中,操作数在存储器中,执行阶段访存便于编制循环程序。
- 可以访存一次,就将寄存器数值加1,实现类似于数组的访问。
6.3.7 基址寻址
指令中的形式地址与基址寄存器内容之和为有效地址。
- 采用专用寄存器作为基址寄存器(隐式)
- 采用通用寄存器作为基址寄存器(显式)
专用寄存器基地寻址
EA=(BR)+AEA=(BR)+AEA=(BR)+A,其中 BR 为基址寄存器
通用寄存器基址寻址
需要给出寄存器编号作为基址寄存器。
- 可指定由哪个通用寄存器作为基址寄存器。
- 在程序的执行过程中 R0R_0R0 内容不变,形式地址 AAA 可变。
特点
- 可扩大寻址范围
- 有利于多道程序
- 将程序开头地址定位于某个寄存器中,即可实现更换通用寄存器,即实现程序切换。
- 基址寄存器内容由操作系统或管理程序确定
6.3.8 变址寻址
指令中的形式地址与变址寄存器内容之和为有效地址。
EA = (IX) + A,与基地寻址非常相似。唯一的不同点在于基址寄存器中的值由操作系统或管理程序决定,而 IX 的内容由用户指定。
特点
- 可以扩大寻址范围
- 由于 IX 的内容由用户指定,因此在程序执行过程中,IX 内容可变,可以用于设计处理一些数组问题。
6.3.9 相对寻址
有效地址为程序计数器 PC 的值与形式地址之和。
EA = (PC) + A,A 的位数决定操作数的寻址范围,可编写浮动程序(程序放哪都能执行)。
6.3.10 堆栈寻址
堆栈有两个操作,分别是 PUSH(压栈) 与 POP(弹栈)。进栈与出栈的操作分别由 SP 指针的加减完成。
计算机组成原理完整学习笔记(六):指令系统相关推荐
- 《王道计算机组成原理》学习笔记和总目录导航
<王道计算机组成原理>学习笔记和总目录导读 本篇文章是阅读和学习<王道计算机组成原理>后总结的理论知识笔记导航,专门用于遗忘后复习 下面的文章是我在学习了<王道计算机组成 ...
- 计算机组成原理(哈工大)学习笔记
文章目录 计算机组成原理 一.计算机系统概论 1.1计算机系统简介 一.计算机的软硬件概念 二.计算机系统的层次结构 三.计算机体系结构和计算机组成 1.2计算机的基本组成 1.3计算机硬件的主要技术 ...
- 《计算机组成原理》学习笔记
目录 第一章 计算机系统概论 1.计算机的软硬件概念及系统的层次结构 2.计算机的基本组成 3.计算机体系结构与组成 4.冯·诺伊曼机基本组成.特点 5.计算机基本概念:CPU(由哪几部分构成)机器字 ...
- 《王道计算机组成原理》学习笔记总目录+思维导图
本篇文章是对<2021王道组成原理>知识点的笔记总结归档,虽说是2021年的,但是这些都是最核心的底层基础知识,过多少年都不会有很大的变化,核心都差不多. 我的武功秘籍:note.bith ...
- 【考研计算机组成原理】课堂笔记目录汇总——知识点清晰
文章目录: 一:基础笔记 二:强化笔记 三:冲刺笔记 一:基础笔记 [考研计算机组成原理]课堂笔记1 第一章 计算机系统概论Introduction to computer systems [考研计算 ...
- 计算机原理考研题库,2022考研853计算机专业基础综合《计算机组成原理》复习笔记及考研真题题库.pdf...
2022考研 853计算机专业基础综合 <计算机组成原理>复习笔记及考 研真题题库 计算机系统概论 一.计算机的分类 1电子模拟计算机 模拟计算机的特点是数值由连续量来表示,运算过程也是连 ...
- 计算机二级Python学习笔记(七)
上一篇:计算机二级Python学习笔记(六) 第7章 文件和数据格式化 7.1 文件的使用 文件:数据的集合和抽象,存储在辅助存储器上的一组数据序列,可以包含任何数据内容. 文件类型:文本文件(由单一 ...
- 853计算机科学基础综合,2022考研853计算机专业基础综合《计算机组成原理》复习笔记及考研真题题库...
2022考研853计算机专业基础综合<计算机组成原理>复习笔记及考研真题题库 计算机系统概论 一.计算机的分类 1电子模拟计算机 模拟计算机的特点是数值由连续量来表示,运算过程也是连续的. ...
- Ethernet/IP 学习笔记六
Ethernet/IP 学习笔记六 EtherNet/IP defines two primary types of communications: explicit and implicit (Ta ...
- 吴恩达《机器学习》学习笔记六——过拟合与正则化
吴恩达<机器学习>学习笔记六--过拟合与正则化 一. 过拟合问题 1.线性回归过拟合问题 2.逻辑回归过拟合问题 3.过拟合的解决 二. 正则化后的代价函数 1.正则化思想 2.实际使用的 ...
最新文章
- oracle12之 多租户容器数据库架构
- cf559C. Gerald and Giant Chess(容斥原理)
- jacoco + junit + mock 单测没有统计覆盖率问题
- mysql 无法创建用户_无法在MySQL 5.6中创建用户
- juniper srx电话单通
- 十、Shell脚本编程
- c++11 多线程依次打印ABC
- 在线教育开源 java_新款SpringBoot在线教育平台开源了
- 论文阅读_ICD编码_MSMN
- android开发---9.MediaPlayer实现音乐播放的demo
- 使用超临界二氧化碳的晶圆清洗技术
- 国内宠物保险“不受宠”背后,这门生意该如何做好?
- Groovy语言的介绍
- vue 精简教程(四) vuerouter 路由
- ORA-20000故障排除手记
- RTSP/RTMP/GB28181协议/海康SDK/Ehome协议接入TSINGSEE青犀视频平台磁盘空间计算介绍
- Django开发日记(前后端不分离,使用Templates模板)
- 数据结构笔记——自用
- qcc514x-qcc304x调试笔记-蓝牙状态相关api
- 微信支付的系统架构到底有多厉害?
热门文章
- 伪造邮件***,社工钓鱼,你中招了吗【一】
- sha1 java 代码_HMAC-SHA1的java源代码实现
- Linux vip地址通信原理,IPv6的组播地址(掌握IPv6通信原理的关键知识点)
- java 线程池的原理与实现_Java线程池原理及实现
- centos下mysql备份数据库命令_[CentOS]下mysql数据库常用命令总结
- Matplotlib_库的安装
- OpenCV-图像处理(29、凸包-Convex Hull)
- php代码审计_代码审计|PHP反序列化初识
- 微型计算机普遍采用的数字编码是,计算机原理复习题1
- swagger 上传文件 参数_跟我一起学.NetCore之Swagger让前后端不再烦恼及界面自定义...