4.1指令格式
-指令的定义
指令(机器指令)是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。一台计算机的所有指令的集合构成该机的指令系统,也称指令集。
•指令系统是计算机的主要属性,位于硬件和软件的交界面上。
• 一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。
二、指令的基本格式
一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。
一条指令通常要包括操作码字段和地址码字段两部分:
三、指令的分类
按地址码数目分类:
•零地址指令:只给出操作码OP,没有显式地址。
OP EHC
a. 不需要操作数的指令,如空操作、停机、关中断等指令。
b. 零地址的运算类指令仅用在堆栈计算机中,参与运算的两个操作数隐含地聪栈顶和次栈顶弹出,送到运算器进行运算,运算结果再隐含地压入堆
栈,
—地址指令:
a. 只需要单操作数,按A1地址读取操作数,进行OP操作后,结果存回原地址。
指令含义:OP(A1)—>A1,完成一条指令需3次访存:取指一>读八1—>写八1。
如加1、减1、取反、求补等。
b. 需要两个操作数,但其中一个操作数隐含在某个寄存器(如ACC),运算结果也将存放在ACC中。
指令含义:(ACC)OP(A1)—>ACC,完成4指令需2次访存:取指一>读八1。
注:A1指某个主存地址,(A1)表示A1所指向的地址中的内容。
•二地址指令:常用于需要两个操作数的算术运算、逻辑运算指令。
OP Ai (目的操作数) A、(源操作数)Eric
指令含义:(A1)OP(A2)—>A1,完成一条指令需要访存4次,取指一>读八1—>读八2—>写八1。
•三地址指令:常用于需要两个操作数的算术运算、逻辑运算相关指令。
指令含义:(A1)OP(A2)_>A3,完成一条指令需要访存4次,取指自读A1—>读八2 — >写八3。
•四地址指令:
指令含义:(A1)OP(A2)—>A3, A4=下一条将要执行指令的地址。
完成一条指令需要访存4次,取指一〉读A1—>读八2—〉写A3。
。正常情况下:取指令之后PC+1,指向下一条指令。
。四地址指令:执行指令后,将PC的值修改为A4所指地址。
直接寻址范围:
n位地址码的直接寻址范围=2n,若指令总长度固定不变,则地址码数量越多,寻址能力越差。
按指令长度分类:
•定长指令字结构:指令系统中所有指令的长度都相等,执行速度快,控制简单。
•变长指令字结构:指令系统中各种指令的长度不等,随指令功能而异。
相关概念:
•指令字长:指一条指令中所包含的二进制代码的位数,取决于操作码的长度、操作数地址码的长度和操作数地址的个数。
•机器字长:CPU进行一次整数运算所能处理的二进制数据的位数(通常和A山直接相关)。
.存储字长:一个存储单元中的二进制代码位数(通常和MDR位数相同)。
。因为主存一般是按字节编址的,所以指令字长多为字节的整数倍。
。指令长度与机器字长没有固定的关系,它可以等于机器字长,也可以大于或小于机器字长。
。半字长指令、单字长指令、双字长指令一令长度是机器字长的多少倍。
。指令字长会影响取指令所需时间。如:机器字长=存储字长=16bit,则取一条双字长指令需要两次访存。
按操作码长度分类:
•定长操作码:指令系统中所有指令的操作码长度都相同。
。位操作码字段的指令系统最大能够表示2n条指令。
。优:定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利。
。缺:指令数量増加时会占用更多固定位,留给表示操作数地址的位数受限,灵活性较低。
.可变长操作码:为了在指令字长有限的前提下仍保持比较丰富的指令种类,采取可变长度操作码。全部指令的操作码字段的位数不固定,且分散地放在
指令字的不同位置上。
。最常见的变长操作码方法是扩展操作码,采取定长指令字结构+可变长操作码,使操作码的长度随地址码的减少而増加,不同地址数的指令可以具
有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。
o优:在指令字长有限的前提下仍保持比较丰富的指令种类。
。缺:増加了指令译码和分析的难度,使控制器的设计复杂化。
扩展操作码举例:
指令字长为16位,每个地址码占4位:
前4位为基本操作码字段OP,另有3个4位长的地址字段Ai、A2和A3。
4位基本操作码若全部用于三地址指令,则有16条。
但至少须将1111留作扩展操作码之用,即三地址指令为15条:
1111 1111留作扩展操作码之用,二地址指令为15条;
1111 11111111留作扩展操作码之用,一地址指令为15条;
零地址指令为16条。
还有其他扩展操作码设计方法。
在设计扩展操作码指令格式时,必须注意以下两点:
1. 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
2. 各指令的操作码一定不能重复。
通常情况下,对使用频率较高的指令,分配较短的操作码;对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。
设指令字长固定为16位,试设计一套指令系统满足:
a) 有15条三地址指令
共24=16种状态
留出16-15=1种
b) 有12条二地址指令
共 1 X24=16 种
留出16-12=4种
c) 有62条一地址指令
共4 x24=64种
⑺岀64-62=2种
d) 有32条零地址指令
共 2x24=32 种
设地址长度为n,上一层留出m种状态,下一层可扩展出mx2n种状态
按操作类型分类:
数据传送类:进行主存与CPU之间的数据传送
1. 数据传送
• MOV:寄存器之间传送。
• LOAD:从内存单元读取数据到CPU寄存器。
• STORE:从CPU寄存器写数据到内存单元。
运算类
2. 算术和逻辑操运算
•算术:加(ADD)、减(SUB)、乘(MUL)、除(DIV)、加 1(INC)、减 1 (DEC)等。
•逻辑:与(AND)、或(OR)、取反(NOT)、异或(XOR)等。
3. 移位操作
•算术移位、逻辑移位、循环移位(带进位和不带进位)。
程序控制类:改变程序执行的顺序
4. 转移操作
•无条件转移(JMP)、条件转移(BRANCH)、调用(CALL)、返回(RETURN)、陷阱(Trap)等。
建D调用指令和转移指令的区别:执行调用指令时必须保存下一条指令的地址(返回地址),当子程序执行结束时,根据返回地址返回到主程序继续执
行;而转移指令则不返回执行。
输入输出类(I/O):进行CPU和I/O设备之间的数据传送
5. 输入输出操作
• CPU寄存器与IO端口之间的数据传送(端口即IO接口中的寄存器)。
4.2指令的寻址方式
寻址方式是指寻找指令或操作数有效地址的方式,即确定本条指令的数据地址及下一条待执行指令的地址的方法。寻址方式分为指令寻址和数据寻址两大
类。寻找下一条将要执行的指令地址称为指令寻址;寻找操作数的地址称为数据寻址。
一、 指令寻址
顺序寻址
.通过程序计数器(pc)加1 (1个指令字长),自动形成下一条指令的地址。
。此处的”r要理解为1个指令字长。
°每次取指令结束后,一定会PC+ “1”。
跳跃寻址
.跳跃寻址通过转移类指令实现。所谓跳跃,是指下条指令的地址码不由程序计数器给出,而由本条指令给出下条指令地址的计算方式。
10是否跳跃可能收到状态寄存器和操作数的控制,而跳跃到的地址分为绝对地址(由标记符直接得到)和相对地址(相对于当前指令地址的偏移
量),跳跃的结果是当前指令修改PC值,所以下1指令仍然通过程序计数器(PC)给出。
二、 数据寻址
数据寻址是指如何确定本条指令的地址码指明的真实地址。
隐含寻址
不明显地给出操作数的地址, 而是在指令中隐含着操作数的地址。
优点:有利于缩短指令字长。
缺点:需増加存储操作数或隐含地址的硬件。
立即寻址
这种类型的指令的地址字段指出的不是操作数的地址,而是操作数本身,又称立即数。数据采用补码形式存放,#表示立即寻址特征。
立即寻址特征
| OP j # 一 A
立即数
优点:指令执行阶段不访问主存,指令执行时间最短。
缺点:A的位数限制了立即数的范围。(如A的位数为n,且立即数采用补码时,可表示的数据范围为-2n-1~2n_1-1)
直接寻址
指令字中的形式地址A就是操作数的真实地址EA,即EA=A o
优点:简单,指令执行阶段仅访问一次主存,不需专门计算操作数的地址。
缺点:A的位数决定了该指令操作数的寻址范围,操作数的地址不易修改。
间接寻址
指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即EA=(A) o
间接寻址可以是一次间接寻址,还可以是多次间接寻址。
图中,主存字第一位为1时,表示取出的仍不是操作数的地址,即多次间址;主存字第一位为0时,表示取得的是操作数的地址。
优点:可扩大寻址范围(有效地址EA的位数大于形式地址A的位数)。便于编制程序(用间接寻址可以方便地完成子程序返回)。
缺点:指令在执行阶段要多次访存(一次间址需两次访存,多次寻址需根据存储字的最高位确定几次访存),访问速度过慢,并不常用。
寄存器寻址
在指令字中直接给出操作数所在的寄存器编号,即EA =RjZ其操作数在由Rj所指的寄存器内。
优点:指令在执行阶段不访问主存,只访问寄存器,因寄存器数量较少,对应地址码长度较小,使得指令字短且因不用访存,所以执行速度快,支持向量/
矩阵运算。
缺点:寄存器价格昂贵,计算机中寄存器个数有限。
寄存器间接寻址
寄存器&中给出的不是一个操作数,而是操作数所在主存单元的地址,即EA=(R.)。
寻址特征
特点:与一般间接寻址相比速度更快,但指令的执行阶段需要访问主存(因为操作数在主存中)。