指令系统
~~~~
1.基本概念
~~~~
2.指令系统的功能
~~~~~~~~
(1)2种架构
~~~~~~~~
(2)操作数
~~~~~~~~
(3)地址空间
~~~~~~~~
(4)编址方式
~~~~~~~~
(5)操作类型
~~~~
3.指令格式
~~~~~~~~
(1)基本格式
~~~~~~~~
(2)变长指令和等长指令
~~~~~~~~
(3)4种CPU结构
~~~~~~~~
(4)操作码扩展技术
~~~~
4.指令寻址
~~~~~~~~
(1)顺序寻址
~~~~~~~~
(2)跳跃寻址
~~~~
5.数据寻址
~~~~~~~~
(1)立即寻址
~~~~~~~~
(2)寄存器寻址
~~~~~~~~
(3)存储器寻址
~~~~~~~~
(4)堆栈寻址
二、指令系统
1.基本概念
-
指令系统:计算机拥有的全部指令的集合
-
ISA :Instruction Set Architecture,指令系统结构
包括:指令系统功能、数据类型、寄存器结构、内存组织、寻址方式、中断和I/O处理方式等
2.指令系统的功能
(1)2种架构
-
RISC :Reduced Instruction Set Computer,精简指令系统计算机
-
CISC :Complex Instruction Set Computer ,复杂指令系统计算机
CISC存在的问题:
(2)操作数
(3)地址空间
主要对:CPU中的通用寄存器、主存储器、I/O设备编址
有以下3种方式:
- 三地址空间
- 两地址空间:主存+I/O统一编址、寄存器单独编址
- 一地址空间
- 无地址空间
(4)编址方式
基本的方式有两种:
- 按字编址
- 按字节编址
考虑编址顺序:
- 小端方式:低字节低地址
- 大端方式:高字节低地址
考虑对齐方式:
- 边界对齐
- 边界不对齐
(5)操作类型
- 数据传送指令
- 数据运算指令
包括:算术运算指令、逻辑运算指令、移位指令 、位操作指令
- 程序控制指令
- 输入输出指令
- 其他
如:等待指令、停机指令、空操作指令等
3.指令格式
(1)基本格式
(2)变长指令和等长指令
- 等长指令字结构:所有指令字长均相等,通常,指令字长=机器字长
- 变长指令字结构:各种指令长度不等
(3)4种CPU结构
(a)堆栈结构
操作数都是隐式的,即源操作数来自堆栈的栈顶,运算后把结果写入栈顶
指令示例:ADD
(b)累加器结构
一个操作数是隐式的,即累加器;另一个操作数来自存储器单元,运算结果送回累加器
指令示例:ADD [100]
(c )RS型通用寄存器结构
两个源操作数都来自通用寄存器组
指令示例:ADD AX,BX
(d)RR型通用寄存器结构
一个源操作数来自通用寄存器组,另一个操作数来自存储单元
指令示例:ADD AX,[100]
ARM:ADD $s1,$s2,$s3
(4)操作码扩展技术
4.指令寻址
即确定下一条指令所在主存中的单元地址的方法。
(1)顺序寻址
通过程序计数器PC“加1”自动形成下一条指令,所谓的“加1”是指加指令字长。
(2)跳跃寻址
由转移类指令给出下一条指令的地址信息。
5.数据寻址
(1)立即寻址
即操作数直接在指令的地址码字段给出,形式地址是操作数本身。
例如:ADD AX,100
,其中100是立即数,从IR中取出
(2)寄存器寻址
操作数在寄存器中,地址码形式地址给出通用寄存器编号。
例如:ADD AX,BX
MIPS 32:add $s1,$s2,$s3
(3)存储器寻址
存储器寻址又分:直接寻址、间接寻址、寄存器间接寻址、偏移寻址、段寻址
- 直接寻址
在形式地址中直接给出操作数或者下一条指令的有效地址。
如IA-32指令:mov eax,[100]
[100]
就是直接在主存中找到100这个地址对应的操作数
- 间接寻址(存储器的间接寻址)
简介寻址给出的是操作数地址的地址,类似C语言的二重指针。
有效地址: E A = ( ( A ) ) EA=((A)) EA=((A))
如IA-32指令:jump word ptr[100]
先找到主存中100所存的操作数x,再找到主存中x所存的操作数。
- 寄存器间接寻址
形式地址给出的是寄存器的编号。
有效地址: E A = ( R i ) EA=(Ri) EA=(Ri)
- 偏移寻址
形式上:直接寻址和寄存器间接寻址的结合。
偏移寻址又分:相对寻址、变址寻址、基址寻址。
[1、相对寻址]
引用专门的程序计数器PC, E A = ( P C ) + A EA=(PC)+A EA=(PC)+A。
指令中只需给出偏移量A,寻址范围取决于偏移量的位数 k k k,即范围为: ( P C ) − 2 k − 1 , ( P C ) + 2 k − 1 − 1 (PC)-2^{k-1},(PC)+2^{k-1}-1 (PC)−2k−1,(PC)+2k−1−1
[2、变址寻址]
引用变址寄存器(可以是专用的寄存器或者通用寄存器)
若是专用的寄存器Rx,地址字段无需给出;若是通用寄存器Ri,需要给出编号。
变址寄存器存放地址的修改量,形式地址给出基本地址。
有效地址: E A = ( R i ) + A EA=(Ri)+A EA=(Ri)+A
[3、基址寻址]
引用一个基址寄存器Rb,可以是专用或通用的。
有效地址: E A = ( R b ) + A EA=(Rb)+A EA=(Rb)+A
一般基地址不变,偏移量可以改变。
- 段寻址
用于地址长度超过机器字长的情形。
(4)堆栈寻址
有寄存器堆栈(硬堆栈)和存储器堆栈(软堆栈)。
常使用存储器堆栈。