指令格式
- 指令是计算机运行的最小功能单位;
- 指令集
指令的基本格式
-
一条指令=操作码字段(OP)+地址码(A)
地址码可能有0~4个
-
指令长度:操作码的长度、操作码地址的长度、操作码地址的个数
单字长指令:指令长度=机器字长
半字长指令:指令长度=半个机器字长
双字长指令:指令长度=两个机器字长
零地址指令
- 没有显式地址
- 不需要操作数的指令:空操作指令、停机指令、关中断指令
- 仅用于堆栈计算机中,通常参与运算的两个操作数隐含地从栈顶和次栈顶弹出,放到运算器中运算,结果再隐含地压入堆栈。
一地址指令
①只有目的操作数地单操作数指令,如加1、减1、求反、求补等;
OP(A1)→A1——三次访存;
②指令可隐含约定另一个操作数由ACC(累加器)提供;
(ACC)OP(A1)→ACC——两次访存
二地址指令
-
(A1)OP(A2)→A1
取指→读A1→读A2→写A1
A1:目的操作数;A2:源操作数;
-
四次访存
三地址指令
-
(A1)OP(A2)→A3
取指→读A1→读A2→写A3
-
四次访存
四地址指令
-
(A1)OP(A2)→A3
取指→读A1→读A2→写A3
A4:下一条将要执行指令的地址(指令结束后,将PC的值修改为A4所指地址)
-
四次访存
定长操作码指令格式
控制器的译码电路设计简单,但灵活性较低
扩展操作码指令格式
- 控制器的译码电路设计简单,但灵活性较低;
- 不同地址数的指令使用不同长度的操作码
- 不允许短码是长码的前缀,频率高阿指令操作码短。(哈夫曼编码)
指令的操作类型
- 数据传送
- 算术和逻辑运算
- 移位操作
- 转移操作
- 输入输出操作
指令的寻址方式
寻址方式分为指令寻址(寻找下一条要执行的指令地址)和数据寻址(寻址本条指令的数据地址);
- 指令寻址:顺序寻址(PC加1)和跳跃寻址(本条指令给出下条指令的计算方式)(转移类指令,修改PC值。如无条件转移指令JMP)
- 数据寻址:确定本条指令的地址码指明的真实地址
常见的数据寻址方式
形式地址A,真实地址/有效地址EA
隐含寻址
-
在指令中隐含操作数的地址。
-
简化地址结构的基本方法:尽量采用隐地址
-
优点:有利于缩短指令字长;
缺点:需增加存储操作数或隐含地址的硬件;
-
访存0次
立即(数)寻址
-
地址字段给出的是操作数本身,即立即数,补码表示。
-
优点:指令在执行阶段不访问主存,指令执行时间最短;
缺点:A的位数限制了立即数的范围。
-
访存1次:取1执0;
直接寻址
-
EA=A;
-
优点:简单,在执行期间仅访存一次,不需要专门计算操作数的地址;
缺点:A的位数决定了该指令操作数的寻址范围,操作数的地址不易修改;
-
访存2次:取1执1;
间接寻址
-
EA=(A);
-
形式地址为操作数的有效地址所在的存储单元的地址,即操作数地址的地址;
-
间接寻址可以是一次间接寻址,也可以是多次间接寻址;
-
优点:可扩大寻址范围;
缺点:指令在执行阶段多次访存,速度过慢(不常用)
-
访存3次:取1执2;
寄存器寻址
- EA = Ri
- 操作数在寄存器内
- 优点:只访问寄存器,执行速度快;支持向量/矩阵运算;缩短指令中某个地址段的位数
- 缺点:寄存器价格昂贵,计算机中的寄存器个数有限
- 访存次数:1
寄存器间接寻址
- EA = (Ri)
- 寄存器 Ri 中给出的是操作数所在主存单元的地址
- 优点
- 与一般间接寻址相比速度更快
- 访存次数:2(寄存器间接一次寻址)
- 注
- 若指令系统采用定长指令码格式,则立即寻址方式执行速度最快
- 若指令系统采用变长指令码格式,则寄存器寻址方式执行速度最快
相对寻址
- EA = (PC) +A
- 注意:PC为下条指令的地址(得注意指令字节数)
- 适合转移指令
- 优点
- 有利于多道程序设计
- 操作数的地址不是固定的,随PC值的变化而变化,且与指令地址之间总是相差一个固定值,便于程序浮动。(广泛运用于转移指令)
- 访存次数:1
- 注:指令所提供的相对地址,实质上是一种以下条指令在内存中首地址为基准位置的偏移量
基址寻址
- EA = (BR) +A
- 操作数的有效地址EA = 基址寄存器(BR)的内容 + 指令格式中的形式地址A
- 面向操作系统
- 寄存器存储基址,过程中不变
- 其内容由操作系统或管理程序确定,主要用于解决程序逻辑空间与存储器物理空间的无关性
- (BR)不可变,A 可变
- 优点
- 适合多道程序系统
- 可扩大寻址范围(基址寄存器的位数 > 形式地址A的位数)
- 可用于编制浮动程序。(但偏移量A的位数较短)
- 访存次数:1
变址寻址
- EA = (IX) +A
- 操作数的有效地址EA = 变址寄存器(IX)的内容 + 指令格式中的形式地址A
- 面向用户
- 寄存器存储偏移量,不断变化
- 其内容由用户改变(作为偏移量),形式地址A不变(作为基地址)
- (IX)可变,A 不可变
- 优点
- 可扩大寻址范围(变址寄存器的位数 > 形式地址A的位数)
- 适合编制循环程序
- 注:按下标顺序访问一维数组元素,便于处理数组问题
堆栈寻址
- EA = SP
- return时,把SP内容赋给PC
- push(ESP-4) 和 pop(ESP+4)指令
- 硬堆栈
- 寄存器堆栈
- 访存次数为1
- 成本高,不适合做大容量的堆栈
- 软堆栈
- 从主存中划出的一段区域
- 双目运算
- 访存次数为4
- 最合算,最常用的方法
- 注
- 堆栈:数据的写入写出不需要地址,按先进后出的顺序读取数据的存储区
- 堆栈指针 SP 的内容是栈顶单元地址
- 堆栈运算指令(即零地址的运算类指令),参与的两个操作数来自栈顶和次栈顶单元