8086 汇编入门
系列第 0 课 · 打地基 · 2026
汇编入门 · 交互式图解

8086 基础,
从零认识这颗传奇 CPU

8086 是现代 x86 家族的"老祖宗"。它结构简单、概念清晰,是理解计算机怎么跑程序的最佳起点。这一页带你认识它:寄存器 → 内存寻址 → 程序运行,为进阶 32 位 / 64 位打地基。

寄存器 内存寻址 程序运行
零基础可学可交互演示16 位 · 实模式
01
第 1 章 · SECTION 01

认识 8086

它是什么,为什么先学它
01 / 06

8086 是 Intel 在 1978 年推出的一颗 16 位 CPU。今天你电脑里的 Intel / AMD 处理器,全都是它的后代——它们同属一个"x86"家族,而 8086 正是这个家族名字的由来。

它之所以是绝佳的入门起点,是因为它足够简单:寄存器、内存、指令这些核心概念在 8086 上都以最朴素的形式呈现。学会它,再去看 32 位、64 位,不过是"升级版"而已。

先记住四个数

16 位(一次处理 16 位数据)· 20 位地址总线(能寻址 2²⁰ = 1MB)· 1MB 内存空间 · 1978 年诞生。其中"16 位寄存器却要寻址 1MB"这个矛盾,正是后面"段:偏移"寻址的由来。

读前 30 秒 · 先认识 4 个词

CPU 中央处理器

计算机的"大脑",负责一条条地执行指令。8086 就是一颗 CPU。

寄存器 REGISTER

CPU 内部超快的临时存储。计算前,要先把数据从内存搬进寄存器。

内存地址 0x…

内存里每个字节的"门牌号"。"0x"开头只是十六进制写法,当编号看即可。

汇编指令 INSTRUCTION

用接近人话的符号写的 CPU 指令,如 mov(移动)、add(加)。

02
第 2 章 · SECTION 02

寄存器

CPU 手边的"便签纸"
02 / 06

内存虽大,但 CPU 算数、比较时,得先把数据拿到寄存器里——它就在 CPU 内部,速度比内存快几个数量级。8086 的寄存器都是 16 位,按用途分四类:

类别寄存器用途
通用寄存器AX BX CX DX算数、暂存数据;每个都能拆成高 8 位 + 低 8 位(如 AX = AH + AL)
指针 / 变址SP BP SI DISP 指向栈顶,BP 作栈基址,SI / DI 用于串操作的源 / 目的
段寄存器CS DS SS ES配合偏移,拼出内存地址(第 3、4 章详解)
指令指针IP和 CS 组成 CS:IP,永远指向"下一条要执行的指令"
标志寄存器FLAGS记录运算结果的标志(如是否为 0、是否进位)

通用寄存器能"一拆为二"

四个通用寄存器 AX、BX、CX、DX,每个 16 位,都能拆成两个 8 位用:高 8 位叫 H(High),低 8 位叫 L(Low)。以 AX 为例:

AX 16 位
AH(高 8 位)AL(低 8 位)
同理:BX = BH + BL,CX = CH + CL,DX = DH + DL。想只动一个字节时用 H / L 很方便。
四个通用寄存器的小名

AX 累加器(算数常用)· BX 基址(常用来指向数据)· CX 计数器(循环常用)· DX 数据(乘除、I/O 常用)。名字里藏着它们的"老本行"。

03
第 3 章 · SECTION 03

内存寻址

段 × 16 + 偏移(招牌概念)
03 / 06

这里有个矛盾:8086 要能访问 1MB 内存,需要 20 位地址(2²⁰ = 1MB);可它的寄存器只有 16 位,最大只能表示 64KB。16 位怎么够到 1MB?

8086 的办法很巧妙:用两个 16 位数"拼"。一个叫"段"(segment),一个叫"偏移"(offset),计算时把段左移 4 位(即 × 16)再加偏移:

物理地址 = 段 × 16 + 偏移 ; 写法:段:偏移,例如 0x1000:0x2000 ; 物理地址 = 0x1000 × 0x10 + 0x2000 = 0x12000
FIG. 3.1 — 亲手算一算(改输入,实时出结果)
物理地址 = 段 × 16 + 偏移
0x
0x
0x1000 × 0x10 + 0x2000
= 0x12000
为什么要这么设计?

一举两得:① 用两个 16 位拼出了 20 位地址,够到 1MB;② 天然支持把内存按"段"来组织(下一章),便于管理。试着把段和偏移各改一改,你会发现同一个物理地址可以有多种"段:偏移"写法(如 0x1200:0x0000 也是 0x12000)。

04
第 4 章 · SECTION 04

逻辑分段

内存按"段"来组织
04 / 06

8086 把内存按用途分成几"段",每段由一个段寄存器"指着"。这样代码、数据、栈各归各位,井井有条。把鼠标移到各段上看详情:

段寄存器配对偏移
代码段 存放指令
CS CS : IP
数据段 存放数据
DS DS : BX/SI/DI
栈段 存放栈
SS SS : SP
附加段 备用数据段
ES ES : DI
最常用的两对

CS:IP 指向"下一条要执行的指令"(下一章的主角);SS:SP 指向"栈顶"。记住这两对,就掌握了 8086 程序运行的命脉。

05
第 5 章 · SECTION 05

程序如何运行

取指 → 执行 → IP 前进
05 / 06

CPU 跑程序,就是不断重复一个循环:从 CS:IP 指向的地方取出一条指令执行它IP 自动前进到下一条。CS:IP 就是程序运行的"指针",它指到哪,CPU 就执行到哪。

FIG. 5.1 — 单步执行下面这段程序(点“下一步”)
mov ax, 5 ; 把 5 放进 AX add ax, 3 ; AX 加 3 mov bx, ax ; 把 AX 的值复制给 BX
看懂了什么

每条指令执行完,IP 就自动指向下一条,寄存器的值随之改变。程序就是这样被 CPU"一条条"跑完的。跳转指令(如 jmp)则是直接改写 IP,让程序跳到别处执行。

学完自测 · QUIZ

自测一下

6 道题 · 点选项即看答案与解析

这 6 道题检验你对 8086 基础的掌握。 尚未作答

Q18086 是多少位的 CPU?
答案:16 位。8086 的寄存器和数据通路都是 16 位,但它的地址总线是 20 位(所以能寻址 1MB)。
Q2AX 寄存器可以拆成哪两个 8 位寄存器?
答案:AH 和 AL。H 是高 8 位(High),L 是低 8 位(Low)。BX、CX、DX 同理。
Q38086 中,物理地址的计算方式是?
答案:段 × 16 + 偏移。段左移 4 位(×16)再加偏移,用两个 16 位拼出 20 位地址。例如 0x1000:0x2000 → 0x12000。
Q4CS:IP 指向的是?
答案:下一条要执行的指令。CPU 不断从 CS:IP 取指令执行、IP 前进,程序就这样跑起来。栈顶是 SS:SP。
Q58086 能直接寻址 4GB 内存。
答案:错。8086 的地址总线是 20 位,最多寻址 1MB(2²⁰)。4GB 是后来 32 位 x86 的事。
Q6哪个段寄存器专门和栈顶指针 SP 配对?
答案:SS(栈段)。SS:SP 共同指向栈顶。CS 配 IP(代码)、DS 配 BX/SI/DI(数据)。
学完了,下一站

8086 是"实模式、直接用物理内存"。接下来计算机会进入"保护模式",引入虚拟内存、分页这些新概念——它们正是读懂现代程序和 DLL 的基础。