1、概述
- 一个CPU由运算器、控制器、寄存器等器件构成,这些总线靠内部总线相连。
- 内部总线实现CPU内部各个器件之间的联系
- 外部总线实现CPU和主板上其他器件的联系
- 运算器进行信息处理
- 寄存器进行信息储存
- 控制器控制各种器件进行工作
- 内部总线连接各种器件,在它们之间进行数据的传递
- 不同CPU,寄存器的个数、结构是不相同的。
- 8086CPU有14个寄存器,AX BX CX DX SI DI SP BP IP CS SS DS ES PSW
2、通用寄存器
- AX BX CX DX这四个寄存器通常用来存放一般性的数据,被称为通用寄存器
- 不同CPU的通用寄存器的大小不一样,有8位,16位等等
- 8086CPU的寄存器可以都是16位,为了兼容8位的寄存器,这些寄存器可以分为独立使用的8位寄存器来使用
- AX可分为 AH AL
- BX可分为 BH BL
- CX可分为 CH CL
- DX可分为 DH DL
- 下例是16位寄存器保存2000
3、汇编指令
- 不区分大小写,mov 和 MOV,ax 和 AX一样
MOV AX,18 解释:AX = 18 MOV AH,78 解释:AH = 78 ADD AX,8 解释:AX = AX + 8 MOV AX,BX 解释:AX = BX ADD AX,BX 解释:AX = AX + BX
进位问题
例子1
MOV AX,8226H MOV BX,8226H ADD AX,BX AX BX都是16位寄存器,此时AX的值是多少
8226H + 8226H 1044CH,但是寄存器只能放16位,AX的值是044CH
例子2
MOV AX,00C5H ADD AL,93H 此时AX的值是多少
AL原始是C5H,加上93H,等于158H,但是AL只是8位寄存器,最高位1会丢失(CPU并没有真的丢弃这个值)
4、地址加法器
- 所有内存单元构成的存储空间是一个一维的线性空间,每个内存单元在这个空间中都有一个唯一的地址,这个唯一的地址成为物理地址
- 8086CPU是16位结构的CPU,表示
- 运算器一次最多可以处理16位数据
- 寄存器的最大宽度为16位
- 寄存器和运算器之间的通路为16位
- 能一次性处理、传输、暂时储存16位的地址
- 但是8086CPU有20位地址总线,似乎多余了,内部只能送出16位地址,寻址能力只有64KB,但是实际有1M的寻址能力。
- 8086CPU在内部用两个16位地址合成形成一个20位物理地址
- 两个16位寄存器,一个段地址、另一个偏移地址
- 段地址和偏移地址通过内部总线送入一个地址加法器的部件,合成一个20位的物理地址

- 地址加法器采用物理地址=段地址x16+偏移地址
- 8086CPU要访问地址123C8H(20位长度)的内存单元

- 对于一个16位的CPU,偏移地址范围0000H~FFFFH,如果段地址1000H,则该内存空间的地址范围
1000H 16 + 0000H ~ 1000H 16 + FFFFH 10000H ~ 1FFFFH 总共2^16=65536=64KB个内存单元
段寄存器CS IP
- 8086CPU有4个段寄存器:CS、DS、SS、ES
- CS和IP是8086CPU中最为关键的寄存器,它指出了当前要读取指令的地址,CS为代码段寄存器,IP是指针寄存器
- IP=IP+所读取指令的长度,从而指向下一条指令

- mov ax,0123H
CS: 2000 IP:0000,经过地址加法器变成地址20000,再通过20位地址总线,改地址上的数据B8 23 01进入数据总线,此时因为读取了3个字节,IP地址加3变为0003,再经过指令缓冲器再执行,这样AX寄存器的数据就变成了0123H
jmp修改CS:IP
- MOV指令不能用于设置CS:IP的值,CPU提供了jmp指令
jmp 2AE3:3 jmp 段地址:偏移地址
执行后CS=2AE3H IP=0003H,CPU将从2AE33H处读取指令
jmp 某一个合法寄存器:用于修改IP
jmp ax 执行前 ax=1000H CS=2000H IP=0003H 执行后 ax=1000H CS=2000H IP=1000H 类似于MOV IP,ax,但是代码上不能这么写
代码段
- 以下这段长度为10个字节的指令,放在123B0H-123B9H内存单元中,这段内存是用来存放代码的,是一个代码段,段地址123BH,长度为10个字节
mov ax,0000H (BB 00 00) add ax,0123H (05 23 01) mov bx,ax (8B D8) jmp bx (FF E3)



