指令字(简称指令)即表示一条指令的机器字。
指令格式则是指令字用二进制代码表示的结构形式,由操作码字段和地址码字段组成。操作码字段表征指令的操作特性与功能;地址码字段通常指定参与操作的操作数的地址。
操作码字段 | 地址码字段 |
指令系统的每一条指令都有一个操作码,它表示该指令应进行什么性质的操作。不同的指令用操作码字段的不同编码来表示,每一种编码代表一种指令。组成操作码字段的位数一般取决于计算机指令系统的规模。例如,一个指令系统只有8条指令,则有3位操作码就够;如果有32条指令,那么就需要5位操作码。
对于一个机器的指令系统,在指令字中操作码字段和地址字段产读通常是固定的。在单片机中,由于指令字较短,为了充分利用指令字长度,指令字的操作码字段和地址码字段是不固定的,即不同类型的指令有不同的划分,以便尽可能用较短的指令字长来表示越来越多的操作种类,并在越来越多的存储空间中寻址。
地址码
根据一条指令中有几个操作数地址,可将该指令称为几操作数指令或几地址指令。
一般的操作数有被操作数、操作数及操作结果这三种数,因而就形成了三地址指令格式。在此基础上,后来又发展成二地址格式、一地址格式和零地址格式
操作码 | A1 | A2 | A3 |
三地址指令
操作码 | A1 | A2 |
二地址指令
操作码 | A1 |
一地址指令
操作码 |
零地址指令
注意(1)零地址指令的指令字中只有操作码,而没有地址码。
(2)一地址指令常称为单操作数指令。通常这种指令以运算器中累加寄存器AC中的数据为被操作数,指令字的地址码字段所指明的数为操作数,操作结果又放回累加寄存器AC中。
(AC) OP (A) -> AC
OP表示操作性质;(AC)表示累加寄存器AC中的数;(A)表示内存中地址为A的存储单元中的数或运算器中地址为A的通用寄存器中的数; →表示把操作(运算)结果传送到指定的地方。
(3)二地址指令常称为双操作数指令,它的两个地址码字段分别指明参与操作的两个数在内存中或运算器中通用寄存器的地址,A1作存放操作结果的地址。
(A1) OP (A2) -> A1
(4)三地址指令字中有三个操作数地址。
(A1) OP (A2) -> A3
A1为被操作数地址,也称源操作数地址; A2为操作数地址,也称终点操作数地址; A3为存放结果的地址。 同样,A1,A2,A3以是内存中的单元地址,也可以是运算器中通用寄存器的地址。
二地址指令格式中,从操作数的物理位置来说,又可归结为三种类型。
存储器-存储器(SS)型指令:操作时都是涉及内存单元,参与操作的数都放在内存里,从内存某单元中取操作数,操作结果存放至内存另一单元中,因此机器执行这种指令需要多次访问内存。
寄存器-寄存器(RR)型指令:需要多个通用寄存器或个别专用寄存器,从寄存器中取操作数,把操作结果放到另一寄存器。机器执行寄存器-寄存器型指令的速度很快,因为执行这类指令,不需要访问内存。
寄存器-寄存器(RS)型指令:执行此类指令时,既要访问内存单元,又要访问寄存器。
在设计扩展操作码指令格式时,必须注意以下两点:
1、不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
2、各指令的操作码一定不能重复