前言

如果你对这篇文章可感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。

文章目录

  • 前言
  • 第六章 指令系统
    • 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 数据传送类指令

数据传送类指令主要分为 “源地址” 和 “目的地址” 两个部分。

  1. 寄存器-寄存器 MOV AX, BX
  2. 寄存器-存储器 MOV [20], AX(STORE指令)
  3. 存储器-寄存器 MOV AX, [20](LOAD指令)
  4. 存储器-存储器 MOV [20], [30]
  5. 堆栈操作: PUSH AX(入栈),POP AX(出栈)
  6. 清零、置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

子程序调用特点:

  1. 子程序可以在多处被调用
  2. 子程序调用可以嵌套
  3. CALL 与 RET 指令配对使用
  4. 要妥善保存子程序的返回地址

陷阱(TRAP)指令

  • 一旦机器运行出现意外故障(未定义指令、除0、设备故障、电压不稳),计算机发出陷阱信号(陷阱隐指令),暂停当前指令的执行,转入故障处理程序。陷阱指令不提供给用户使用,由机器自动执行。
  • 也有某些机器提供陷阱指令,例如 IBM-PC 提供的 INT xx 软中断指令,用来完成系统调用。

6.2.5 输入输出指令

对 I/O 单独编址对计算机,设置有专门的输入输出指令,用来操纵外设,如下所示。

  • IN AX, [20](外设端口 →\rightarrow→ CPU 的寄存器)
  • OUT DX, AX(CPU 的寄存器 →\rightarrow→ 外设端口)

6.2.6 其他指令

  1. 停机指令、空操作指令、开中断指令、关中断指令、置条件码指令
  2. 字符串传送、字符串比较、字符串查询
  3. 特权指令(操作系统用)
  4. 向量指令
  5. 多处理机指令

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 则为真正地址。

特点

  1. 可以扩大寻址范围
  2. 便于编制转移程序

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 基址寻址

指令中的形式地址与基址寄存器内容之和为有效地址。

  1. 采用专用寄存器作为基址寄存器(隐式)
  2. 采用通用寄存器作为基址寄存器(显式)

专用寄存器基地寻址

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. 《王道计算机组成原理》学习笔记和总目录导航

    <王道计算机组成原理>学习笔记和总目录导读 本篇文章是阅读和学习<王道计算机组成原理>后总结的理论知识笔记导航,专门用于遗忘后复习 下面的文章是我在学习了<王道计算机组成 ...

  2. 计算机组成原理(哈工大)学习笔记

    文章目录 计算机组成原理 一.计算机系统概论 1.1计算机系统简介 一.计算机的软硬件概念 二.计算机系统的层次结构 三.计算机体系结构和计算机组成 1.2计算机的基本组成 1.3计算机硬件的主要技术 ...

  3. 《计算机组成原理》学习笔记

    目录 第一章 计算机系统概论 1.计算机的软硬件概念及系统的层次结构 2.计算机的基本组成 3.计算机体系结构与组成 4.冯·诺伊曼机基本组成.特点 5.计算机基本概念:CPU(由哪几部分构成)机器字 ...

  4. 《王道计算机组成原理》学习笔记总目录+思维导图

    本篇文章是对<2021王道组成原理>知识点的笔记总结归档,虽说是2021年的,但是这些都是最核心的底层基础知识,过多少年都不会有很大的变化,核心都差不多. 我的武功秘籍:note.bith ...

  5. 【考研计算机组成原理】课堂笔记目录汇总——知识点清晰

    文章目录: 一:基础笔记 二:强化笔记 三:冲刺笔记 一:基础笔记 [考研计算机组成原理]课堂笔记1 第一章 计算机系统概论Introduction to computer systems [考研计算 ...

  6. 计算机原理考研题库,2022考研853计算机专业基础综合《计算机组成原理》复习笔记及考研真题题库.pdf...

    2022考研 853计算机专业基础综合 <计算机组成原理>复习笔记及考 研真题题库 计算机系统概论 一.计算机的分类 1电子模拟计算机 模拟计算机的特点是数值由连续量来表示,运算过程也是连 ...

  7. 计算机二级Python学习笔记(七)

    上一篇:计算机二级Python学习笔记(六) 第7章 文件和数据格式化 7.1 文件的使用 文件:数据的集合和抽象,存储在辅助存储器上的一组数据序列,可以包含任何数据内容. 文件类型:文本文件(由单一 ...

  8. 853计算机科学基础综合,2022考研853计算机专业基础综合《计算机组成原理》复习笔记及考研真题题库...

    2022考研853计算机专业基础综合<计算机组成原理>复习笔记及考研真题题库 计算机系统概论 一.计算机的分类 1电子模拟计算机 模拟计算机的特点是数值由连续量来表示,运算过程也是连续的. ...

  9. Ethernet/IP 学习笔记六

    Ethernet/IP 学习笔记六 EtherNet/IP defines two primary types of communications: explicit and implicit (Ta ...

  10. 吴恩达《机器学习》学习笔记六——过拟合与正则化

    吴恩达<机器学习>学习笔记六--过拟合与正则化 一. 过拟合问题 1.线性回归过拟合问题 2.逻辑回归过拟合问题 3.过拟合的解决 二. 正则化后的代价函数 1.正则化思想 2.实际使用的 ...

最新文章

  1. oracle12之 多租户容器数据库架构
  2. cf559C. Gerald and Giant Chess(容斥原理)
  3. jacoco + junit + mock 单测没有统计覆盖率问题
  4. mysql 无法创建用户_无法在MySQL 5.6中创建用户
  5. juniper srx电话单通
  6. 十、Shell脚本编程
  7. c++11 多线程依次打印ABC
  8. 在线教育开源 java_新款SpringBoot在线教育平台开源了
  9. 论文阅读_ICD编码_MSMN
  10. android开发---9.MediaPlayer实现音乐播放的demo
  11. 使用超临界二氧化碳的晶圆清洗技术
  12. 国内宠物保险“不受宠”背后,这门生意该如何做好?
  13. Groovy语言的介绍
  14. vue 精简教程(四) vuerouter 路由
  15. ORA-20000故障排除手记
  16. RTSP/RTMP/GB28181协议/海康SDK/Ehome协议接入TSINGSEE青犀视频平台磁盘空间计算介绍
  17. Django开发日记(前后端不分离,使用Templates模板)
  18. 数据结构笔记——自用
  19. qcc514x-qcc304x调试笔记-蓝牙状态相关api
  20. 微信支付的系统架构到底有多厉害?

热门文章

  1. 伪造邮件***,社工钓鱼,你中招了吗【一】
  2. sha1 java 代码_HMAC-SHA1的java源代码实现
  3. Linux vip地址通信原理,IPv6的组播地址(掌握IPv6通信原理的关键知识点)
  4. java 线程池的原理与实现_Java线程池原理及实现
  5. centos下mysql备份数据库命令_[CentOS]下mysql数据库常用命令总结
  6. Matplotlib_库的安装
  7. OpenCV-图像处理(29、凸包-Convex Hull)
  8. php代码审计_代码审计|PHP反序列化初识
  9. 微型计算机普遍采用的数字编码是,计算机原理复习题1
  10. swagger 上传文件 参数_跟我一起学.NetCore之Swagger让前后端不再烦恼及界面自定义...