指令:指控制计算机的最小操作单位,其功能是指挥计算机进行一系列的操作来完成某个功能
就像我们命令机器人抬起右脚,然后放下右脚,抬起左脚,放下左脚,机器人通过这一系列的命令完成了行走的功能
指令系统:一台计算机所有指令的集合构成了指令系统,也称为指令集
对于不同的指令系统,他们是无法相互兼容的,常见的指令系统有Intel的x86架构,以及手机的ARM架构
两种指令集系统:
- CISC:复杂指令集计算机(Complex Instruction Set Computer),其中的每一条指令能够完成较为复杂的功能,主要用于x86架构的笔记本和台式机中
特点:电路设计复杂,指令系统复杂、庞大,一般大于200条,指令字长不固定,难以优化指令,各指令执行时间差距较大- RISC:精简指令集计算机(Reduced Instruction Set Computer),其中的每一条指令只能完成最为基本的功能,只有设计多条指令才能完成较为复杂的功能,主要用于ARM架构的手机和平板中
特点:电路设计简单,指令系统简单、精简,一般小于100条,指令字长定长,大多在一个周期内完成,只有Load/Store指令访存
指令由【操作码】和【地址码】构成
- 操作码:规定该指令是执行的是什么操作,例如数据【0001】代表着加法,【0010】代表减法等等
- 地址码:规定该指令操作对象的地址位置
一个完整的程序包括数据部分和指令部分存储在主存中,在程序执行的时候首先要读取指令,再根据指令内容进行对应的操作
假设【0000 1000】为取数操作:
- 取指令阶段:PC = 0,读取主存位置为0的指令到指令寄存器IR中(PC自动+1,用于读取下一条指令)
最后指令寄存器交由控制单元CU识别后得到该指令为取数操作
- 取数阶段:根据控制单元得到的是取数操作,则将地址码交给 MAR =【0000 0100】,从而读取主存地址为(4)内的数据 = 【0000 0000 0000 0011】
操作码代表了计算机的各种操作,而这些操作的分类如下:
- 数据传送:
(1)Load:将【存储器】的数据加载到【寄存器】中
(2)Store:将【寄存器】的数据存储到【存储器】中- 算术逻辑操作:
(1)算术运算:加、减、乘、除、加一、减一、求补码等
(2)逻辑运算:与、或、非、异或等- 移位操作:
算术移位、逻辑移位、循环移位- 转移操作:
无条件转移、条件转移、陷入指令等
0. 零地址指令:无地址码,如空操作、停机、关中断等等
且零地址指令用于堆栈计算机,两个操作数放在栈顶和次栈顶,计算结果压回栈顶
1. 一地址指令:地址码仅包含一个地址
- 只对单个数据进行操作:如加一、减一、取反等操作
例如将A1地址的数据【x】取出后加一,然后将【x+1】放回地址为A1的内存中
访存次数 = 3次:【取指令】、【读A1】、【写A1】
- 对两个数据进行操作:其中另一个数存在与CPU的寄存器中,例如ACC累加寄存器
访存次数 = 2次:【取指令】、【读A1】
注意:A1代表地址,(A1)代表地址A1中的数据
2. 二地址指令:地址码部分包括两个地址,用于两个数据的算术运算以及逻辑运算
- 例如:取出地址A1和地址A2的两个数,进行加法运算,得到的结果放回A1地址中
访存次数 = 4次:【取指令】、【读A1】、【读A2】、【写A1】
3. 三地址指令:地址码部分包括三个地址,和二地址指令不同在于最后得到的结果存放在第三个地址中
访存次数 = 4次:【取指令】、【读A1】、【读A2】、【写A3】
4. 四地址指令:地址码部分包括四个地址,第四个地址代表着下一条指令的地址,常用于指令的跳转
- 例如执行完第十条指令后重新跳转到第一条指令,从而实现了循环的过程,就像代码的循环语句
访存次数 = 4次:【取指令】、【读A1】、【读A2】、【写A3】