一个典型的CPU,由运算器、控制器、寄存器等器件组成。这些器件靠内部总线相连。
- 运算器进行信息处理
- 寄存器进行信息存储
- 控制器控制各种器件进行工作
- 内部总线连接各种器件,在它们之间进行数据的传送。
寄存器是CPU中程序员可以用指令读写的部件。 8086 CPU有14个寄存器:AX, BX, CX, DX, SI, DI, SP, BP, IP, CS, SS, DS, ES, PSW。
2.1 通用寄存器
8086 CPU的所有寄存器都是16位的,可以存放2个字节。
AX, BX, CX, DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。
为了兼容性,8086 CPU的AX,BX,CX,DX这4个寄存器都可分为两个可独立使用的8位寄存器来用。
例如AX寄存器可以分为:AH和AL两个可独立使用的8位寄存器。
2.2 字在寄存器中的存储
出于兼容性的考虑,8086 CPU可以一次性处理以下两种尺寸的数据:
-
字节:记为byte,一个字节由8个bit组成,可以存在8位寄存器中。
-
字: 记为word,一个字由两个字节组成,分别称为这个字的高位字节和低位字节。
-
十进制一般不加前缀 后缀D
-
二进制: 前缀0b 后缀B
-
八进制: 前缀0 后缀Q
-
十六进制: 前缀0x 后缀H
2.3 几条汇编指令
-
mov ax,18 相当于ax = 18
-
mov ah,78 相当于ah = 78
-
add ax,8 相当于ax += 8
-
mov ax,bx 相当于ax = bx
-
add ax,bx 相当于ax += bx 寄存器数值相加溢出后,最高位舍弃。
-
对于al寄存器,如果数值相加溢出,依然会把最高位舍弃溢出的数值不会加到ah寄存器中,CPU认为al和ah是两个不相关的寄存器。
在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的。 mov ax,bl是错误的指令。
2.4 物理地址
所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们将这个唯一的地址称为物理地址。
CPU如何在内部形成这个物理地址?
2.5 16位结构的CPU
16位结构描述了一个CPU具有以下几方面的结构特性
- 运算器一次最多可以处理16位的数据
- 寄存器的最大宽度为16位
- 寄存器和运算器之间的通路为16位
对于16位cpu,能一次性处理、传输、暂时存储16位的地址。
2.6 8086CPU给出物理地址的方法
8086CPU有20位地址总线,可以传送20位地址,达到1MB寻址能力。8086CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址。相关部件的逻辑结构如图所示:
当8086CPU要读写内存时:
- CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址。
- 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件
- 地址加法器将两个16位的地址合成为一个20位的物理地址
- 地址加法器通过内部总线将20位物理地址送入输入输出控制电路
- 输入输出控制电路将20位物理地址送上地址总线
- 20位物理地址被地址总线传送到寄存器
地址加法器采用物理地址=段地址*16+偏移地址的方法,用段地址和偏移地址合成物理地址。
2.8 段的概念
内存单元地址小结:
CPU访问内存单元时,必须向内存提供内存单元的物理地址。8086CPU在内部用段地址和偏移地址移位相加的方法形成最终的物理地址。
CPU可以用不同地段地址和偏移地址形成同一个物理地址。
2.9 段寄存器
段地址在8086CPU的段寄存器中存放,8086CPU有4个段寄存器:CS, DS, SS, ES。当8086CPU要访问内存时,由这4个段寄存器提供内存单元的段地址。
2.10 CS和IP
CS和IP是8086CPU中两个最关键的寄存器,它们指示了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器。
8086机中,任意时刻,CPU将CS:IP指向的内容当作指令执行。CS*16+IP