《计算机组成原理》课程笔记(五)——指令的组成与格式 从这节开始,我们进入指令系统的讲解。首先讲解指令的格式。 一、机器指令的格式 1.机器指令的含义和组成: 一条机器指令是一组有意义的二进制代码,是一串高低电平信号,用来指挥计算机运作,表示计算机中的一条命令。 一条指令包含操作码和地址码两部分。操作码表示指令的操作和功能,用来告诉计算机来做什么操作,地址码表示操作数的地址或者操作数本身,用来告诉计算机操作的对象,以及这些对象的地址等信息。
图5-2 机器指令的组成 2.机器指令的长度: 一条机器指令的长度与机器字长没有固定关系。机器指令的长度可以等于机器字长,称为单字长指令;也可以等于半个机器字长,称为半字长指令;还可以等于两个机器字长,称为双字长指令。 几个概念:定长指令字结构:一个指令系统中的所有指令长度均相等,简单但不灵活。变长指令字结构:指令系统中指令的长短各异,灵活但复杂。
图5-3 几种指令在内存中的存储 二、指令的地址码结构 一般的计算机运算指令要包含以下这些内容: 第一个操作数或者其地址
; 第二个操作数或者其地址
; 需要对操作数进行的操作
; 计算结果的存放地址
; 下一条指令的地址
。 例如:我们让计算机执行一个1+2=3的指令。首先需要让计算机取出操作数1(
);然后再取出操作数2(
);之后将两者送到运算器中进行加和(
)运算;运算的结果放入主存的某个单中(
);之后再取出下一条指令(
),这个过程一般可以表示为
。(我们约定,如果
中存储的是操作数的地址,则用
表示其地址,用
表示操作数本身;如果
中存储的是操作数本身,则直接用
表示操作数) 除了操作
外,另外的4个地址信息均需要在地址码中体现。 下面有几种常用的地址码格式: 1.四地址指令: 上文提到的四个地址均有在地址码部分给出,这样的指令称为四地址指令。其指令格式如下图所示:
图5-4 四地址指令 表示为
即对
与
内的数据进行操作后,结果存储到
中,然后执行
中的指令。 四地址指令需要访问4次内存:取指令一次,取第一操作数一次,取第二操作数一次,保存操作数一次。 2.三地址指令: 三地址指令省略了
:下一条指令的地址。由于大多数指令是按主存中的顺序执行的,因此可以采用一个程序计数器(
)来记录指令的地址,每当执行下一条指令时,
的值自加1。这样的话,就可以省略掉第四个地址,得到三地址指令。如下图所示:
图5-5 三地址指令 表示为
(隐含) 即 即对
与
内的数据进行操作后,结果存储到
中,然后
自加,顺序执行下一条指令。 例如,加操作:ADD A B X;(A+B送到X中) 与四地址指令相同,三地址指令也需要访问4次内存。 3.二地址指令: 如果第一个操作数地址与结果存放地址相同,即
与
相同,则可以省略掉
,称为二地址指令。如下图所示:
图5-6 二地址指令 表示为
(隐含) 即对
与
内的数据进行操作后,结果仍然存储到
中,然后
自加,顺序执行下一条指令。 同三地址指令相同,执行二地址指令同样也需要访问4次内存。 4.一地址指令: 如果我们进一步把另外一个操作数省略,那么就可以得到一地址指令。
图5-7 一地址指令 通常来说,一地址指令有如下两种情况: (1)另一个被省略的操作数由内存外的累加寄存器
——一般用来暂存ALU运算的结果。 指令可以表示为
(隐含) 即
中的数据与
中的数据共同送到运算器中做运算,其运算的结果保存在
中。之后
自增,继续顺序执行下一条指令。 这种类型的一地址指令通常只需要访问2次内存:存内存中取指令一次,从内存中取操作数一次,因为不需要把结果存入内存中,所以只需要访问两次。 (2)只是针对
内数据执行加一、减一、求反、求补等单操作数指令。 指令可以表示为
(隐含) 即只对
中的数据进行操作,然后将结果存入
中。之后
自增,继续顺序执行下一条指令。 这种类型的一地址指令需要访问3次内存:从内存中取指令一次,从内存中取操作数一次,将计算后的结果放入内存中一次。 5.零地址指令: 零地址指令只有操作码,没有地址码。
图5-8 零地址指令 零地址指令常用在堆栈的压入和弹出操作上,比如可以用
操作码来表示将数据压入栈中,用
操作码来表示将数据弹出栈。通过这些功能可以实现原有的三操作数命令。比如连续两次pop出的数据可以默认地进入算术逻辑单进行运算,然后运算的结果再次被push入栈中。 不同地址指令的长度、执行速度不一样,适用的场景也不一样。一般来说,访问主存的次数越少,执行速度越快。计算机中有大量的寄存器,访问寄存器要比访问主存速度快很多。因此,操作数蕴含在寄存器中的指令(一地址指令)执行速度会更快。 三、指令的操作码 1.规整型(定长编码): 定长编码操作码的长度和位置是固定的, 操作码位数越多,能够表示的指令条数越多。如果操作码位数为
,则最多能表示
条不同操作的指令。同样,如果想要表示
条不同操作的指令,则最少需要的操作码位数是
。例如,IBM370机的操作码为定长8位,最多可以表示256条指令,但IBM370只有183条指令有效,其他剩余的指令称为非法操作码。 2.非规整型(变长编码): 变长编码操作码的位数和位置不固定,可以使指令更加灵活,同时使得一定位数的操作码能够表示更多的指令。此外,由于当指令长度一定时,操作码和地址码的长度是相互制约的,此时就需要使得操作码能够更加灵活一些。 常用的变长编码方式有扩展操作码法: 假设指令的长度为固定的16位,且每个地址长度为4位。 则对于三地址指令来说,操作码只有4位。这时,我们可以使用0000~1110的15个操作码来表示15条不同操作的三地址指令。余下的1111用来扩展。 对于二地址指令来说,操作码有8位。我们利用前面剩下的1111来继续扩展操作码——使用1111 0000~1111 1110的操作码来表示15条不同操作的二地址指令。剩下的1111 1111同样用来扩展。 对于一地址指令来说,操作码为12位。我们继续利用前面剩下的1111 1111扩展操作码,使用1111 1111 0000~1111 1111 1110表是15条不同操作的一地址指令。剩下的1111 1111 1111同样用来扩展。 同理,对于零地址指令来说,操作码为16位,等于指令长度,我们使用前面剩下的1111 1111 1111来扩展,于是1111 1111 1111 0000~1111 1111 1111 1111可以表示16条不同操作的零地址指令。 如下图所示:
图5-9 扩展指令码 扩展指令码有一些规则:不允许短码是长码的前缀。各条指令的操作码不能重复。
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/18835.html