X86系列CPU 注记(一)
本系列文章主要针对X86系列的CPU 知识作梳理,初步考虑整理8086和80386两款。主要参考书清华大学出版社 王爽的《汇编语言》以及周明德《unix系统下的80386》。
1. 8086的体系结构
8086 CPU由以下两大部分组成:
- 总线接口单元(BIU),包括:
- CS寄存器 - 16位代码段寄存器
- DS寄存器 - 16位数据段寄存器
- ES寄存器 - 16位扩展段寄存器
- SS寄存器 - 16位堆栈段寄存器
- IP寄存器 - 16位指令指针寄存器
- 20位的地址加法器
- 6字节的指令队列缓冲器
- 执行单元(EU),包括:
- 4个数据寄存器:AX、BX、CX、DX
- 2个地址指针寄存器:BP、SP
- 2个变址寄存器:SI、DI
- 标志寄存器FR
- 算数逻辑单元ALU
8086主要的引脚是:AD15 ~AD0:地址/数据总线、A19/S6~A16/S3:地址/状态信号,输出,三态。其中AD0~AD15和A16~A19组成CPU的20位地址总线。因此8086的地址由段基地址和段偏移组成。
2. 8086的主要常用指令
- 内存访问:
mov bx, 1000H mov ds, bx ;ds寄存器存放要访问数据的段地址 mov al, [0] ;1000H(1000:0)数据读到al中
- 堆栈操作:
push ax ;入栈:SS:SP指向栈顶,push操作的顺序是SP=SP-2,ax放入SS:SP指向的内存处 pop ax;出栈
- 循环处理:
mov cx, 11 ;cx寄存器决定循环的次数 s: add ax, ax loop s
- 转移指令
jmp short s ; 段内短转移 s: inc ax jcxz s ;如果(cx) = 0, 转移到标号处
- 子程序调用
ret ;用栈中的数据,修改IP的内容,实现近转移 retf;用栈中的数据,修改CS和IP的内容,实现远转移 call 标号; 将当前的IP或CS和IP入栈,转移
- 标志寄存器
- ZF:零位标志
- PF:奇偶标志
- SF:符号标志,正负
- CF:进位标志
- OF:溢出标志,有符号数计算式否溢出
- DF:方向标志,串处理中,判断SI、DI递增减、
- 内中断
8086 的内部中断主要有四类,对应中断源的码分别是:除法错误(0)、单步执行(1)、执行int0指令(4)、执行int指令。CPU通过中断向量表存储中断处理程序的入口。8086CPU 从地址0处存储中断向量表(0000:0000~0000:03E8)。
int 0; 处理步骤:
1. 取中断类型码
2. 标志寄存器入栈,IF= 0,TF=0
3. CS 、IP入栈
4. (IP) = (n*4),(CS) = (n*4+2)
- 端口
在X86体系中,与ARM不同,IO空间与内存空间是分开的,指令如下:
in al, 20h ; 从20h端口读入一个字节 out 20h, al ; 向20h端口写入一个字节
- 外中断:分为可屏蔽中断、不可屏蔽中断,具体操作与内中断类似
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)