计算机组成原理 第六章(指令系统)—第一节(机器指令)

本文围绕计算机组成原理,详细阐述了机器语言、指令系统、操作码与地址码的构成,以及不同类型指令的格式,包括定长和不定长操作码的区别,以及不同地址数指令的优化策略。同时讨论了指令字长的决定因素和变化趋势。
摘要由CSDN通过智能技术生成

 写在前面:

  1. 本系列笔记主要以《计算机组成原理(唐朔飞)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
  2. 视频链接:计算机组成原理(哈工大刘宏伟)135讲(全)高清_哔哩哔哩_bilibili

一、概述

        计算机能解题是由于机器本身存在一种语言——机器语言,它既能理解人的意图,又能被机器自身识别。机器语言是由一条条语句构成的,每一条语句又能准确表达某种语义,例如,它可以命令机器做某种操作,指出参与操作的数或其它信息在什么地方等。计算机就是连续执行每一条机器语句而实现全自动工作的。

        人们习惯把每一条机器语言的语句称为机器指令(计算机运行的最小功能单位),而又将全部机器指令的集合称为机器的指令系统(或指令集),因此机器的指令系统集中反映了机器的功能。一台计算机只能执行自己指令系统中的指令,不能执行其它系统的指令。

        计算机设计者主要研究如何确定机器的指令系统,如何用硬件电路、芯片、设备来实现机器指令系统的功能。计算机的使用者则是依据机器提供的指令系统,使用汇编语言来编制各种程序。计算机使用者根据机器指令系统所描述的机器功能,能很清楚地了解计算机内部寄存器存储器的结构,以及计算机能直接支持的各种数据类型。

二、指令的一般格式

1、指令的组成

        指令是由操作码和地址码两部分组成的,其基本格式如下图所示。

2、操作码

(1)操作码用来指明该指令所要完成的操作,如加法、减法传送、移位、转移等。

(2)操作码的位数通常反映了机器的操作种类,也即机器允许的指令条数,如操作码占7位,则该机器最多包含2^{7}=128条指令。

(3)操作码的长度可以是固定的,也可以是变化的

定长操作码:操作码集中放在指令字的一个字段内,如上图所示,这种格式便于硬件设计,指令译码时间短,广泛用于字长较长的、大中型计算机和超级小型计算机以及RISC,但是当指令的数量增加时,使用定长操作码会占用更多的固定位,留给表示操作数地址的位数受限。

不定长操作码:操作码分散在指令字的不同字段中,这种格式可有效地压缩操作码的平均长度,在字长较短的微型计算机中被广泛采用,不过操作码长度不固定会增加指令译码和分析的难度,使控制器的设计复杂。

(4)对于不定长操作码,通常采用扩展操作码技术,使操作码的长度随地址数的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下有效地缩短指令字长。下图所示的是一种扩展码的安排示意图,当然,扩展方法并不止一种。

 ①上图中指令字长为16位,其中4位为基本操作码字段OP,另有3个4位长的地址字段为A_{1}A_{2}A_{3}4位基本操作码若全部用于三地址指令,则有16条若采用扩展操作码技术,当操作码取4位时三地址指令最多为15条,操作码取8位时二地址指令最多为15条,操作码取12位时一地址指令最多为15条,操作码取16位时零地址指令为16条,共61条可见操作码的位数随地址数的减少而增加

每减少一种三地址指令操作码最多可构成2^{4}种二地址指令,每减少一种二地址指令操作码最多可构成2^{4}种一地址指令,以此类推

③通常对使用频率较高的指令分配较短的操作码,对使用频率较低的指令分配较长的操作码,从而尽可能地减少指令译码和分析的时间。

短操作码不能是长操作码的前缀,各指令的操作码不可重复

3、地址码

(1)地址码用来指出该指令的源操作数的地址(一个或两个)结果的地址以及下一条指令的地址,这里的“地址”可以是主存的地址,也可以是寄存器的地址,甚至可以是I/O设备的地址。

(2)设指令字长为32位,操作码固定为8位,以此分析指令的地址码字段。

①四地址指令:

