
简介这份PDF文档是Intel 8086微处理器的官方技术手册1990年9月版Order Number 231455-005面向学习微机原理、汇编语言与计算机体系结构的学生、嵌入式开发者及硬件工程师用于系统理解8086的架构、引脚定义与工作模式。资源包仅含1个PDF文件大小约629KB内容涵盖8086/8086-2/8086-1三种时钟频率版本5、8、10MHz的完整规格说明。手册详细给出CPU框图、40引脚功能描述、14个16位寄存器组、24种操作数寻址模式以及位、字节、字和块操作与二进制/十进制乘除运算等指令特性并讲解最小模式与最大模式下的总线接口、中断应答三态行为及MULTIBUS兼容性。已有630人学习下载适合作为查阅引脚时序、理解局部总线与多处理器配置的案头参考也可配合汇编实验对照使用。1. 一颗四十条腿的“老管家”8086 到底是什么如果你拆开过九十年代的老电脑或者翻过一本泛黄的硬件教材大概率会撞见一个名字——Intel 8086。它听起来像个型号编号其实是一颗微处理器也就是一台计算机的“大脑”。你可以把它想象成一位只有四十条腿的老管家腿就是引脚每一条腿负责一件事有的搬地址有的传数据有的负责喊“停一下我还没准备好”。这位管家在 1990 年前后非常活跃手册上印着订单号 231455-005说明它已经被反复修订过好几轮是一份相当成熟的工程文档。搞懂 8086 的意义不在于怀旧。今天你写的每一行高级语言代码背后那套“取指令、译码、执行”的基本节奏几乎都能在这颗芯片上找到最朴素的影子。它把 1MB 内存切成若干段、用 14 个 16 位寄存器干活、支持 24 种寻址方式这些设计后来被无数处理器继承和改写。换句话说8086 手册像一本“计算机原理的原始说明书”读懂了它再看现代 CPU 的框图就不会觉得全是黑匣子。这份 PDF 手册的价值就在于它把引脚定义、总线时序、最小模式和最大模式这些硬骨头一条一条摆在你面前。2. 为什么一颗芯片要分“最小”和“最大”两种活法2.1 单干还是组队MN/MX 引脚决定命运8086 有一个很特别的引脚叫 MN/MX第 33 号脚。它的高低电平直接决定这颗芯片是“单干”还是“组队”。接高电平芯片进入最小模式意思是系统里基本只有它一个主控地址锁存、数据收发这些杂活它自己顺手就干了接低电平进入最大模式它会退居幕后把总线控制权交给外部的总线控制器自己专心做运算和指令调度。打个比方最小模式像一个小作坊老板既管进货又管出货什么都要亲自盯最大模式像一家有专职调度员的中型工厂老板只负责生产决策物流交给专门的部门。手册里把这两种模式下的引脚功能分开描述同一个引脚在不同模式下可能叫不同的名字、干不同的活这是初学者最容易翻车的地方。比如第 28 脚最小模式下叫 M/IO用来区分这次访问的是内存还是 I/O 端口最大模式下它变成 S2成为一组三位状态码中的一位由外部控制器去解码。为什么要有这种设计因为 8086 定位是“高性能 16 位 CPU”它既要能塞进成本敏感的单板系统也要能撑起带协处理器、多主控的总线架构。用一根引脚切换两种人格省去了做两个型号的麻烦也让同一份指令集能覆盖从简单到复杂的整条产品线。手册里明确写了最大模式下 S2、S1、S0 这三位状态在 T4、T1、T2 期间有效T3 或等待周期时回到全 1 的被动状态外部控制器就是靠这组编码判断当前是读内存、写 I/O 还是中断应答。2.2 地址和数据挤在一条路上分时复用的取舍翻开引脚表你会看到 AD15–AD0 这样的名字意思是这十六根线既当地址总线又当数据总线。同一根线在时钟周期的 T1 阶段传地址到了 T2、T3、T4 阶段改传数据。这就像一条单车道隧道早上运货、下午运人靠时间表错开而不是修两条路。这么做是为了省引脚。四十个脚的封装里要放下 20 位地址、16 位数据、再加上控制信号如果地址和数据各走各的线脚数根本不够。分时复用的代价是外部必须加锁存器在 T1 结束时把地址“扣”下来存住否则地址一消失后面的内存芯片就不知道该往哪儿写。手册里专门提到 ALE 信号也就是地址锁存使能它在 T1 期间给出一个高脉冲告诉外部锁存器“现在这条线上的值是地址赶紧记下来”。这里有个细节值得注意A0 这根线在传输低字节时有特殊含义它和 BHE 配合决定这一次是传整字、高字节还是低字节。手册用一张小表说得很清楚BHE 和 A0 都是低电平时传整个字BHE 高 A0 低时传低字节反过来传高字节两个都高就什么都不传。这种用两根线编码四种传输宽度的做法在当年是很精巧的设计但也意味着写底层驱动的人必须把这张表背熟否则就会出现“明明写了数据却读不回来”的玄学问题。2.3 取指令和执行可以同时进行六字节队列的巧思8086 内部被分成两个单元总线接口单元 BIU 和执行单元 EU。BIU 负责跟内存打交道取指令、取操作数、算物理地址EU 负责译码和执行。关键在于这两个单元是异步工作的BIU 可以趁 EU 还在算上一条指令的时候提前把后面的指令字节抓进一个六字节的队列里。这个队列是先进先出结构只要队列里还有至少两个字节的空位BIU 就会尝试发起一次字读取把内存总线尽量占满。手册里说得很直白这样做是为了减少内存总线上的“死时间”。你可以把它理解成厨师和帮厨的分工帮厨提前把下一道菜的原料切好放在案板上厨师手一空就能直接下锅不用每次现切。遇到跳转指令时队列会被清空这时候预取的指令作废但整体上这种预取机制让总线利用率明显提升。队列状态还能通过 QS1、QS0 两个引脚输出到外部告诉外面的逻辑当前队列在干什么没操作、取到操作码第一个字节、队列被清空、还是取到后续字节。这个设计在当年是为了方便外接调试设备或者协处理器做指令跟踪今天看来它就是“指令流水线”这个概念在十六位时代的雏形。理解了这个队列你再看现代 CPU 的预取器和分支预测就不会觉得那是凭空冒出来的黑科技。3. 1MB 内存怎么塞进十六位寄存器分段寻址的门道3.1 段寄存器加偏移用两个十六位拼出二十位8086 的寄存器是十六位的最大只能表示 65535但它的地址总线有二十根能寻址 1MB也就是 1048576 个字节。十六位装不下二十位的地址怎么办答案是分段。芯片里有四个段寄存器代码段 CS、数据段 DS、堆栈段 SS、附加段 ES。每个段寄存器里存一个十六位的“段基址”实际访问内存时把段基址左移四位再加上一个十六位的偏移量拼出二十位的物理地址。通俗地说段基址就像一条街的街口门牌偏移量就是街口往里走多少户。左移四位相当于把街口地址乘以 16所以每个段都从 16 字节的边界开始段与段之间可以重叠也可以紧挨着。手册里明确写了内存被逻辑上分成代码、数据、附加数据和堆栈四种段每段最大 64KB段基址落在 16 字节边界上。这种设计的好处是程序可以重定位换一个段基址整段代码就搬到了内存别处而指令里的偏移量不用改。代价是寻址方式变复杂了。同一个偏移量配上不同的段寄存器指向的物理地址完全不同。手册里有一张表说明什么时候自动选哪个段寄存器取指令用 CS堆栈操作用 SS一般数据用 DS字符串操作可以用 ES。初学者如果没搞清楚默认段规则很容易出现“明明变量地址算对了读出来却是乱码”的情况这几乎是每个学 8086 汇编的人都踩过的坑。3.2 字可以放在奇数地址小端序的原始约定手册里有一句话很关键字操作数可以放在偶数地址也可以放在奇数地址不受偶数边界限制。很多十六位机器要求字必须对齐到偶数地址8086 不强制。代价是访问奇数地址的字时总线需要做两次内存读性能会打折但灵活性更高。同时手册明确了字节顺序一个字里低有效字节存在低地址高有效字节存在下一个高地址。这就是后来被称为“小端序”的约定。举个例子数值 0x1234 存在地址 100 和 101 时地址 100 放 0x34地址 101 放 0x12。这个约定今天在 x86 系列里一直沿用而很多其他架构选择反过来存。搞混端序是跨平台数据交换时的经典翻车点一份二进制文件在这台机器上读出来是 4660换台机器可能就变成 13330根源往往就在这里。3.3 二十四种寻址模式不是炫技是给编译器留活路手册里列了 24 种操作数寻址模式听起来吓人其实可以归成几类立即数、寄存器直接、直接地址、寄存器间接、带偏移的间接、基址加变址等等。为什么需要这么多因为高级语言编译出来的代码访问变量的方式五花八门全局变量要直接地址数组元素要基址加变址局部变量要栈指针加偏移指针解引用要寄存器间接。如果寻址模式太少编译器就得插入大量额外指令来拼地址代码又长又慢。8086 的设计目标之一就是“为强大的汇编语言和高效的高级语言而设计”这 24 种模式就是兑现这个承诺的手段。比如基址加变址再加位移这种组合一条指令就能完成“数组首地址加索引乘元素大小加结构体偏移”的地址计算不用拆成好几步。对写编译器的人来说这是实打实的便利对学汇编的人来说这是需要花时间消化的重点。手册把这些模式逐一列出配合指令集说明基本上就是一本“地址怎么算”的查漏补缺指南。4. 易混概念辨析别把这几组词搅在一起4.1 最小模式与最大模式不是性能高低是总线归谁管易混点在于很多人以为最大模式就是“更强更快”。实际上两种模式跑的是同一颗芯片、同一套指令集运算性能没有差别。区别只在总线控制权最小模式下 8086 自己产生读写、中断应答等控制信号最大模式下这些信号由外部总线控制器根据 S2、S1、S0 状态码生成。为什么容易混因为“最大”这个词听起来像升级版。怎么区分看系统里有没有独立的总线控制器有就是最大模式没有就是最小模式。手册里把两种模式下的引脚功能分开列同一个引脚号在不同模式下名字不同对照着看就不会搞错。4.2 物理地址与逻辑地址一个是门牌一个是“街口加门牌”逻辑地址是“段基址:偏移量”这种写法物理地址是二十位的实际内存编号。初学者常把段寄存器的值直接当成物理地址的高十六位忘了还要左移四位。为什么容易混因为两者都是数字看起来差不多。怎么区分记住公式物理地址等于段基址乘以 16 再加偏移量。手册里说内存从 00000H 到 FFFFFH这个范围就是物理地址空间而程序里写的段和偏移是逻辑层面的。调试时如果发现算出来的地址差了一个数量级多半是漏了那个左移。4.3 可屏蔽中断与非屏蔽中断一个能关一个关不掉INTR 是普通中断请求可以通过软件清中断允许标志位来屏蔽NMI 是非屏蔽中断边沿触发软件关不掉一来就跳转到类型 2 中断。为什么容易混两个都叫中断引脚挨着功能描述也相似。怎么区分看能不能被“关掉”。INTR 是电平触发在每个指令最后一个时钟周期采样可以被标志位挡住NMI 是低到高跳变触发当前指令执行完就响应不受标志位影响。手册里特别注明 NMI 在内部是同步的但触发方式是边沿这一点和 INTR 的电平触发形成对照。4.4 保持请求与总线请求两套“让出总线”的暗号HOLD/HLDA 是一对RQ/GT 是另一对都是让别的设备临时接管总线。HOLD 是单向请求加应答适合简单的 DMA 场景RQ/GT 是双向脉冲握手优先级分两级适合多主控系统。为什么容易混目的都是“我要用总线你先让让”。怎么区分看握手方式和优先级。HOLD 拉高后等 HLDA 拉高中间没有脉冲编码RQ/GT 用三个一时钟宽的脉冲完成请求、授权、释放而且 RQ/GT0 优先级高于 RQ/GT1。手册里把释放总线的条件列了四条比如当前周期不是奇地址字的低字节、不是中断应答的第一个周期、没有锁定指令在执行这些细节决定了请求能不能被及时响应。5. 什么时候该翻这份手册什么时候别硬啃这份 8086 手册最适合的场景是你需要搞清楚一颗经典十六位处理器的引脚级行为。比如你在做老设备维护面对一块带 8086 的板子要判断某个信号该不该有脉冲或者你在学计算机体系结构想看看“总线分时复用”“指令预取”“分段寻址”这些概念在真实芯片上是怎么落地的再或者你在写一个简单的汇编器或模拟器需要确认某条指令的寻址模式编码和状态码含义。手册里的引脚表、状态编码表、内存组织说明都是可以直接对照的硬资料。但如果你只是想快速了解“CPU 是怎么工作的”这种通识问题直接啃这份文档会相当吃力。它是一份工程手册默认读者已经知道什么是时钟周期、什么是三态输出、什么是总线。里面大量篇幅在讲引脚在 T1、T2、T3、T4 各阶段的行为没有铺垫上来就是表格和时序描述。初学者如果从第一页硬读到最后一页很容易在引脚功能描述里迷失产生“每个字都认识但连起来不知道在说什么”的挫败感。我的建议是带着问题翻。先想清楚你要查什么是某个引脚在最大模式下的名字还是字操作数在奇数地址时的总线行为还是中断应答周期里 BHE 和 A0 的状态。带着具体问题去查对应的表和段落效率会高很多。手册里那些状态编码表比如 S2、S1、S0 的八种组合或者 QS1、QS0 的四种队列状态单独看很枯燥但一旦你手上有一个具体的时序场景它们就变成了查得到的答案。还有一个边界要注意这份文档描述的是芯片本身的行为不包含外围电路设计、不包含指令集每条指令的详细编码、也不包含开发工具的使用方法。它是一份“芯片说明书”不是“系统设计教程”。如果你需要的是怎么把 8086 接上内存和外设这份手册只能给你引脚定义和时序要求具体的地址译码、总线缓冲、时钟电路还得另找资料。反过来如果你要确认某个控制信号在哪个时钟阶段有效、三态关闭发生在什么条件下这份手册就是最直接的依据。从那以后我每次碰到一个不熟悉的芯片手册都强制自己先翻到引脚描述和功能框图那几页把“这颗芯片对外承诺了什么”看一遍再决定要不要往下读时序细节。这个习惯帮我省下了不少在无关章节里打转的时间。希望这份 8086 手册也能帮到你让你在面对这颗四十条腿的老管家时不再觉得它是一团看不懂的引脚和表格。本文还有配套的精品资源点击获取