一. CPU工作原理
1. 通用寄存器
AX、BX、CX、DX 称为通用寄存器,用来存放一般性数据,8086CPU 所有寄存器都是16位,可以存放2个字节。8086上一代CPU中寄存器都是8位,为了保证兼容性,四个寄存器都可以分为两个独立的8位寄存器使用,例如AX可以分为AH和AL
2. 几条汇编指令
mov ax,18 18送入AX
mov ah,18 18送入AH
add ax,8 AX数值增加8
mov ax,bx BX数据送入到AX
add ax,bx AX与BX相加,结果存放在AX
3. 8086 得出物理地址的方法
地址加法器合成物理地址的方法:
物理地址 = 段地址*16 + 偏移地址
4. 段的概念
注意:
- 段地址*16一定是16的倍数,所以一个段的起始地址也一定是16的倍数
- 偏移地址为16位,16位的寻址能力为 64K,所以一个段的最大长度为 64K
5. 段寄存器
段寄存器是提供段地址的,8086CPU有4个段寄存器:CS(Code Segment)、DS(Data Segment)、SS(Stack Segment)、ES(Extra Segment)
当CPU访问内存时,这4个寄存器提供内存单元的段地址
CS 寄存器和 IP 寄存器
CS 和 IP 是8086CPU中最关键的寄存器,它们指示CPU当前要读取指令的地址。
CS 为代码段寄存器,IP 为指令指针寄存器
工作流程:
1. 从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器
2. IP = IP + 所读取指令的长度,从而指向下一条指令
3. 执行指令,转到步骤1,重复该过程
8086CPU开始工作时,CS=FFFFH,IP=0000H
即在8086PC机刚启动时,CPU从FFFF0H单元中读取指令执行
修改 CS 和 IP 的指令 - jmp
语法:jmp 段地址:偏移地址
仅修改IP的内容:jmp 某一合法寄存器
代码段
可以将长度为 N (N \(\leq\) 64KB) 的一组代码,存放在一组地址连续、起始地址为 16 的倍数的内存单元中,这段内存用于存放代码,从而定义了一个代码段
6. debug 的使用
r 查看、改变寄存器中内容
r 查看寄存器内容
r ax 1000 修改寄存器内容