Skip to content

一. 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 修改寄存器内容

t 执行一条机器指令

d 查看内存中内容

e 改写内存中内容

a 以汇编指令的格式在内存中写入机器指令

u 将内存中机器指令翻译成汇编指令