计算机组成原理知识点总结——第四章指令系统

一、指令格式

指令的定义:

  • 又称机器指令,是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机所有的指令的集合构成该机的指令系统,也称为指令集:一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。

指令格式
一条指令就是机器语言的一个语句,他是一组有意义的二进制代码。
一条指令通常要包括操作码字段和地址码字段两部分
在这里插入图片描述
一条指令可能包含0个、1个、2个、3个、4个地址码

(一)按地址码分类

1、零地址指令

  1. 不需要操作数,如空操作、停机、关中断等指令
  2. 堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶

2、一地址指令

  1. 只需要单操作数,如加1、减1、取反、求补等
    指令含义:OP(A1)——>A1
    完成一条指令需要3次访存:取指——>读A1——>写A1
  2. 需要两个操作数,但其中一个操作数隐含在某个寄存器(如隐含在ACC)
    指令含义:(ACC)OP(A1)——>ACC
    完成一条指令需要2次访存:取指——>读A1

注:A1指某个主存地址,(A1)表示A1所指向的地址中的内容

3、二地址指令
在这里插入图片描述
常用于需要两个操作数的算术运算、逻辑运算相关指令
指令含义:(A1)OP(A2)——>A1
完成一条指令需要访存4次,取指——>读A1——>读A2——>写A1

4、三地址指令
在这里插入图片描述
常用于需要两个操作数的算术运算、逻辑运算相关指令
指令含义:(A1)OP(A2)——>A3
完成一条指令需要访存4次,取指——>读A1——>读A2——>写A3

5、四地址指令
在这里插入图片描述
指令含义:(A1)OP(A2)——>A3,A4=下一条将要执行的指令地址
完成一条指令需要访存4次,取指——>读A1——>读A2——>写A3

正常情况下:取指令之后PC+1,指向下一条指令
四地址指令:执行指令后,将PC的值修改为A4所指地址

⭐地址码位数的影响⭐
n位地址码的直接寻址范围=2n,若指令长度固定不变,则地址码数量越多,寻址能力越差。

(二)指令-按指令长度分类

⭐指令字长:一条指令的总长度(可能会变)⭐
在这里插入图片描述

(三)指令-按操作码长度分类

定长操作码:指令系统中所有指令的操作码长度都相同(n位——>2n条指令
特点:控制器的译码电路设计简单,但灵活性较低

可变长操作码:指令系统中各指令的操作码长度可变。
特点:控制器的译码电路设计复杂,但灵活性高。

(四)指令-按操作类型分类

数据传送类、运算类、程序控制类、输入输出类(I/O)

(五)小节脑图

在这里插入图片描述

(六)扩展操作码指令格式

定长指令字结构+可变长操作码——>扩展操作码指令格式,即不同地址数的指令使用不同长度的操作码

在设计扩展操作码指令格式时,必须注意以下两点:

  1. 不允许⭐短码是长码的前缀⭐,即短操作码不能与长操作码的前面部分代码相同
  2. 各指令的操作码一定不能重复

通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析时间
在这里插入图片描述

二、指令的寻址方式

(一)指令寻址

下一条欲执行指令的地址**(程序计数器PC始终指向下一条指令地址)**

顺序寻址:(PC)+“1”——>PC,这里的1理解为1各指令字长,实际加的值会因指令长度、编址方式而不同。

跳跃寻址:由转移指令指出

小节脑图
在这里插入图片描述
注:每一条指令的执行都分为“取指令”、“执行指令”两个阶段。

(二)数据寻址

⭐⭐确定本条指令的地址码指明的真实地址⭐⭐

当程序在主存中的存储的位置不是从0号主存块开始的时候,移位操作的形式会不同,所以需要数据寻址指明真实的地址。

⭐常见的数据寻址方式⭐

假设指令字长=机器字长=存储字长,假设操作数为3
1、直接寻址
指令中的形式地址A就是操作数的真实地址EA,即EA=A
在这里插入图片描述
2、间接寻址
指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即EA=(A)
在这里插入图片描述
优点

  • 可扩大寻址范围(有效地址EA 的位数大于形式地址A的位数)。
  • 便于编制程序(用间接寻址可以方便地完成子程序返回)

缺点

  • 指令在执行阶段要多次访存(一次间接寻址需要两次访存,多次寻址需根据存储字的最高位确定几次访存)。效率变低。

3、寄存器寻址
在指令字中直接给出操作数所在的寄存器编号,即EA=Ri,其操作数在由Ri所指的寄存器内。
在这里插入图片描述
优点

  • 指令在执行阶段不访问主存,只访问寄存器
  • 指令字短且执行速度快,支持向量/矩阵运算

缺点

  • 寄存器价格昂贵,计算机中寄存器个数有限。

4、寄存器间接寻址
寄存器Ri中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(Ri)
在这里插入图片描述
特点

  • 与一般间接寻址相比速度更快,但指令的执行阶段需要访问主存(因为操作数在主存中)

5、隐含寻址
不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址
在这里插入图片描述
优点

  • 有利于缩短指令字长

缺点

  • 需增加存储操作数或隐含地址的硬件

6、立即寻址
形式地址A就是操作数本身,又称为立即数,一般采用补码形式。指令后有一个#号表示立即寻址特征
在这里插入图片描述
在这里插入图片描述

小节回顾

在这里插入图片描述

⭐偏移寻址⭐

1、基址寻址
将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA=(BR)+AA即偏移量,BR中的地址为程序在主存中开始的位置
在这里插入图片描述
优点

  • 便于程序“浮动”,方便实现多道程序并发运行
  • 可以扩大寻址范围(基址寄存器的位数大于形式地址A的位数);

  • 基址寄存器是面向操作系统的,⭐其内容由操作系统或管理程序确定,程序员不能够修改⭐。在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)
  • 当采用通用寄存器作为基址寄存器时,⭐可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统决定⭐

