学习汇编的时候,对cpu的认识有助于对汇编语言的理解,因为汇编语言功能可以直接对cpu中的寄存器进行操作。
以8086cpu为例子,8086cpu是16位的,那么16位cpu具有哪些性质呢?
- 运算器一次最多可以处理16位的数据
- 寄存器的最大宽度为16位
- 寄存器和运算器之间的通路为16位
1.cpu组成
- 控制部件单元(Control unit):主要是负责对指令,并且发出为完成每条指令所要执行的各个操作的控制信号。由指令寄存器 IR(Instruction Register)、指令译码器*ID(Instruction Decoder) 和 操作控制器* OC(Operation Controller)三个部件组成
- 算术逻辑控制单元ALU(Arithmetic Logic Unit):可以执行定点或浮点算术运算操作、移位操作以及逻辑操作,也可执行地址运算和转换。是组合逻辑电路。
- 地址控制:提供寻找功能。由程序计数器,地址寄存器构成
- 通用寄存器:可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果
4个数据寄存器(AX、BX、CX和DX)
2个变址和指针寄存器(SI和DI)
2个指针寄存器(SP和BP)
4个段寄存器(ES、CS、SS和DS)
1个指令指针寄存器(IP)
1个标志寄存器(Flags)
2.使用寄存器
汇编语言中使用的最多的就是寄存器,如何正确的使用寄存器,就要知道各种寄存器的作用
数据寄存器
AX 乘、除运算,字的输入输出,中间结果的缓存
AL 字节的乘、除运算,字节的输入输出,十进制算术运算
AH 字节的乘、除运算,存放中断的功能号
BX 存储器指针
CX 串操作、循环控制的计数器
CL 移位操作的计数器
DX 字的乘、除运算,间接的输入输出
变址寄存器
SI 存储器指针、串指令中的源操作数指针
DI 存储器指针、串指令中的目的操作数指针
BP 存储器指针、存取堆栈的指针
SP 堆栈的栈顶指针
IP 指令指针寄存器
段寄存器
ES 附加段寄存器
CS 代码段寄存器
SS 堆栈段寄存器
DS 数据段寄存器
3.cpu流水线技术
流水线技术的作用:提高cpu执行效率
流水线方式
串行方式
cpu并不是等一条指令完成后,再开始第二条指令。而是采用流水线,把cpu的工作分成个四个流程,当取指令完成后,不是等待而是取第二条指令。
采用流水线技术后,并没有加速单条指令的执行,每条指令的操作步骤一个也不能少,只是多条指令的不同操作步骤同时执行,因而从总体上看加快了指令流速度,缩短了程序执行时间
两种方式比较:
* 流水线方式:在t4时间内,完成了第1个指令,第二个指令完成3/4,第三个指令完成1/2,第四个指令完成1/4
* 串行方式 :在t4时间内,完成1条指令
在同一个时间内,流水线方式可以完成更多的指令,cpu的执行效率大大提高
4.cpu的乱序执行
是指CPU允许将多条指令不按程序规定的顺序分开发送给各相应电路单元处理的技术。这样将根据各电路单元的状态和各指令能否提前执行的具体情况分析后,将能提前执行的指令立即发送给相应电路
这好比请A、B、C三个名人为晚会题写横幅“春节联欢晚会”六个大字,每人各写两个字。如果这时在一张大纸上按顺序由A写好”春节”后再交给B写”联欢”,然后再由C写”晚会”,那么这样在A写的时候,B和C必须等待,而在B写的时候C仍然要等待而A已经没事了。
但如果采用三个人分别用三张纸同时写的做法, 那么B和C都不必须等待就可以同时各写各的了,甚至C和B还可以比A先写好也没关系(就象乱序执行),但当他们都写完后就必须重新在横幅上(自然可以由别人做,就象CPU中乱序执行后的重新排列单元)按”春节联欢晚会”的顺序排好才能挂出去。
处理器基本上会按照程序中书写的机器指令的顺序执行。按照书写顺序执行称为按序执行(In-Order )。按照书写顺序执行时,如果从内存读取数据的加载指令、除法运算指令等延迟(等待结果的时间)较长的指令后面紧跟着使用该指令结果的指令,就会陷入长时间的等待。尽管这种情况无可奈何,但有时,再下一条指令并不依赖于前面那条延迟较长的指令,只要有了操作数就能执行。
解码单元解码后的指令不是直接送到流水线,而是根据各自的指令种类,将解码后的指令送往各自的保留站中保存下来。如果操作数位于寄存器中,就把操作数从寄存器中读出来,和指令一起放入保留站。相反,如果操作数还在由前面的指令进行计算,那么就把那条指令的识别信息保存下来。
然后,保留站把操作数齐备、可执行的指令依次送到流水线进行运算。即使指令位于前面,如果操作数没准备好,也不能开始执行,所以保留站中的指令执行顺序与程序不一致(乱序)。另外,保留站会监视执行流水线输出的结果,如果产生的结果正好是等待中的指令的操作数,就将其读入,这样操作数齐备后,等待中的指令就可以执行了。