最后一次更新:2016-03-23 12:40:34
学了cpu和内存的关系(存储器),接下来了解cpu的内部构建
cpu内部是由运算器、控制器、存储器(cpu工作原理)等器件构成
通过内部总线想和连接(和外部的三大总线对比)
运算器:cpu内部数据处理的场所
控制器:控制cpu内部各器件的运作
寄存器:信息存储
内部总线:连接各个器件,进行数据传送
cpu的主要部件是寄存器,寄存器是程序员进行可以用以读写操作的场所,也就是说程序员可以通过对寄存器的内容的改变来实现对cpu的控制
cpu可以细分成14种:
通用寄存器、指令指针寄存器、代码段寄存器、数据段寄存器、附加段寄存器、堆栈段寄存器0-待续
这节介绍通用寄存器:以AX为例
通用寄存器用以存储一般数据
8086为例,AX可以存放16位数据
8086以上的寄存器是8器是8位的,为了实现向下兼容,每一个16位寄存器又可以分为2个8位寄存器
- AX分为AH和AL
- BX分为BH和BL
- CX分为CH和CL
- DX分为DH和DL
可以看出8位寄存器可以存放1B数据,即一个字节
16位寄存器可以存放1W数据,即两个字节
字(2B)数据在AX存储时满足高高低低原则
比如,2000 = 4E20H
AH 存储 4EH 逻辑数为78
AL 存储 20H 逻辑数为32
通用寄存器相关汇编指令:
move ax,62627 先要62627(D)转化为16进制,覆盖掉ax中原有的数
mov ah,31H
add ax,ax
add al,bh
add al,6
内存地址逻辑上是一维的线性地址,讨论cpu如何给发出地址信息:
16位结构的cpu:
- 运算器一次最大的数据为16位
- 寄存器的最大宽度为16位
- 寄存器与运算器之间的通路(内部总线)为16为
8086cpu的地址总线宽度为20,有1MB的寻址能力,但是cpu一次最多能处理、存储、运算16位数据
如何解决这个矛盾,能让cpu只处理一次,就能找到宽度为20的内存物理地址
8086cpu通过两个16地址合成的方法形成一个20位物理地址
cpu需要处理读写内存是:发出内存发出地址信息
- cpu内部器件形成两个16地址信息,一个称为段地址,另一个称为偏移地址
- 段地址和偏移地址通过cpu的内部总线,送到地址加法器部件
- 地址加法器将16位地址合成一个20位地址
- 地址加法器通过内部总线将合成的20位地址送到输入输出控制电路
- 输入输出控制电路将20位物理地址送上地址总线
- 地址总线将20位物理地址送到内存(存储器 )
地址加法器采用的处理方法是:
物理地址 = 段地址*16+ 偏移地址
例子:
1230H(段地址)
+ = 12300H = 123C8H(物理地址)
(地址加法器) 00C8H
00C8H(偏移地址)
本质意义:cpu内部无法一次存储20位信息的数据,只能通过某种数学方法处理
物理地址 = 基础地址(段首地址) + 偏移地址
cpu将内存分成n个段,n个段中有m个最小存储单元
可以推出:
段首地址一定是16的倍数;
而cpu一次最大能处理16bit数据,也就是偏移地址最大位2^16-1,也就是说每个段的最大为64KB(2^16B FFFF)
可以根据需要,将地址连续、起始地址为16的倍数的一组内存单元定义为一个段
段寄存器:提供给地址加法器段地址的器件(存储段地址)
8086一共有4个段地址寄存器:CS、DS、SS、ES
CS和IP(固定搭配)
CS是代码段地址(段地址) IP是指令指针寄存器(偏移地址)
cpu通过CS+IP向内存发出地址信息,代码段中的指令通过数据总线,进入到cpu内部的指令缓存区,此时IP自动增加,IP指向下一条指令,指令缓冲区的指令执行
任意时刻,cpu将CS:IP指向的内容当作指令执行
代码段(<=64KB)
代码段寄存器相关汇编指令:
可以通过jmp改变CS、IP中的内容
jmp 2AE3:3 执行后:CS=2AE3H,IP=0003H,cpu将从2AE33H中读取指令
若只想修改IP中的内容
jmp ax 执行后,ax中的内容将会覆盖IP中的内容 ,含义上类似:mov IP ax