计组高分笔记:【04】指令系统 「指令格式与分类 | CISC、RISC | 直接寻址 | 间接寻址 | 寄存器寻址 | 隐式寻址 | 立即寻址| 基址寻址 | 变址寻址 | 相对寻址 | 堆栈寻址」

导读:本篇文章讲解 计组高分笔记:【04】指令系统 「指令格式与分类 | CISC、RISC | 直接寻址 | 间接寻址 | 寄存器寻址 | 隐式寻址 | 立即寻址| 基址寻址 | 变址寻址 | 相对寻址 | 堆栈寻址」,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1. 指令格式

1.1 指令的基本概念

一条指令通常操作码地址码组成:(关机操作就只有操作码)
在这里插入图片描述
地址码:指令地址(控制类指令)数据地址(非控制类指令),包含参与程序的转移地址、被调用的子程序的入口地址 、运算的一个或多个地址、运算结果的保存地址 等

注:

  1. 一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。Eg:x86架构、ARM架构 上的软件不能互相在对方上直接运行。
  2. 指令系统是计算机软件与硬件的交界处,os是最靠近硬件的软件。
  3. 指令译码是指对指令的操作码字段译码,而不是整条指令

1.2 指令的分类

1.2.1 按地址码(操作数)长度/数目分类

在这里插入图片描述

注意:算访存次数时,记得加上取指令

1.2.2 按指令的长度分类

在这里插入图片描述

注意:是指令字长 / 机器字长而不是存储字长

1.2.3 按操作码长度分类

在这里插入图片描述

例题:

  1. 若是寄存器,则对寄存器编码,而不是寄存器位数
    在这里插入图片描述

1.2.4 按操作类型分类

在这里插入图片描述

例题:指令类型的判断
在这里插入图片描述
在这里插入图片描述

1.3 扩展操作码指令

1.3.1 扩展操作码的组成

在这里插入图片描述
目的:为了在保持指令长度不变,增加指令数量。(操作码长度随地址码的减少而增加)

1.3.2 扩展操作码的设计

在这里插入图片描述

例题:

  1. 扩展操作码设计:先设计操作码短的
    在这里插入图片描述
  2. 计算剩余指令条数(固定 vs 扩展)
    在这里插入图片描述
    在这里插入图片描述

2. 指令的寻址方式

2.1 指令寻址和数据寻址

注意:地址码分为指令地址数据地址—>指令寻址和数据寻址
在这里插入图片描述

2.1.1 指令寻址(通过PC)

在这里插入图片描述
目的:实现程序控制

指令寻址的分类:

  1. 顺序寻址: 由 PC自动加"1"得到【1指一个指令字长
  2. 跳跃寻址: 执行类似jmp跳跃指令,直接更改PC的值,实现指向下一条指令。
    在这里插入图片描述

2.1.2 数据寻址

在这里插入图片描述
指令的地址码被细分成寻址特征 + 形式地址。其中寻址特征就是用来区分寻址方式的。

采用不同寻址的目的:

  1. 缩短指令字长
  2. 扩大寻址空间
  3. 提高编程的灵活性
    缺点:增加了指令译码难度。
    在这里插入图片描述

2.1.2.1 直接寻址

在这里插入图片描述

2.1.2.2 间接寻址

在这里插入图片描述

注意:形式地址A是主存的地址

2.1.2.3 寄存器寻址

在这里插入图片描述

2.1.2.4 寄存器间接寻址

在这里插入图片描述

例题:
在这里插入图片描述

2.1.2.5 隐式寻址

在这里插入图片描述

注意:隐式寻址,是给出一个操作数的,隐藏另一个的。

2.1.2.6 立即寻址

在这里插入图片描述

2.1.2.7 基于偏移量进行寻址

偏移寻址:将某个寄存器的内容与形式地址相加得到的有效地址。
在这里插入图片描述

2.1.2.7.1 基址寻址

在这里插入图片描述

注意:

  1. 基址寄存器的组成:
    1. 专业寄存器BR
    2. 通用寄存器
      注意:如果采用的是通用寄存器的方式,则还需要在寻址特征与形式地址A之间让出几位用于标记是哪个通用寄存器。若是专用寄存器,则不需要。
  2. 基址寻址用于实现程序在内存中浮动有利于实现多道程序
  3. 基址寄存器是面向os的。其值由os决定,而哪个寄存器作为基址寄存器由用户决定。
  4. 基址寄存器 = 重定位寄存器

