扫码订阅《 》或入驻星球,即可阅读文章!

GOLANG ROADMAP

阅读模式

  • 沉浸
  • 自动
  • 日常
首页
Go学习
  • Go学院

    • Go小课
    • Go视界
    • Go小考
    • Go实战
  • Go资源

    • 优质课程
    • 在线宝典
    • 资源下载
    • 帮找资源
训练营 🔥
  • Go体系课&实战训练营
  • 升值加薪陪跑训练营
Go求职
  • 求职刷题

    • 企业题库
    • 面试宝典
    • 求职面经
  • 求职服务

    • 内推互助
    • 求职助力
    • 内推公司
Go友会
  • 城市
  • 校园
推广返佣
  • 返佣排行
  • 返佣规则
  • 推广学院
实验区
  • Go周边
  • Go宝典

    • 推荐图书
    • 精品博文
  • Go开源

    • Go仓库
    • Go月刊
更多
  • 用户中心

    • 我的信息
    • 我的返佣
    • 我的消息
  • 玩转星球

    • 星球介绍
    • 星主权益
    • 吐槽专区
    • 成长记录
  • 合作交流

    • 商务合作
    • 讲师招募
    • 生态伙伴
author-avatar

GOLANG ROADMAP


首页
Go学习
  • Go学院

    • Go小课
    • Go视界
    • Go小考
    • Go实战
  • Go资源

    • 优质课程
    • 在线宝典
    • 资源下载
    • 帮找资源
训练营 🔥
  • Go体系课&实战训练营
  • 升值加薪陪跑训练营
Go求职
  • 求职刷题

    • 企业题库
    • 面试宝典
    • 求职面经
  • 求职服务

    • 内推互助
    • 求职助力
    • 内推公司
Go友会
  • 城市
  • 校园
推广返佣
  • 返佣排行
  • 返佣规则
  • 推广学院
实验区
  • Go周边
  • Go宝典

    • 推荐图书
    • 精品博文
  • Go开源

    • Go仓库
    • Go月刊
更多
  • 用户中心

    • 我的信息
    • 我的返佣
    • 我的消息
  • 玩转星球

    • 星球介绍
    • 星主权益
    • 吐槽专区
    • 成长记录
  • 合作交流

    • 商务合作
    • 讲师招募
    • 生态伙伴
  • 计算机基础系列

    • 《计算机组成原理》
  • 第一章 概论

    • 1.0 章节概要
    • 1.1 电子计算机与存储程序控制
    • 1.2 计算机的硬件组成
    • 1.3 计算机系统
    • 1.4 计算机的工作过程
  • 第二章 数据的机器层次表示

    • 2.0 章节概要
    • 2.1 数值数据的表示
    • 2.2 机器数的定点表示与浮点表示
    • 2.3 非数值数据的表示
    • 2.4 十进制数和数串的表示
    • 2.5 数据校验码
  • 第三章 指令系统

    • 3.0 章节概要
    • 3.1 指令格式
    • 3.2 寻址技术
    • 3.3 堆栈与堆栈操作
    • 3.4 指令类型
    • 3.5 指令系统的发展
  • 第四章 数值的机器运算

    • 4.0 章节概要
    • 4.1 基本算数运算的实现
    • 4.2 定点加减运算
    • 4.3 带符号数的移位和舍入操作
    • 4.4 定点乘法运算
    • 4.5 定点除法运算
    • 4.6 规格化浮点运算
    • 4.7 十进制整数的加法运算
    • 4.8 逻辑运算与实现
    • 4.9 运算器的基本组成与实例
  • 第五章 存储系统和结构

    • 5.0 章节概要
    • 5.1 存储系统的组成
    • 5.2 主存储器的组织
    • 5.3 半导体随机存储器和只读存储器
    • 5.4 主存储器的连接与控制
    • 5.5 多体交叉存储技术
    • 5.6 高速缓冲存储器
  • 第六章 中央处理器

    • 6.0 章节概要
    • 6.1 中央处理器的功能和组成
    • 6.2 控制器的组成和实现方法
    • 6.3 时序系统与控制方式
    • 6.4 微程序控制器
  • 第六章 中央处理器

    • 6.0 章节概要
    • 6.1 中央处理器的功能和组成
    • 6.2 控制器的组成和实现方法
    • 6.3 时序系统与控制方式
    • 6.4 微程序控制器
  • 第八章 外部设备

    • 8.0 章节概要
    • 8.1 外部设备概述
    • 8.2 磁介质存储器的性能和原理
    • 8.3 磁介质存储设备
    • 8.4 磁盘阵列
    • 8.5 光盘存储器
    • 8.6 键盘输入设备
    • 8.7 打印输出设备
    • 8.8 显示设备
  • 第九章 输入输出系统

    • 9.0 章节概要
    • 9.1 主机与外设的连接
    • 9.2 程序查询方式及其接口
    • 9.3 中断系统和程序中断方式
    • 9.4 DMA方式及其接口
    • 9.5 通道控制方式

扫码订阅《 》或入驻星球,即可阅读文章!

3.4 指令类型


GOLANG ROADMAP

# 3.4.1 数据传送类指令

数据传送类指令主要用于实现寄存器与寄存器之间,寄存器与主存单元之间以及两个主存单元之间的数据传送。数据传送类指令又可以细分为:1.一般传送指令 2.堆栈操作指令 3.数据交换指令

1.一般传送指令

  • ⑴主存单元之间的传送

    • MOV mem2,mem1,其含义为 (mem1)→mem2
  • ⑵从主存单元传送到寄存器

    • MOV reg,mem,其含义为 (mem)→reg

    • 在有些计算机中,该指令用助记符LOAD表示,又称为取数指令。

  • ⑶从寄存器传送到主存单元

    • MOV mem,reg,其含义为 (reg)→mem

    • 在有些计算机里,该指令用助记符STORE表示,又称为存数指令。

  • ⑷寄存器之间的传送

    • MOV reg2,reg1,其含义为 (reg1)→reg2

