(在补充当中…)
这里写目录标题
- 1.32位与64位
- 2.架构和微架构
- 3.CPU、处理器、Core、处理器核的关系
- 4.超标量、乱序
- 5.补码
- 6.异或
- 7.寄存器
- 8. 堆栈的作用
- 9. 8086/8088的寻址方式
- 10. 指令的派遣(dispatch)和发射(Issue)
- 11. 关于分支指令的流程
1.32位与64位
- 处理器架构的位数->通用寄存器的宽度->寻址的宽度
- 处理器架构的位数(32位/64位)与指令的长度无关——指令长度当然是越短越好。
- 在不考虑成本技术条件下,指令集架构的位数越多越好——更大的寻址空间,更强的运算能力。
- 指令编码的长度越短越好,因为这样可以更加节省代码的存储空间
2.架构和微架构
架构是指指令集架构,例如x86、ARM等。
微架构是是CPU内部晶体管的一种排列方式,即CPU的具体实现方式,例如同为x86架构的AMD和Intel有不同的的微架构。
3.CPU、处理器、Core、处理器核的关系
书中解释:“请注意区分“处理器”和“处理器核”“ CPU ”和“Core ”的概念。严格来说 “处理器核”和“ Core ”是指处理器内部最核心的部分,是真正的处理器内核;而“处理器”和“CPU"往往是一个完整的 Soc ,包含了处理器内核和其他的设备或者存储器。”
计算机包括运算器、控制器、存储器、输入输出设备,其中运算器控制器组成CPU
总线组成如下:
4.超标量、乱序
5.补码
6.异或
7.寄存器
SP:一般用作偏移量,一般是栈顶部
IP就是以CS(代码段)为基址进行偏移
8. 堆栈的作用
9. 8086/8088的寻址方式
共四种:
① 立即数操作数——直接在代码中提供
② 寄存器操作数——在通用寄存器或段寄存器(CS、DS、SS、ES),段寄存器就是指明内存中不同范围的基地址。
个人认为这里的段寄存器并不是地址索引,是直接取段寄存器内的基址
③ 存储器操作数——段基值+偏移量(也叫有效地址EA)
EA是通过三个部分计算得到:
- 位移量:在程序中给出(变量名)
- 基址:基址寄存器BX和基址指针BP提供
- 变址:由源变址寄存器SI和目的变址寄存器DI提供的内容
由这三个可以有几种形式
- 直接寻址——EA只有位移量
- 汇编例子:
MOV BX, VAR; 将数据段中偏离VAR个字节单元的值送到BX
MOV AL, DATA+2; 将数据段中偏移DATA+2个字节单元的值送到AL - 间接寻址
- 基址寻址/变址寻址(寄存器相对寻址——相对偏移量又有位移量)
EA = 基址/变址分量 + 位移量 - 基址变址寻址
EA = 基址 + 变址 + 位移量
MOV CX, 100H[BX][DI]
基址变址寻址方式的应用就是二维数组! - 对1、2、3、4的一个总结图
- 串操作
- ④ IO端口操作数
- 一种是把端口放到存储地址中——占用地址空间
- 另一种是用特殊的指令 IN OUT
直接寻址(0-255):
IN AL, 25H
间接寻址:
MOV DX, 378H
OUT DX, AL
10. 指令的派遣(dispatch)和发射(Issue)
- 派遣( Dispatch ):可以是按顺序派遣,也可以是乱序派遣
- 发射( Issue ):可以是按顺序发射, 也可以是乱序发射。
在处理器设计中,派遣和发射是两个时常被混用的定义。简单处理器中,都是一个概念。都是表示指令经过译码之后,被派发到不同的运算单元执行的过程。
在一些较高端的超标量处理器核中,流水线级数甚多,派遣和发射便可能有了不同的含义。
派遣(dispatch):往往表示指令经过译码之后被派发到不同的运算单元的等待队列中的过程,
发射(Issue):往往表示指令从运算单元的等待队列中(解决了数据依赖性之后)发射到运算单元开始执行的过程。
——其中,等待队列为Issue queue,作用为待指令的相关性解除之后从发射队列中发射出来时读取通用寄存器组,然后送给运算单元开始计算。
在高性能处理器中为,顺序dispatch,乱序Issue,乱序执行,乱序写回(写回到ROB或者物理寄存器)。
11. 关于分支指令的流程
对于带条件的分支跳转指令:
1.在取指阶段进行BPU的预测
2.根据预测结果进行pc的计算
3.在EX阶段进行计算条件是否成立
4.将计算结果与之前的预测比对,如果错误则进行流水线冲刷(Pipeline flush),冲刷掉预测取值(Speculative Fetch)的指令,重新进行跳转
——流水线越深,冲刷的越多,损失越大