惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
V
Visual Studio Blog
雷峰网
雷峰网
J
Java Code Geeks
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
MyScale Blog
MyScale Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
B
Blog RSS Feed
C
Check Point Blog
博客园 - Franky
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
D
Docker
IT之家
IT之家
博客园 - 聂微东
腾讯CDC
U
Unit 42
Microsoft Security Blog
Microsoft Security Blog
The Cloudflare Blog

faryou的博客

faryou的博客 faryou的博客 faryou的博客 faryou的博客 faryou的博客 faryou的博客-福建行小记 faryou的博客 faryou的博客 faryou的博客 faryou的博客 faryou的博客-夏令营小记 faryou的博客 faryou的博客 faryou的博客 faryou的博客-暑假阶段总结与展望 faryou的博客 faryou的博客 faryou的博客 faryou的博客 台风进行时 faryou的博客 limbo虚拟机初体验&安装Windows NT 4.0 faryou的博客 台风将来时 faryou的博客 faryou的博客 faryou的博客 faryou的博客 出租车上的对话 faryou的博客
【汇编基础教程】8086CPU工作原理
作者: faryou · 2025-10-05 · via faryou的博客

前言

我自学汇编到现在,可以说有一段时间了。最近学会了8086CPU的工作原理,连同CS、IP两个特殊的寄存器一起分享给大家~~

CS、IP寄存器介绍

要理解CS、IP(段地址、偏移地址),可以通过我下面这个形象的比方:
假设A和B只有两张能容纳三个数字的纸条,而他们需要进行四位数的交流。正常情况下,三个数字的纸条无法容纳四位数,但此时因为有两张纸条,所以A可以预先和B商量好暗号,从而达到通信目的。比如说,A要告诉B8086这个四位数,那么A可以先在一张纸条上写上086,另一张纸条上写800。由于B与A有约定,所以B可以通过800(段地址)*10+086(偏移地址)得到8086(物理地址)这一数据。
CS、IP就是这样两张纸条。在8086CPU中,这一约定可表示为物理地址=段地址*16+偏移地址。

8086CPU工作原理

前面我们了解了CS、IP,下面我带领大家来学习一下8086CPU的工作原理——
(以下过程的前提:CS中的内容为2000H,IP中的内容为0000H)
首先,在CS、IP发生改变后,CPU将CS、IP送入地址加法器,地址加法器利用物理地址=段地址*16+偏移地址求出物理地址。完成计算后,得到的结果数(此处为20000H)送入输入输出控制电路。
输入输出控制电路将得到的数值送入地址总线。
内存在得到这个物理地址后,将从内存20000H单元开始存放的机器指令(此处假设为B8 23 01,转化为汇编指令即mov ax,0123H)通过数据总线送回输入输出控制电路。
输入输出控制电路将命令送入指令缓冲器。此时指令缓冲器会对IP的值进行改变(IP中的数=IP中的原数+指令字节数,例如此处命令B8 23 01长3个字节,因此IP加上3改为0003H)。
IP完成变更后,执行控制器开始执行命令(此处命令B2 23 01将寄存器ax中的值改为0123H)。
完成以上操作后,CPU开始根据现有的CS、IP开始执行下一条指令。
由此可见,CS、IP指示CPU工作的地址,因此,我们需要熟练运用这一点。
最后补一个小知识:在8086CPU刚开始工作时,CS:IP=FFFFH:0000H,FFFF0H是CPU开机后执行的第一条指令。