例题:
在这里插入图片描述
在这里插入图片描述

2.1.2.7.2 变址寻址

在这里插入图片描述

注意:

  1. 变址寄存器的组成:
    1. 专业寄存器IX
    2. 通用寄存器
      如果采用的是通用寄存器的方式,则还需要在寻址特征与形式地址A之间让出几位用于标记是哪个通用寄存器。若是专用寄存器,则不需要。
  2. 变址寄存器是面向用户的,其值由用户设置
  3. 变址寄存器常用来循环访问数组。

例题:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.2.7.3 相对寻址

在这里插入图片描述

注意:相对寻址用于实现程序段在内存的浮动,也有利于实现多道程序,也有利于实现程序的转移/跳转。【注意是转移不是浮动,程序的浮动是基址寻址的功能】

  • 考点:PC在取指周期末自加,且形式地址是补码表示,记m = 指令字长/存储字长,则 PC = (PC) + m + m*偏移量
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

PC++在取指周期末,条件转移指令跳转是在执行周期内:
在这里插入图片描述

2.1.2.8 堆栈寻址

在这里插入图片描述

注意:

  1. 注意栈顶和栈底方向,以及栈顶指针是指向栈顶元素还是栈顶上的空元素。
    在这里插入图片描述

2.1.3 小结

在这里插入图片描述

注意:

  1. 定长指令时,立即寻址最快;不定长指令时寄存器寻址最快。
    不定长指令的最短,是寄存器寻址,而不是隐藏寻址
    在这里插入图片描述

综合例题:

  1. 汇编中运算的结果默认存放到目的操作数的形式地址所指向的单元中
  2. 汇编中的指令,sub A, BA,B这种都是有效地址,故能够根据指令识别直接还是间接寻址,R是直接,(R)是间接
    在这里插入图片描述
  3. 求相对寻址范围时,注意是对于某条指令【PC固定】,还是对于所有指令【PC为主存范围】
    在这里插入图片描述

2.1.4 条件转移指令

在这里插入图片描述

注意:根据上题可知,条件转移指令的判断条件来自于标志寄存器,实现方式是程序计数器
在这里插入图片描述

2.2 CISC vs RISC

在这里插入图片描述

练习:
在这里插入图片描述

3.2 知识点补充

1. 判断:指令系统是计算机软/硬件的界面。
	正确。指令是系统位于软件和硬件的交界面上,是软件的最低级界面,是硬件的最高级界面(指令驱动硬件运行)。

2. 判断:指令系统和机器语言无关。
	错误。指令系统是计算机硬件的语言系统,而机器语言与硬件息息相关,故指令系统与机器语言相关。

3. CPU执行过程中,指令的地址都是由PC给出。而无论是什么寻址,想改变程序执行的跳转,都是通过修改PC的值实现的。

4. 运算型指令的功能是取操作数,控制型指令的功能是改变程序执行的顺序。
	常见的控制指令:循环指令、转换指令、条件转移指令、无条件转移指令、子程序调用指令、返回指令等
	注意:中断指令是由硬件实现的,并不是指令系统中的指令。

5. 指令系统中采用不同寻址方式的原因是( )
	A. 提供扩展操作码的可能并降低指令译码难度。
	B. 可缩短指令字长、扩大寻址空间、提高编程的灵活性。
	C. 实现程序的控制
	D. 以上都正确。
	选B。A中指令译码难度增加,因为寻址方式变多了。C,实现程序的控制是由靠转移指令而非寻址方式实现的。
	B中采用立即寻址可缩短指令字长,采用寄存器寻址可扩大寻址空间,采用相对寻址可提高编程的灵活性。

6. 简化地址结构的基本方法是尽量采用( )
	A. 寄存器寻址		B. 隐地址		C. 直接寻址		D. 间接寻址。
	选B。只有B才能最大的缩短地址码位数。

8. 判断:
	A. RISC机一定采用流水技术
	B. 采用流水技术的一定是RISC机
	C. RISC机的兼容性优于CISC机
	D. CPU配置很少的通用寄存器
	只有A正确。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/84563.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!