文章目录
指令格式
指令的基本格式
基本概念
- 一条指令就是机器语言的一个语句
- 一条指令通常包括操作码字段和地址码字段两部分
x 地址指令
根据指令中操作数地址码的数目的不同,可将指令分成:
零地址指令
只给出操作码 O P OP OP ,没有显式地址。这种指令有两种可能:
- 不需要操作数的指令,如空操作指令、停机指令、关中断指令等。
- 参与运算的两个操作数隐含地从栈顶和次栈顶弹出,送到运算器进行运算,运算结果再隐含地压入堆栈。
一地址指令
给出操作码 O P OP OP 和一个地址 A 1 A_1 A1,这种指令也有两种可能:
-
只有目的操作数的单操作数指令,单目运算符,如自增、自减、取反,从 A 1 A_1 A1 取数进行OP操作后,结果存回原地址 A 1 A_1 A1。
-
另一个操作数隐含在 ACC(累加器)中,运算结果也将存放在ACC中。
二地址指令
给出操作码 O P OP OP 和两个地址 A 1 、 A 2 A_1、A_2 A1、A2
指令含义: ( A 1 ) O P ( A 2 ) → A 1 (A_1)OP(A_2)\rightarrow A_1 (A1)OP(A2)→A1
三地址指令
给出操作码 O P OP OP 和两个地址 A 1 、 A 2 、 A 3 A_1、A_2、A_3 A1、A2、A3
指令含义: ( A 1 ) O P ( A 2 ) → A 3 (A_1)OP(A_2)\rightarrow A_3 (A1)OP(A2)→A3
定长操作码指令格式
-
设计简单
-
指令译码和识别速度快
扩展操作码指令格式
为了在指令字长有限的前提下仍保持比较丰富的指令种类,可采取可变长度操作码
最常见的变长操作码方法是扩展操作码,它使操作码的长度随地址码的减少而增加,不同地址数的指令可具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长
指令的寻址方式
指令寻址
顺序寻址方式
- 程序的顺序结构
- 通过PC+1,自动形成下一条指令的地址
跳跃寻址方式
- 通过转移类指令实现(程序的循环、分支、子程序调用结构)
- 下条指令的地址码不由程序计数器给出,而由本条指令给出下条指令地址的计算方式
数据寻址
数据寻址是指如何在指令中表示一个操作数的地址,如何用这种表示得到操作数或怎样计算出操作数的地址
数据寻址的方式较多,为区别各种方式,通常在指令字中设一个字段,用来指明属于哪种寻址方式
常见的数据寻址方式
指令中的地址为 A A A ,操作数真实地址为 E A EA EA
- 隐含寻址
- 指令中不给出操作数地址,如单地址指令的另一个操作数隐藏在ACC中
- 有利于缩短指令字长;
- 需増加存储操作数或隐含地址的硬件。
- 立即寻址
- 指令的地址字段就是操作数本身
- 指令在执行阶段不访问主存,指令执行时间最短
- A 的位数限制了立即数的范围
- 直接寻址
- 指令字中的地址就是操作数的真实地址, E A = A EA=A EA=A
- 指令在执行阶段仅访问一次主存,不需要专门计算操作数的地址
- A 的位数限制了寻址范围
- 间接寻址
- 指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,即 E A = ( A ) EA=(A) EA=(A)
- 扩大寻址范围,但需要多次访存
- 寄存器寻址
- 在指令字中直接给出操作数所在的寄存器编号,即 E A = R i EA=R_i EA=Ri
- 缩短地址字段,不需要访存
- 寄存器间接寻址
- 相对寻址
- 把程序计数器 PC 的内容加上 A 形成 EA,即 E A = ( P C ) + A EA=(PC)+A EA=(PC)+A
- 实质是"以下条指令在内存中的首地址为基准位置的偏移量"
- 便于程序浮动,转移指令
- 基扯寻址
- E A = ( B R ) + A EA=(BR)+A EA=(BR)+A ,其中 B R BR BR 是基址寄存器
- 面向OS,主要实现逻辑地址到物理地址的转换
- 程序浮动依靠基址寻址实现
- 变址寻址
- E A = ( I X ) + A EA=(IX)+A EA=(IX)+A ,其中 I X IX IX 为变址寄存器
- 面向用户,数组
- 堆栈寻址
- 先把操作数压入栈中,用的时候再弹出,汇编语言中调用函数会采用这种方法
复杂指令系统计算机 CISC
**基本思想:**指令系统要完成基本功能和复杂的功能,所以指令数目多
- x86架构,主要用于笔记本、台式机
精简指令系统计算机 RISC
**基本思想:**指令系统只需要完成那些基本功能,复杂的功能由多条指令组合完成,所以指令数目少
- ARM架构,主要用于手机、平板(2020年苹果公司已经推出了基于ARM架构的macbook,我觉得RISC是未来的发展趋势)
CISC和RISC的比较
CISC | RISC |
---|---|
指令系统复杂,指令数目较多 | 只选取了使用频率最高的一些指令,指令数目少 |
各种指令使用频度相差很大 | 各种指令都比较常用 |
指令长度不固定 | 指令长度固定 |
寻址方式较多 | 寻址方式较少 |
通用寄存器较少 | 设有多个通用寄存器 |
必须采用流水线技术 | 不一定要求流水线技术(当然事实上现在的CISC计算机都采用了流水线技术) |
各指令执行时间相差很大 | 大多数指令都在一个周期内完成 |
多采用微程序控制器 | 以硬布线控制器为主(组合逻辑控制) |
难以使用编译优化 | 强调编译优化 |
没有限制 | 只有 Load/Store 指令访存(导致程序长度会更长) |
具有更好的兼容性(因为老机器都是CISC结构) |
一点问题
指令与指令系统?
- 指令(又称机器指令)是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。
- 一台计算机中所有机器指令的集合,称为这台计算机的指令系统
- 引入指令系统后,避免了用户与机器语言直接接触,使得用户编写程序更为方便
- 指令系统(ISA)是计算机软件与硬件的界面
操作系统采用不同寻址方式的目的/好处/坏处?
- 缩短指令字长,扩大寻址空间,增加编程的灵活性
- 提高了指令译码难度
对于一个指令系统来说,寻址方式多和少有什么影响?
寻址方式的多样化能让用户编程更为方便,但多重寻址方式会造成CPU结构的复杂化(详见中央处理器章节),也不利于指令流水线的运行。而寻址方式太少虽然能够提高CPU的效率,但对于用户而言,少数几种寻址方式会使编程变得复杂,很难满足用户的需求。