2、变址寻址
有效地址EA等于指令字中的形式地址A与变址寄存器IX的内容相加之和,即EA=(IX)+A,其中IX 可为变址寄存器(专用),也可用通用寄存器作为变址寄存器
在这里插入图片描述


变址寄存器是⭐面向用户⭐的,在程序执行过程中,变址寄存器的内容可由用户改变(IX作为偏移量)形式地址A不变(作为基地址)
变址寻址的作用(解决循环问题)
在这里插入图片描述
优点:在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器IX的内容,边可很容易形成数组中任一数据的地址,特别适合编制循环程序

3、基址&变址复合寻址
先基址后变址寻址:EA=(IX)+((BR)+A)
在这里插入图片描述
这里是因为程序在主存中的地址不是从0开始的,那么就需要用到基址寄存器,存储程序开始的地址,然后通过变址寄存器实现循环。

4、相对寻址
程序计数器PC的内容加上指令格式中的形式地址A而形成操作数的有效地址,即EA=(PC)+A,其中A是相对于PC所指地址位移量,可正可负,补码表示
在这里插入图片描述
针对for循环在程序中的位置改变等操作。
⭐取出当前指令后,PC会指向下一条指令,相对寻址是相对于下一条指令的偏移。⭐
优点

  • 操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是相差一个固定值,因此⭐便于程序浮动⭐(这里的浮动指一段代码在程序内部的浮动)。相对寻址广泛应用于转移指令

小节回顾
在这里插入图片描述

堆栈寻址

操作数存放在堆栈中,⭐隐含使用堆栈指针(SP寄存器)⭐作为操作数地址——不需要显式给出操作数的地址,隐含在SP寄存器中

堆栈式存储器(或专用寄存器组)中一块特定的按“先进后出(LIFO)”原则管理的存储区,该存储区中被读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)
在这里插入图片描述

⭐硬堆栈——使用寄存器(速度快,成本高)⭐
⭐软堆栈——使用主存(成本低)⭐
在这里插入图片描述

小节回顾
在这里插入图片描述

三、机器级代码

在这里插入图片描述

(一)X86汇编语言

如何指明内存的读写长度
dword ptr——双字,32bit
word ptr ——单字,16bit
byte ptr ——字节,8bit

在这里插入图片描述

在这里插入图片描述

⭐⭐通用寄存器⭐⭐

  • EAX、EBX、ECX、EDX(E=Extended=32bit,E去掉就是16bit)

变址寄存器

  • ESI、EDI

堆栈基址针

  • EBP

堆栈顶指针

  • ESP

在这里插入图片描述
在这里插入图片描述

⭐常用的X86指令⭐

⭐目的操作数不可以是常量⭐
⭐X86不允许两个操作数都来自于主存。⭐
1、算数运算指令
在这里插入图片描述
2、常见的逻辑运算指令
在这里插入图片描述
3、其他指令
在这里插入图片描述

(二)AT&T格式 vs Intel格式

1、 AT&T格式
Unix、Linux的常用格式

2、 intel格式(往年408都是此格式,重点)
Windows常用格式

在这里插入图片描述

(三)选择语句的机器级表示

指令一般都是顺序执行,但是选择语句会改变指令执行顺序。
1、无条件转移地址
⭐类似于C语言的goto语句⭐
在这里插入图片描述

jmp <地址>			#PC无条件转移至<地址>

jmp 128				#<地址>可以用常数给出
jmp eax				#<地址>可以来自于寄存器
jmp [999]				#<地址>可以来自于主存
jmp NEXT			#<地址>可以用“标号”锚定

2、条件转移指令

cmp a,b				#比较a和b两个数

在这里插入图片描述
写汇编语言代码时,一般会以函数名作为“标号”,标注该函数指令的起始地址。

CMP的底层原理
本质上是进行a-b减法运算,生成标志位OF、ZF、CF、SF
在这里插入图片描述

(四)循环语句的机器级表示

1、用条件转移指令实现循环
用c语言理解程序,结合汇编语言
在这里插入图片描述
2、用loop指令实现循环
使用loop只能够可能会使代码更清晰简洁
在这里插入图片描述

四、CISC和RISC

CISC

  • 设计思路:一条指令完成一个复杂的基本功能。
  • 代表:x86架构,主要用于笔记本、台式机等

RISC

  • 设计思路:一条指令完成一个基本“动作”;多条指令组合完成一个复杂度基本功能。
  • 代表:ARM架构,主要用于手机、平板等

⭐80-20规律⭐:典型程序中80%的语句仅仅使用处理机种20%的指令。

对比
在这里插入图片描述
可以使用c语言去区别,CISC就好比给了C语言的基本语法,然后还给了很多的函数库,在使用过程中,很多复杂的功能可以通过调用函数库实现,但是函数库中的函数如果实现的不好,效率低,是没办法更改的。RISC相当于就像只给了C语言的基本语法,可以使用循环选择等语句实现复杂度函数库中的功能,效率高。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祖安大龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值