[1]地址字段有4个,其格式如下图所示,其中OP为操作码,A_{1}为第一操作数地址,A_{2}为第二操作数地址,A_{3}为结果地址,A_{4}为下一条指令的地址,该指令完成(A_{1})OP(A_{2})\rightarrow (A_{3})的操作

[2]指令字长为32位,操作码占8位,那么4个地址字段各占6位,则指令操作数的直接寻址范围为2^{6}=64

[3]如果地址字段均指示主存的地址,则完成一条四地址指令共需访问4次存储器(取指令一次,取两个操作数两次,存放结果一次)。

②三地址指令:

[1]地址字段有3个,其格式如下图所示,其中OP为操作码,A_{1}为第一操作数地址,A_{2}为第二操作数地址,A_{3}为结果地址,该指令完成(A_{1})OP(A_{2})\rightarrow (A_{3})的操作,后续指令的地址隐含在程序计数器PC之中

[2]指令字长为32位,操作码占8位,那么3个地址字段各占8位,则指令操作数的直接寻址范围为2^{8}=256

[3]如果地址字段均指示主存的地址,则完成一条三地址指令共需访问4次存储器(取指令一次,取两个操作数两次,存放结果一次)。

③二地址指令:

[1]地址字段有2个,其格式如下图所示,其中OP为操作码A_{1}字段既代表源操作数的地址,又代表存放本次运算结果的地址,完成(A_{1})OP(A_{2})\rightarrow (A_{1})的操作;有的机器也可以表示(A_{1})OP(A_{2})\rightarrow (A_{2})的操作,此时A_{2}除了代表源操作数的地址外,还代表中间结果的存放地址后续指令的地址隐含在程序计数器PC之中

[2]指令字长为32位,操作码占8位,那么2个地址字段各占12位,则指令操作数的直接寻址范围为2^{12}=4K

[3]如果地址字段均指示主存的地址,则完成一条三地址指令共需访问4次存储器(取指令一次,取两个操作数两次,存放结果一次)。但是如果使其完成(A_{1})OP(A_{2})\rightarrow ACC,此时它完成一条指令只需3次访存,它的含义是中间结果暂存于累加器ACC中。

④一地址指令:

[1]地址字段有1个,其格式如下图所示,其中OP为操作码,完成(ACC)OP(A_{1})\rightarrow (ACC)的操作,ACC既存放参与运算的操作数,又存放运算的中间结果,这样,完成一条一地址指令只需两次访存后续指令的地址隐含在程序计数器PC之中

[2]指令字长为32位,操作码占8位,那么1个地址字段各占24位,则指令操作数的直接寻址范围为2^{24}=16M

⑤零地址指令:

        零地址指令在指令字中无地址码,例如空操作(NOP)、停机(HLT)这类指令只有操作码,而子程序返回(RET)、中断返回(IRET)这类指令没有地址码,其操作数的地址隐含在堆栈指针SP中。后续指令的地址隐含在程序计数器PC之中

三、指令字长

        指令字长取决于操作码的长度、操作数地址的长度和操作数地址的个数。不同机器的指令字长是不相同的。

        早期的计算机指令字长、机器字长和存储字长均相等,因此访问某个存储单元便可取出一条完整的指令或一个完整的数据,这种机器的指令字长是固定的,控制方式比较简单。随着计算机的发展,存储容量的增大,要求处理的数据类型增多,计算机的指令字长也发生了很大的变化,一台机器的指令系统可以采用位数不相同的指令,即指令字长是可变的,如单字长指令(指令字长等于机器字长)、多字长指令,控制这类指令的电路比较复杂,而且多字长指令要多次访问存储器才能取出一条完整的指令,因此使CPU速度下降。

        为了提高指令的运行速度和节省存储空间,通常尽可能把常用的指令(如数据传送指令、算逻运算指令等)设计成单字长或短字长格式的指令。

机器字长:CPU一次能处理的二进制数据的位数,一般等于内部寄存器的位数。

指令字长:一个指令字中包含二进制代码的位数。

存储字长:一个存储单元存储二进制代码的位数。

  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Zevalin爱灰灰

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

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

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

打赏作者

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

抵扣说明:

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

余额充值