cpu中有控制器和运算器
这里就要开始学控制器
指令
指令分为两个部分:
操作码
做什么事情
地址码
对谁做
当cpu检测到操作码为000110的时候,就要执行停机操作
指令是计算机的最小功能单位
计算机智能执行自己指令系统中的指令,不能执行其他系统的指令
比如说inter芯片一般都是x86架构的,而m1芯片用的是arm架构
零地址指令
【op】
只需要操作码,不需要地址码
例子:
1.不需要操作数的操作如:空操作,停机,关中断(操作系统里的知识)
2.堆栈计算机:两个操作数隐含在栈顶和次栈顶,计算结果押回栈顶(数据结构的知识)后缀表达式就是这样的
一地址指令
【op】【A1】
1.只需要一个操作:加1,减1,取反,求补等
指令含义:op(A1)->A1
2.需要两个操作数,但是其中一个操作数隐含在某个寄存器(比如ACC)累加寄存器
指令含义:(ACC)OP(A1)->ACC
二地址指令,三地址指令
二地址指令通常需要两个操作数的算术运算。逻辑运算指令
指令含义(A1)op(A2)->A1
完成这条指令需要访问内存四次,取址-》读A1-〉读A2-》写A1
三地址指令,和二地址类似,在这里我们会指出最后的数据要存在哪里
(A1)op(A2)->A3
完成这条指令也需要访问内存四次,取址-》读A1-〉读A2-》写A3
四地址指令
(A1)op(A2)->A3,A4=下一条将要执行的指令
完成一条指令需要访问内存4次,取址-》读A1-〉读A2-》写A3
正常情况下,取指令之后pc+1,指向下一条指令,但是这里,它会指向A4所指向的位置
指令按照长度分配
指令字长:一条指令的总长度(可能会变)
机器字长:cpu镜像一次证书运算所能处理的二进制数据的位数(通常和ALU直接相关)
存储字长:一个存储单元中,二进制代码的位数
半字长指令,单字长指令,双字长指令---指令长度是机器长度的多少倍
指令字长会印象取指令的时间。比如机器字长=存储字长=16bit,那么取一条双字长的指令需要两次访问内存
定长指令字结构:指令系统中所有指令的长度都相等
变长指令字结构:指令系统中指令的字长度不想等
定长操作码:指令系统中所有指令的操作码长度都相等
这样的控制器译码电路设计起来比较简单,但是灵活性低
n位-》2^n条指令
可变长操作码:指令系统中指令的操作码长度可变
译码电路设计复杂,但是灵活性高
指令按照操作类型分类
数据传送
load:吧存储器中的数据传输到寄存器中
store:把寄存器中的数据传输到存储器中
算数逻辑操作
算数:加减乘除,加一,减一,求补,浮点运算,十进制运算
逻辑:与或非,异或,位操作,位测试,位清楚,位求反
移位操作:算数移位,逻辑移位,循环移位(带进位和不带进位)
转移操作: 执行这些操作都会让pc的值发生变化
无条件转移 JMP
条件转移:JZ结果0 JO结果已出 JC结果有进位
调用和返回:CALL RETURN
陷阱(TRAP)与陷阱指令
输入输出操作:CPU寄存器与io端口之间的数据传送
