文章目录
- 1 指令格式
- 1.1 指令定义
- 1.2 指令格式
- 1.3 指令格式-地址码
- 1.4 指令格式-操作码
- 1.5 操作码分类
- 1.6 操作类型
- 2 数据存放指令寻址
- 2.1 数据存放方式
- 2.2 指令寻址
- 2.3 操作数类型
- 2.4 数据寻址
- 2.4.1立即寻址
- 2.4.2 直接寻址
- 2.4.3 间接寻址
- 2.4.4 寄存器寻址
- 2.4.5 寄存器间接寻址
- 2.4.6 隐含寻址
- 2.5 数据寻址-2偏移寻址
- 2.5.1 基址寻址
- 2.5.2 变址寻址
- 2.5.3 相对寻址
- 2.5.4 相对寻址举例
- 2.5.5 寻址方式小结
- 2.5.6 堆栈寻址
- 2.6 CISC和RISC
- 2.7 指令系统小结
1 指令格式
1.1 指令定义
指令(又称机器指令):
是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。
一台计算机的所有指令的集合构成该机的指令系统,也称为指令集。
注:一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。
1.2 指令格式
一条指令就是机器语言的一个语句,它是一组有意义的二进制代码。
一条指令通常要包括操作码字段和地址码字段两部分:
1.3 指令格式-地址码
指令含义:
(A1)OP(A2)→A3
,A4=下一条将要执行指令的地址
设指令字长为32位,操作码占8位,4个地址码字段各占6位
设存储字长为32位,即 4B
- Ai 可直接表示 26=64 个不同的位置
- 一条指令的执行(假设每个地址都是主存地址):
取指令访存1次(假设指令字长=存储字长)
取两个操作数访存2次
存回结果访存1次
总计共访存4次
设指令字长及存储字长均为32位,操作码占8位
指令含义:(A1)OP(A2)→A3
,A4=下一条将要执行指令的地址4个地址码字段各占6位,指令操作数直接寻址范围为 26=64;
完成一条指令需要访存4次
指令含义:(A1)OP(A2)→A3
3个地址码字段各占8位,指令操作数直接寻址范围为 28=256;
完成一条指令需要访存4次
指令含义:(A1)OP(A2)→A1
2个地址码字段各占12位,指令操作数直接寻址范围为 212=4K;
完成一条指令需要访存4次
指令含义:
OP(A1)→A1
,如加1、减1、取反、求补等完成一条指令需要访存3次(ACC)OP(A1)→ACC
,隐含约定的目的地址为 ACC
完成一条指令需要访存2次
1个地址码字段占24位,指令操作数直接寻址范围为 224=16M
指令含义:
- 不需要操作数,如空操作、停机、关中断等指令
- 堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶
指令字结构
- 定长指令字结构:指令长度固定
- 变长指令字结构:指令长度不等
1.4 指令格式-操作码
定长操作码:n位→ 2n 条指令
扩展操作码:操作码长度可变
扩展操作码举例:
扩展思想:即动态的把地址码用作操作码,而为了识别变化,上一层操作码字段留出一个状态表示下一层
在设计扩展操作码指令格式时,必须注意以下两点:
- 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
- 各指令的操作码一定不能重复。
通常情况下,对使用频率较高的指令,分配较短的操作码;
对使用频率较低的指令,分配较长的操作码,从而尽可能减少指令译码和分析的时间。
设地址长度为 n,上一层留出 m 种状态,下一层可扩展出 mx2n 种状态
1.5 操作码分类
- 操作码指出指令中该指令应该执行什么性质的操作和具有何种功能。
- 操作码是识别指令、了解指令功能与区分操作数地址内容的组成和使用方法等的关键信息。例如,指出是算术加运算,还是减运算;是程序转移,还是返回操作。
- 定长操作码:在指令字的最高位部分分配固定的若干位(定长)表示操作码。
一般 n 位操作码字段的指令系统最大能够表示 2n 条指令。
优:定长操作码对于简化计算机硬件设计,提高指令译码和识别速度很有利;
缺:指令数量增加时会占用更多固定位,留给表示操作数地址的位数受限。
- 扩展操作码(不定长操作码):全部指令的操作码字段的位数不固定,且分散地放在指令字的不同位置上。
最常见的变长操作码方法是扩展操作码,使操作码的长度随地址码的减少而增加,不同地址数的指令可以具有不同长度的操作码,从而在满足需要的前提下,有效地缩短指令字长。
优:在指令字长有限的前提下仍保持比较丰富的指令种类;
缺:增加了指令译码和分析的难度,使控制器的设计复杂化。
1.6 操作类型
- 数据传送源目的
LOAD
作用:把存储器中(源)的数据放到寄存器中(目的)STORE
作用:把寄存器中的数据放到存储器中
- 算术逻辑操作
- 算术:加、减、乘、除、增1、减1、求补、浮点运算、十进制运算
- 逻辑:与、或、非、异或、位操作、位测试、位清除、位求反
- 移位操作
算术移位、逻辑移位、循环移位(带进位和不带进位)
- 转移操作
- 无条件转移
JMP
- 条件转移
JZ
:结果为0;JO
:结果溢出;JC
:结果有进位- 调用和返回
CALL
和RETURN
- 陷阱(
Trap
)与陷阱指令
- 输入输出操作
CPU寄存器与IO端口之间的数据传送(端口即IO接口中的寄存器)
也可以分为以下四类:
- 数据传送类:进行主存与CPU之间的数据传送
- 运算类
- 程序控制类:改变程序执行的顺序
- 输入输出类(I/O):进行CPU和I/O设备之间的数据传送
2 数据存放指令寻址
2.1 数据存放方式
三个字长:
- 机器字长:CPU一次能处理的二进制数据的位数,受寄存器能够存放二进制位数的限制。
- 指令字长:一个指令字中包含二进制代码的位数。
- 存储字长:一个存储单元存储二进制代码的长度。
注:这三个字长没有固定大小的关系,但这些长度都是字节的整数倍
单字长指令:指令长度=机器字长
半字长指令、双字长指令
2.2 指令寻址
指令寻址:
顺序寻址:(PC)+1→PC
跳跃寻址:由转移指令指出
2.3 操作数类型
2.4 数据寻址
数据寻址即根据寻址方式的要求将形式地址转化为实际地址的过程
2.4.1立即寻址
立即寻址:形式地址A就是操作数本身,又称为立即数,一般采用补码形式。
#表示立即寻址特征。
一条指令的执行:
取指令访存1次
执行指令访存0次
暂不考虑存结果
共访存1次
- 优点:指令执行阶段不访问主存,指令执行时间最短
- 缺点:A的位数限制了立即数的范围。
如A的位数为 n,且立即数采用补码时,可表示的数据范围为 - 2 n - 1 ~ 2 n - 1-1
2.4.2 直接寻址
直接寻址:指令字中的形式地址A就是操作数的真实地址EA,即 EA=A。
一条指令的执行:
取指令访存1次
执行指令访存1次
暂不考虑存结果
共访存2次
- 优点:简单,指令执行阶段仅访问一次主存,不需专门计算操作数的地址。
- 缺点:A的位数决定了该指令操作数的寻址范围。
操作数的地址不易修改。
2.4.3 间接寻址
间接寻址:指令的地址字段给出的形式地址不是操作数的真正地址,而是操作数有效地址所在的存储单元的地址,也就是操作数地址的地址,即 EA=(A)。
- 优点:可扩大寻址范围(有效地址
EA
的位数大于形式地址A
的位数)。
便于编制程序(用间接寻址可以方便地完成子程序返回)。- 缺点:指令在执行阶段要多次访存
一次间址需两次访存,多次寻址需根据存储字的最高位确定几次访存。
2.4.4 寄存器寻址
寄存器寻址:在指令字中直接给出操作数所在的寄存器编号,即 EA=Ri,其操作数在由Ri所指的寄存器内。
与直接寻址类似,只是把主存换成了寄存器
一条指令的执行:
取指令访存1次
执行指令访存0次
暂不考虑存结果
共访存1次
- 优点:指令在执行阶段不访问主存,只访问寄存器,指令字短且执行速度快,支持向量/矩阵运算。
- 缺点:寄存器价格昂贵,计算机中寄存器个数有限。
2.4.5 寄存器间接寻址
寄存器间接寻址:寄存器Ri中给出的不是一个操作数,而是操作数所在主存单元的地址,即 EA=(Ri)。
一条指令的执行:
取指令访存1次
执行指令访存1次
暂不考虑存结果
共访存2次
- 特点:与一般间接寻址相比速度更快,但指令的执行阶段需要访问主存(因为操作数在主存中)。
2.4.6 隐含寻址
隐含寻址:不是明显地给出操作数的地址,而是在指令中隐含着操作数的地址。
- 优点:有利于缩短指令字长。
- 缺点:需增加存储操作数或隐含地址的硬件。
小结:
寻址方式 | 有效地址 | 访存次数(指令执行期间) |
---|---|---|
隐含寻址 | 程序待定 | 0 |
立即寻址 | A即是操作数 | 0 |
直接寻址 | EA=A | 1 |
一次间接寻址 | EA=(A) | 2 |
寄存器寻址 | EA=Ri | 0 |
寄存器间接一次寻址 | EA=(Ri) | 1 |
2.5 数据寻址-2偏移寻址
2.5.1 基址寻址
基址寻址:将CPU中基址寄存器(BR)的内容加上指令格式中的形式地址A,而形成操作数的有效地址,即EA=(BR)+A
注:基址寄存器是面向操作系统的,其内容由操作系统或管理程序确定。
在程序执行过程中,基址寄存器的内容不变(作为基地址),形式地址可变(作为偏移量)。
当采用通用寄存器作为基址寄存器时,可由用户决定哪个寄存器作为基址寄存器,但其内容仍由操作系统确定。
- 优点:可扩大寻址范围(基址寄存器的位数大于形式地址A的位数);
用户不必考虑自己的程序存于主存的哪一空间区域,故有利于多道程序设计,以及可用于编制浮动程序。
2.5.2 变址寻址
变址寻址:有效地址EA
等于指令字中的形式地址A
与变址寄存器IX
的内容相加之和,即EA=(IX)+A,其中IX
为变址寄存器(专用),也可用通用寄存器作为变址寄存器。
注:变址寄存器是面向用户的,在程序执行过程中,变址寄存器的内容可由用户改变(作为偏移量),形式地址A不变(作为基地址)。
- 优点:可扩大寻址范围(变址寄存器的位数大于形式地址A的位数);
在数组处理过程中,可设定A为数组的首地址,不断改变变址寄存器IX
的内容,便可很容易形成数组中任一数据的地址,特别适合编制循环程序。
变址寻址与基址寻址配合使用:
EA=A+(BR)+(IX)
变址寻址与间接寻址配合使用:
- 如先变址后间址,
EA=(A+(IX))
;- 先间址后变址,
EA=(A)+(IX)
。
2.5.3 相对寻址
相对寻址:把程序计数器PC
的内容加上指令格式中的形式地址A
而形成操作数的有效地址,即EA=(PC)+A,其中A
是相对于当前指令地址的位移量,可正可负,补码表示。
- 优点:操作数的地址不是固定的,它随着PC值的变化而变化,并且与指令地址之间总是相差一个固定值,因此便于程序浮动。。
相对寻址广泛应用于转移指令。
2.5.4 相对寻址举例
某机器指令字长为16位,主存按字节编址,取指令时,每取一个字节PC自动加1。当前指令地址为2000H,指令内容为相对寻址的无条件转移指令,指令中第一个字节为操作码,第二个字节为形式地址,当前形式地址为40H。
(1)求取指令后及指令执行后PC内容。
(2)若要求转移到1F00H,求形式地址的内容。
(1)PC中一开始存放2000H,多字节指令,第一次取出的是操作码,PC更新为2001H,在2001H中取出地址码,取数过程结束,PC更新为2002H
CPU分析指令的结果:是一条无条件转移指令,
EA=(PC)+A =2002H+40H =2042H
故取指令后PC内容为2002H,指令执行后PC内容为2042H
(2)即
(PC)+A=2002H+A=1F00H
A=1F00H-2002H=1EFFH+1H-2002H =1EFFH-2002H+1H=FEFDH+1H=FEFEH
说明:(1EFFH-2002H=FEFDH,F(15)-2=13→D,1-2 不够减,向上借位,若是10进制,+10,这是16进制,+16为17,17-2=15,15的16进制就是F)
形式地址就是偏移量
2.5.5 寻址方式小结
寻址方式 | 有效地址 | 访存次数(指令执行期间) |
---|---|---|
隐含寻址 | 程序待定 | 0 |
立即寻址 | A即是操作数 | 0 |
直接寻址 | EA=A | 1 |
一次间接寻址 | EA=(A) | 2 |
寄存器寻址 | EA=Ri | 0 |
寄存器间接一次寻址 | EA=(Ri) | 1 |
相对寻址 | EA=(PC)+A | 1 |
基址寻址 | EA=(BR)+A | 1 |
变址寻址 | EA=(IX)+A | 1 |
- 相对寻址:指令中的形式地址给出一个位移量A,基准地址由程序计数器PC提供,通常用于转移指令中转移目标或公共子程序中的操作数的寻址
- 变址寻址:通常用于循环体中对数组元素的访问
2.5.6 堆栈寻址
堆栈寻址:操作数存放在堆栈中,隐含使用堆栈指针(SP)作为操作数地址。
堆栈是存储器(或专用寄存器组)中一块特定的按后进先出(
LIFO
)原则管理的存储区,该存储区中被读/写单元的地址是用一个特定的寄存器给出的,该寄存器称为堆栈指针(SP)。
2.6 CISC和RISC
CISC:Complex Instruction Set Computer
(复杂指令系统计算机)
- 设计思路:一条指令完成一个复杂的基本功能。
- 代表:×86架构,主要用于笔记本、台式机等
RISC:Reduced Instruction Set Computer
(精简指令系统计算机)
- 设计思路:一条指令完成一个基本“动作”;多条指令组合完成一个复杂的基本功能。
- 代表:ARM架构,主要用于手机、平板等