机器指令
机器指令:每一条机器语言的语句
指令系统:全部机器指令的集合
指令的一般格式
指令由操作码和地址码两部分组成
操作码
作用:指明该指令要完成的操作
位数:反映机器的操作种类,即机器允许的指令条数
长度:可以是固定的,可以是变化的
- 固定长度:操作码集中放在指令字的一个字段内,便于硬件设计,指令译码时间短,广泛用于字长较长的、大中型计算机和超级小型计算机以及 RISC
- 不固定长度:操作码分散在指令字的不同字段,有效地压缩操作码地平均长度,在字长较短地微型计算机中被广泛使用
n 地址指令的操作码的高位不可以复用 n+1 地址指令的操作码
尽量安排指令使用频度高的指令占用短的操作码,对使用频度低的指令可占用较长的操作码,以缩短经常使用的指令的译码时间
地址码
作用:指出该指令的源操作数的地址(一个或两个)、结果的地址以及下一个指令的地址【地址:主存的地址、寄存器的地址、I/O 设备的地址】
四地址指令
(A1)OP(A2)--->(A3)
若地址字段均指示主存的地址,完成一条四地址指令,需访存四次,取指令一次,取操作数两次,存放结果一次
三地址指令
(A1)OP(A2)--->(A3)
后续指令的地址隐含在程序计数器 PC 中
若地址字段均指示主存的地址,完成一条四地址指令 四次访存
二地址指令
(A1)OP(A2)--->(A1) A1 字段既代表源操作数的地址,又代表存放本次运算结果的地址 四次访存
(A1)OP(A2)--->(A2) A2 字段既代表源操作数的地址,又代表中间结果的存放地址 四次访存
(A1)OP(A2)--->ACC 中间结果暂存于累加器 ACC 中 三次访存(取指、取操作数、取操作数 )
一地址指令
(ACC)OP(A1)--->ACC ACC 既存放参与运算的操作数,又存放运算的中间结果 两次访存(取指、取操作数)
零地址指令
零地址指令在指令中无地址码
空操作 NOP、停机 HLT ......这类指令只有操作码
子程序返回 RET、中断返回 IRET ......这类指令没有地址码,其操作数的地址隐含在堆栈指针 SP 中
注意
硬件资源(PC、ACC......)承担指令字中需指明的地址码,在不改变指令字长的前提下,扩大指令操作数的直接寻址范围,缩短指令字长,减少访存次数
地址字段可用来表示寄存器。当 CPU 中含有多个通用寄存器时,对每个寄存器赋予一个编号,便可指明源操作数和结果存放在的寄存器,地址字段表示寄存器也有三地址、二地址、一地址之分,其共同点是,在指令的执行阶段都不必访问存储器,直接访问寄存器,提高机器运行速度 一次访存(取指)
指令字长
决定因素:操作码的长度、操作数地址的长度和操作数地址的个数
不同机器的指令字长不同
操作
操作数类型
操作类型
寻址方式
定义:指确定本条指令的数据地址以及下一条将要执行的指令地址的方法
与硬件结构紧密相关,直接影响指令格式和指令功能
分类:指令寻址、数据寻址
指令寻址
分类:顺序寻址、跳跃寻址
顺序寻址:通过程序计数器 PC +1,自动形成下一条指令的地址
跳跃寻址:通过转移类指令实现
数据寻址
数据寻址方式种类多,在指令字中必须设一字段指明属于哪一种寻址方式
形式地址 A:指令的地址码字段,通常不表示操作数的真实地址
有效地址 EA:操作数的真实地址,由寻址方式和形式地址共同确定
立即寻址
特点:操作数本身设在指令字内,形式地址 A 不是操作数的地址,而是操作数本身,称为立即数,数据采用补码形式存放
"#"表示立即寻址特征标记
优点:只要取出指令,便可立即获得操作数,指令执行阶段不必再访问存储器
缺点:A 的位数限制了这类指令所表述的立即数的范围
访存:一条指令的执行,不考虑存结果,访存一次(取指令)
直接寻址
特点:指令字中的形式地址 A 是操作数的真实地址 EA,即 EA=A
优点:寻找操作数比较简单,不需要专门计算操作数的地址,在指令执行阶段对主存只访问一次
缺点:A 的位数限制了操作数的寻址范围,必须修改 A 的值,才能修改操作数的地址
访存:一条指令的执行,不考虑存结果,访存两次(取指令,取操作数)
隐含地址
特点:指令字中不明显地给出操作数的地址,其操作数的地址隐含再操作码或某个寄存器中
优点:有利于缩短指令字长
间接寻址
特点:有效地址由形式地址间接提供 EA=(A)
多次间接寻址时,可用存储字的首位标志间接寻址是否结束,当存储字首位为"1"时,标明还需继续访存寻址;当存储字首位为"0"时,标明该存储字即为 EA,存储字的首位不能作为 EA 的组成部分
优点:扩大了操作数的寻址范围【因为 A 的位数通常小于指令字长,存储字长可以与指令字长相等】,便于编制程序
缺点:指令的执行阶段需要访存两次(一次间接寻址)或多次(多次间接寻址),使指令执行时间延长
寄存器寻址
特点:地址码字段直接指出寄存器的编号 EA=Ri ,操作数在由 Ri 所指的寄存器内
优点:因为操作数不在主存中,所以寄存器寻址在指令执行阶段无须访存,减少了执行时间;由于地址字段只需指明寄存器编号,故指令字较短,节省了存储空间
访存:指令执行阶段不需要访存
寄存器间接寻址
特点:Ri 中的内容不是操作数,而是操作数所在主存单元的地址号,即有效地址 EA=(Ri)
访存:比间接寻址少访存一次,指令的执行阶段需要访存
基址寻址
特点:设基址寄存器 BR,其操作数的有效地址 EA 等于指令字中的形式地址与基址寄存器中内容相加,即 EA=A+(BR)
分类:隐式、显式
- 隐式:在计算机内专门设有一个基址寄存器 BR,使用时用户不必明显指出该基址寄存器,只需由指令的寻址特征位反映出基址寻址即可
- 显式:在一组通用寄存器里,由用户明确指出哪个寄存器作为基址寄存器,存放基地址
优点:扩大操作数的寻址范围(基址寄存器的位数可以大于形式地址 A 的位数)
基址寻址在多道程序中极为有用,操作系统或管理程序根据主存的使用状况,赋予基址寄存器内一个初始值(基地址),便可将用户程序的逻辑地址转换为主存的物理地址(实际地址),把用户程序安置于主存的某一空间区域
在程序执行过程中,用户不知道自己的程序在主存的哪个空间,用户不可修改基址寄存器的内容,以确保系统安全可靠地运行
变址寻址
特点:有效地址 EA 等于指令字中的形式地址 A 与变址寄存器 IX 的内容相加之和,即 EA=A+(IX)
变址寻址和基址寻址的区别:
- 基址寻址:主要用于为程序或数据分配存储空间,基址寄存器中的内容通常由操作系统或管理程序确定,在程序的执行过程中其值不可变,而指令字中的 A 是可变的
- 变址寻址:变址寄存器的内容由用户设定,在程序执行过程中其值可变,而指令字中的 A 是不可变的。变址寻址主要用于处理数组问题,在数组处理过程中,可设定 A 为数组的首地址,不断改变变址寄存器 IX 的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序
变址寻址与其他寻址方式结合:
- 变址寻址与基址寻址合用:EA=A+(IX)+(BR)
- 变址寻址与间接寻址合用:形成变址后间址或先间址再变址
相对寻址
特点:有效地址是将程序计数器 PC 的内容(即当前指令的地址)与指令字中的形式地址 A 相加而成,即
EA=(PC)+A
相对寻址常被用于转移类指令,转移后的目标地址与当前指令有一段距离,称为相对位移量,由指令字的形式地址 A 给出,A 称为位移量【A可正可负,通常用补码表示】
若位移量为 8 位,则指令的寻址范围为 (PC)+127~(PC)-128
最大特点:转移地址不固定,可随 PC 值的变化而变
相对寻址可与间接寻址配合使用
堆栈寻址
堆栈寻址要求计算机中设有堆栈
堆栈既可用寄存器组(硬堆栈)实现,也可利用主存的一部分空间作堆栈(软堆栈)
堆栈的运行方式为先进后出和先进先出两种
RISC 技术
RISC 精简指令系统计算机
CISC 复杂指令系统计算机
RISC 主要特点
- 选取使用频度较高的一些简单指令以及一些很有用但不复杂的指令,让辅助指令的功能由频度高的简单指令的组合实现 指令系统复杂庞大,各种指令使用频度相差很大
- 指令长度固定,指令格式种类少,寻址方式种类少 指令字长不固定,指令格式多,寻址方式多
- 只有取数/存数(LOAD/STORE)指令访问存储器,其余指令的操作都在寄存器内完成 可以访存的指令不受限制
- CPU 中有多个通用寄存器 CPU中设有专用寄存器
- 采用流水线技术,大部分指令在一个时钟周期内完成。采用超标量和超流水线技术,可使每条指令的平均执行时间小于一个时钟周期 绝大多数指令需要多个时钟周期方可执行完毕
- 控制器采用组合逻辑控制,不用微程序控制 采用微程序控制器
- 采用优化的编译程序 难以用优化编译生成高效的目标代码
紫色是 CISC 的特点