Concept:
指令集是CPU可以执行的指令的集合,是计算机设计者和计算机程序员之间的接口,CPU的操作由其可以执行的指令集决定。
Elements of an Instruction
Operation code(Opcode) 操作码
表示该指令进行的操作的类型
Source Operand Reference 源操作数
该操作所需输入的操作数
Result Operand Reference 目标操作数
操作产生的需要存储的结果
Next Instruction Reference 下一条指令地址
告诉CPU当前指令完成后下一条指令的地址
Instruction Representation
- 机器码:指令(无论操作数还是操作码)都是无差别地以二进制的形式存储
- 汇编语言:操作码用缩写的形式(助记符)表示,说明该指令进行的操作的类型,操作数也以相应的符号来表示
Instruction Types
- Data processing(数据处理)
- Data Storage(数据存储)
- Data movement(I/O)
- Control(控制)
Instruction Set Design
- Operation repertoire(操作类型储备)
- How many ops?
- What can they do?
- How complex are they?
- Data types(数据类型)
- Insturctoin formats(指令格式)
- Length of opcode field
- Number of addresses
- Registers
- Number of CPU registers availiable
- Which operations can be performed on which registers?
- Addressing modes(寻址模式)
Types of Operand
- Addresses
- Numbers
- Charcters
- Logical Data
Types of Operation
- Data Transfer(数据传输)
- Arithmetic(算术运算)
- Logical(逻辑运算)
- Conversion(转换):转换数据的形式,如十进制转为二进制
- I/O
- System Control
- Transfer of Control(控制转换):例如跳转,子程序调用
Byte Order(位元组顺序)
- little-endian(小端规则):LSB(最低有效位,即最左边的位)存储在低位的地址之中。
- big-endian(大端规则):LSB存储在高位的地址之中。
0x12345678存储
左边为大端规则,右边为小端规则
Addressing Modes(寻址模式)
根据对操作数和/或地址的使用不同加以区分的多种寻址方式中的一种
说明如何获取指令中操作数和下一条指令,经常不止一种寻址方式被使用,不同的操作码使用不同的寻址方式,指令中的方式字段说明寻址的方式。
- Immediate (立即寻址):操作数是位于指令自身中的常数
- Direct (直接寻址):指令中存储的是操作数的地址
- Indirect (间接寻址):指令中存储的是操作数的地址的地址
- Register (寄存器寻址):操作数是寄存器
- Register Indirect (寄存器间接寻址):对寄存器访问取得操作数地址
- Displacement (Indexed) (偏移寻址):操作数在内存中,其地址是指令中基址寄存器和常数的和
- Stack (堆栈寻址):详情点击
速度排序:
立即寻址 > 寄存器寻址 > 直接寻址 > 寄存器间接寻址 > 间接寻址
RISC vs CISC
CISC:复杂指令集,有大量的变长的,复杂结构的指令,可以完成复杂的任务
RISC:精简指令集,减少了大量非必须指令且简化了剩余的指令使其执行速度加快。
特征如下:
- 所有指令定长(4个字节),通过补0实现使CPU能够快速解码
- 指令只能从内存加载到寄存器或从寄存器存储到内存
- 对于算术运算和逻辑运算,没有直接的方法在寄存器和内存之间直接进行(即算术运算指令和逻辑运算指令无法读取内存中的内容)
- RISC架构拥有大量的寄存器
- RISC只有少量的基本的指令
- 99%的指令可以在一个时钟周期内执行完
- 由于RISC指令集的精简,其指令用硬件的方法实现