定义
是指计算机执行某种操作的命令,是计算机运行的最小功能单位。
一台计算机的所有指令的集合构成了该机的指令系统,也称指令集。一台计算机只能执行自己指令系统中的指令,不能执行其他系统的指令。例如:x86架构,ARM架构。
指令格式
一条指令就是机器语言的一个语句,通常包含操作码和地址码。
由操作码和若干个地址吗组成
一条指令可能包含0个,1个,2个,3个,4个地址码,根据地址码的数量也分为不同的指令。
按地址数分
零地址指令:
1.不需要操作数,如空指令,停机,关中断等指令。
2.堆栈计算机,两个操作数隐含存放在栈顶和次栈顶,计算结果压回栈顶。
一地址指令:
1.只需要单操作数,如加一,减一,取反,求补。
2.需要两个操作数,但其中一个操作数隐含在某个寄存器中。
二地址指令:
常用于两个操作数的算术运算,逻辑运算。
完成这样一条指令需要访存四次:取指,读1,读2,写1。
三地址指令:
常用于两个操作数的算术运算,逻辑运算。
完成这样一条指令需要访存四次:取指,读1,读2,写3。
和二地址指令的区别就是存放运算结果的地址不同。
四地址指令:
和三地址指令前面一样,只是多了一个地址用来指向下一条指令的地址。
正常情况是取指令之后pc+1,指向下一条指令。
四指令是执行指令后,将pc的值修改为4所指地址。
按指令字长分
指令字长:一条指令的总长度。
机器字长:cpu进行一次整数运算所能处理的二进制数据的位数。(和ALU直接相关)
存储字长:一个存储单元中的二进制位数。
半字长指令,单字长指令,双字长指令。这里指的是指令长度是机器字长的多少倍
指令字长会影响取指令所需的时间。例如:机器字长=存储字长=16bit,则取一条双字长指令需要两次访问。
按操作码长度分
定长操作码:指令系统中所有指令的操作码长度都相同。控制器的译码电路设计简单,但灵活性较低。
可变长操作
码:指令系统中个指令操作码长度可变。控制器的译码电路设计复杂,但是灵活度较高。
按操作类型分
1.数据传送
LOAD: 把存储器中的数据放到寄存器中
STORE:把寄存器中的数据存到存储器中。
2.算数逻辑操作
算数:加减乘除,加一减一,求补,浮点,十进制运算。
逻辑:与或非,异或同或,位操作,位清除,位求反。
3.移位操作
算数移位,逻辑移位,循环移位
4.转移指令
无条件转移,条件转移,调用返回,陷阱。
转移操作就会改变pc的值,改变程序的执行顺序。
5.输入输出操作
cpu寄存器和IO端口之间的数据传输。
指令寻址
顺序寻址
说到寻址,首相想到的就是pc+1,但是你真的理解这个”1“的含义么?
1. 如果系统采用定长指令字结构,主存也按字编址,则指令寻址就是简单的程序计数器pc+1,指向下一条指令的存放地址。
2. 若系统采用定长指令字结构,主存采用按字节编址,指令字长=存储字长=16bit。
则指令寻址就需要每次pc+2
3. 若系统采用变长指令字结构,主存采用字节编址。
则每条指令的长度并不固定,图中相同颜色为一条指令。所以每次寻址就需要pc+n来读取到一条完整的指令。
所以综上:pc+1,这个1是意义上的下一条完整指令,但实际中并不是单纯的+1。
跳跃寻址
由转移指令指出。jmp,跳跃指令会直接修改pc中的值。直接跳跃到想要执行的指令地址。
数据寻址
确定本条指令的地址码的真实地址。
所以在原有的形式地址码前加上寻址特征。来辨别此地址是采用那种方式来寻址的。
直接寻址
形式地址就是真实地址。简单,指令执行阶段只用访问一次主存。但是寻址范围有限,受到有效地址的位数限制。
间接寻址
可扩大寻址范围,便于编制程序。但是指令在执行阶段需要多次访存。
寄存器寻址
在指令字中直接给出操作数所在的寄存器编号,其操作数就在所致的寄存器内。
指令在执行阶段不需要访问主存,之访问寄存器。指令字短且访问速度快。
隐含寻址
不是明显的给出操作数的地址,而是在指令中隐含着操作数的地址。
优点:有利于缩短指令字长。
缺点:需要增加存储操作数或隐含地址的硬件。
立即寻址
形式地址就是操作数的值本身,又称为立即数,一般采用补码形式。
#表示立即数寻址。
只需用取指令时访存一次。指令执行时间最短。但是长度受限。
偏移寻址
1.基址寻址
以程序的起始存放地址作为起点
将cpu中基质寄存器BR的内容加上指令格式中的形式地址A,形成操作数的有效地址。
或者使用cpu中的通用寄存器来作为BR使用。
便于程序浮动,解决了程序存储时并非从零号地址开始存的问题。
程序运行前,cpu会将BR中的值修改为程序的起始地址,存在于进程PCB中。
注:基址寄存器是面向操作系统的,其内容由操作系统修改,在程序执行过程中,基址不变。
2.变址寻址
程序员自己决定从哪里作为起点。
和基址寻址几乎一样,就是存放起始地址的寄存器不同。这里使用IX寄存器。
有效地址=IX中内容+A形式地址。
IX寄存器程序员可以进行操作。
3.相对寻址
以程序计数器pc所指的地址为起点
把pc内容加上指令格式中的形式地址A而形成有效地址。其中A是相对于PC所指的位移量,可正可负,补码表示。
堆栈寻址
操作数存放在堆栈中,隐含使用堆栈指针SP作为操作数地址。
总结:
CISC和RISC设计思想
CISC:一条指令完成一个复杂的基本功能
代表:x86架构,主要用于笔记本,台式机。
RISC:一条指令完成一个基本功能,多条指令组合完成一个复杂的基本功能。
代表:ARM架构,主要用于手机,平板。