2.堆栈操作指令

  • 堆栈指令是一种特殊的数据传送指令,分为进栈(PUSH)和出栈(POP)两种。
  • 因为堆栈(指软堆栈)是主存的一个特定区域,所以对堆栈的操作也就是对存储器的操作。

3.数据交换指令

  • 前述指令的传送都是单方向的,然而,数据传送也可以是双方向的,即将源操作数不目的操作数(一个字节或一个字)相互交换位置。

# 3.4.2 运算类指令

1.算术运算指令

  • 算术运算指令主要用于进行定点和浮点运算。这类运算包括加、减、乘、除以及加1、减1、比较等,有些机器还有十进制算术运算指令。
  • 绝大多数算术运算指令都会影响到状态标志位,通常的标志位有进位、溢出、全零、正负和奇偶等。

2.逻辑运算指令

  • 一般计算机都具有与、或、非、异或等逻辑运算指令。这类指令在没有设置专门的位操作指令的计算机中常用于对数据字(字节)中某些位(一位或多位)进行操作。

  • (1)按位测(位检查):按位不运算

image-20220908092209858

  • (2)按位清(位清除):按位不运算

image-20220908092243631

  • (3)按位置(位设置):按位或运算

image-20220908092310754

  • (4)按位修改:按位异或运算

    • 利用“异或”指令可以修改目的操作数的某些位,只要源操作数的相应位为“1”,

      其余位为“0”,异或之后就达到了修改这些位的目的(因为A⊕1=A,A⊕0=A)。

image-20220908092422639

  • (5)判符合

    • 若两数相符合,其异或之后的结果必定为“0”。
  • (6)清0(不本身异或)

    • XOR AL,AL

3.移位指令

  • 分为算术移位、逻辑移位和循环移位3类,它们又可分为左移和右移两种。
  • 算术移位的对象是带符号数,算术移位过程中必项保持操作数的符号不变,左移一位,数值 × 2,右移一位,数值 ÷ 2。
  • 逻辑移位的对象是没有数值含义的二进制代码,因此移位时不必考虑符号问题。
  • 循环移位又按进位位是否一起循环分为两类:
    • 小循环(不带进位循环)
    • 大循环(带进位循环)

# 3.4.3 程序控制类指令

程序控制类指令用于控制程序的执行方向,并使程序具有测试、分析与判断的能力。

1.转移指令

  • 在程序执行过程中,通常采用转移指令来改发程序的执行方向。转移指令又分无条件转移和条件转移两种。
  • 无条件转移指令(JMP)不受任何条件的约束,直接把程序转向新的位置执行。

1.条件转移指令必项受到条件的约束,若条件满足时才转向新的位置执行,否则程序仍顸序执行。

  • 无论是条件转移还是无条件转移都需要给出转移地址。若采用相对寻址方式,转移地址为当前指令地址(即PC的值)和指令中给出的位移量之和,即:(PC)+位移量→PC;若采用绝对寻址方式,转移地址由指令的地址码直接给出,即:A→PC。

2.子程序调用指令

  • 子程序是一组可以公用的指令序列,只要知道子程序的入口地址就能调用它。
  • 从主程序转向子程序的指令称为子程序调用指令(CALL);而从子程序转向主程序的指令称为返回指令(RET)。

image-20220908094540226

  • 主程序和子程序是相对的概念,调用其它程序的程序是主程序;被其它程序调用的程序是子程序。
  • 转子指令安排在主程序中需要调用子程序的地方,转子指令是一地址指令。

子程序调用指令和转移指令都可以改发程序的执行顸序,但两者存在着很大的差别:

  • 转移指令转移到指令中给出的转移地址处执行指令,不存在返回要求,没有返回地址问题;而子程序调用指令必项以某种方式保存返回地址,以便返回时能找到原来的位置。
  • 转移指令用于实现同一程序内的转移;而子程序调用指令转去执行一段子程序,实现的是程序与程序之间的转移。

保存返回地址的方法除去堆栈以外还有:

  • ⑴ 用子程序的第一个字单元存放返回地址。
  • ⑵ 用寄存器存放返回地址。

3.返回指令

  • 从子程序转向主程序的指令称为返回指令,其助记符一般为RET,子程序的最后一条指令一定是返回指令。
  • 返回地址存放的位置决定了返回指令的格式,如果返回地址保存在堆栈中,则返回指令是零地址指令,如果返回地址保存在某个主存单元中,则返回指令中必项是一地址指令。

# 3.4.4 输入输出类指令

输入/输出(I/O)类指令用来实现主机不外部设备之间的信息交换,包括输入/输出数据、主机向外设发控制命令或外设向主机报告工作状态等。从广义的角度看,I/O指令可以归入数据传送类。

各种不同的计算机的I/O指令差别很大,通常有两种方式:独立编址方式、统一编址方式

1.独立编址的I/O

  • 所谓独立编址就是把外设端口和主存单元分别独立编址。指令系统中有与门的IN/OUT指令。
  • 以主机为基准,信息由外设传送到主机称为输入,反之称为输出。指令中需要给出外设端口地址。这些端口地址与主存地址无关,是另一个独立的地址空间。

image-20220908095417549

2.统一编址的I/O

  • 所谓统一编址就是把外设寄存器和主存单元统一编址。指令系统中没有专门的I/O指令,就用一般的数据传送类指令来实现I/O操作。

_20220908124533

  • 3.4.1 数据传送类指令
  • 3.4.2 运算类指令
  • 3.4.3 程序控制类指令
  • 3.4.4 输入输出类指令