指令系统
指令格式
指令=操作码+地址码(可能有0~4个)
机器字长:与CPU有关;存储字长:与主存有关(一台计算机这两个是固定不变的);指令字长:指令的长度,是可变的。
半字、单字、双字指令----是机器字长的多少倍决定的
指令分类
按地址码数目分类:0、1、2、3、4地址指令
按指令长度对指令格式分类: 定长、变长指令字结构
按操作码长度分类:定长、可变长操作码
按操作类型分类:数据传输类(CPU、主存间的数据传送)、运算类(算术逻辑操作、移位操作)、程序控制类(代表程序执行流,跳转指令)、输入输出类(cpu、IO设备直接的数据传送)
1. 扩展操作码格式
定长指令字+可变长操作码:不同地址数的指令使用不同长度的操作码
设计时注意,短的操作码不能是长操作码的前缀(类似于哈夫曼编码),不能重复。
寻址
2. 指令寻址
确定下一条要执行的指令的存放地址,有程序计数器PC指明。
顺序寻址:PC+“1”----->PC(1个指令字长,不是单纯的地址+1)
跳跃寻址:执行转移类指令(jmp等)改变PC的值
每条指令的执行分为“取指令”、“执行指令”两个阶段
3. 数据寻址
本条指令的地址码指明的真实地址。有哦10种:
软堆栈:用寄存器存储,成本高;硬堆栈:划出一块内存存储。
基址寻址:以“程序起始存放地址”为起点 ;变址寻址:以“程序员设定的程序开始地址”为起点 ;相对寻址:以“程序计数器PC指向的地址”为起点。
机器级代码
因为访问主存次数越多,速度越慢。在X86汇编语言中,不允许两个操作数都来自主存。
CISC和RISC
是两种设计方向
CISC(Complex Instructor Set Computer)设计思路:一条指令完成一个复杂的基础功能。
RISC(Reduced Instructor Set Computer)设计思路:一条指令完成一个基本“动作”;多条指令组合完成一个复杂的基本功能。
RISC相当于给你c语言的基础功能,通过基础功能实现更复杂的功能;
CISC相当于给你基础并给你一些库函数可以直接调用实现某个复杂功能。