CPU 的内部视角
汇编语言的操作对象不是变量,而是寄存器和内存地址。理解 8086 的内部结构,是写好汇编的前提。
8086 的四大通用寄存器
| 寄存器 | 全称 | 主要用途 | 拆分为高/低 8 位 |
|---|---|---|---|
| AX | Accumulator | 算术运算、I/O 操作、中断调用 | AH / AL |
| BX | Base | 基址寻址、内存指针 | BH / BL |
| CX | Count | 循环计数器、位移量 | CH / CL |
| DX | Data | I/O 端口地址、乘除法高位 | DH / DL |
为什么要拆分?
因为 8086 支持 8 位和 16 位操作。你可以单独操作 AL 而不影响 AH,这在处理 ASCII 字符时非常高效。
段寄存器:分段内存模型
8086 只有 20 位地址总线,但内部寄存器只有 16 位(最大 64KB)。如何访问 1MB 内存?
答案是段寄存器 + 偏移地址:
|
|
| 段寄存器 | 用途 |
|---|---|
| CS | 代码段(Code Segment) |
| DS | 数据段(Data Segment) |
| SS | 堆栈段(Stack Segment) |
| ES | 附加段(Extra Segment) |
标志寄存器 FLAGS
CPU 执行每条指令后,会更新 FLAGS 中的状态位:
- ZF (Zero Flag):结果为 0 则置 1
- CF (Carry Flag):进位/借位标志
- SF (Sign Flag):符号标志(最高位)
- OF (Overflow Flag):溢出标志
这些标志位决定了 JE(等于则跳转)、JNE(不等于则跳转)等条件跳转指令的走向。
总线系统
CPU 通过总线与外部通信:
- 地址总线(20 位):决定能访问多少内存(1MB)
- 数据总线(16 位):决定一次能读写多少数据(2 字节)
- 控制总线:读写信号、中断请求、时钟同步
总结
8086 的架构虽然古老,但现代 x86_64 依然保留了这些核心概念(寄存器、段、标志位)。理解了 8086,再看现代 CPU 就会觉得"万变不离其宗"。
下一篇:《汇编语言环境搭建:MASM/TASM/DOSBox 从零配置》