<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>寄存器 on 文艺技术笔记</title>
        <link>https://wenyiblog.top/tags/%E5%AF%84%E5%AD%98%E5%99%A8/</link>
        <description>Recent content in 寄存器 on 文艺技术笔记</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <copyright>文艺技术笔记 | 软件工程师文艺</copyright>
        <lastBuildDate>Sat, 13 Jun 2026 09:00:00 +0800</lastBuildDate><atom:link href="https://wenyiblog.top/tags/%E5%AF%84%E5%AD%98%E5%99%A8/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>微型计算机系统结构速览：寄存器、总线与内存</title>
        <link>https://wenyiblog.top/2026/06/asm-02-computer-architecture/</link>
        <pubDate>Sat, 13 Jun 2026 09:00:00 +0800</pubDate>
        
        <guid>https://wenyiblog.top/2026/06/asm-02-computer-architecture/</guid>
        <description>&lt;h2 id=&#34;cpu-的内部视角&#34;&gt;&lt;a href=&#34;#cpu-%e7%9a%84%e5%86%85%e9%83%a8%e8%a7%86%e8%a7%92&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;CPU 的内部视角
&lt;/h2&gt;&lt;p&gt;汇编语言的操作对象不是变量，而是&lt;strong&gt;寄存器&lt;/strong&gt;和&lt;strong&gt;内存地址&lt;/strong&gt;。理解 8086 的内部结构，是写好汇编的前提。&lt;/p&gt;
&lt;h2 id=&#34;8086-的四大通用寄存器&#34;&gt;&lt;a href=&#34;#8086-%e7%9a%84%e5%9b%9b%e5%a4%a7%e9%80%9a%e7%94%a8%e5%af%84%e5%ad%98%e5%99%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;8086 的四大通用寄存器
&lt;/h2&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;寄存器&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;全称&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;主要用途&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;拆分为高/低 8 位&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;AX&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Accumulator&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;算术运算、I/O 操作、中断调用&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;AH / AL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;BX&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Base&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;基址寻址、内存指针&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;BH / BL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;CX&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Count&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;循环计数器、位移量&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;CH / CL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;DX&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Data&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;I/O 端口地址、乘除法高位&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;DH / DL&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;为什么要拆分？&lt;/strong&gt;
因为 8086 支持 8 位和 16 位操作。你可以单独操作 &lt;code&gt;AL&lt;/code&gt; 而不影响 &lt;code&gt;AH&lt;/code&gt;，这在处理 ASCII 字符时非常高效。&lt;/p&gt;
&lt;h2 id=&#34;段寄存器分段内存模型&#34;&gt;&lt;a href=&#34;#%e6%ae%b5%e5%af%84%e5%ad%98%e5%99%a8%e5%88%86%e6%ae%b5%e5%86%85%e5%ad%98%e6%a8%a1%e5%9e%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;段寄存器：分段内存模型
&lt;/h2&gt;&lt;p&gt;8086 只有 20 位地址总线，但内部寄存器只有 16 位（最大 64KB）。如何访问 1MB 内存？&lt;/p&gt;
&lt;p&gt;答案是&lt;strong&gt;段寄存器 + 偏移地址&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;物理地址 = 段地址 × 16 + 偏移地址
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th style=&#34;text-align:left&#34;&gt;段寄存器&lt;/th&gt;
&lt;th style=&#34;text-align:left&#34;&gt;用途&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;CS&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;代码段（Code Segment）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;DS&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;数据段（Data Segment）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;SS&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;堆栈段（Stack Segment）&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;ES&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;附加段（Extra Segment）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;标志寄存器-flags&#34;&gt;&lt;a href=&#34;#%e6%a0%87%e5%bf%97%e5%af%84%e5%ad%98%e5%99%a8-flags&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;标志寄存器 FLAGS
&lt;/h2&gt;&lt;p&gt;CPU 执行每条指令后，会更新 FLAGS 中的状态位：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ZF (Zero Flag)&lt;/strong&gt;：结果为 0 则置 1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CF (Carry Flag)&lt;/strong&gt;：进位/借位标志&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SF (Sign Flag)&lt;/strong&gt;：符号标志（最高位）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OF (Overflow Flag)&lt;/strong&gt;：溢出标志&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这些标志位决定了 &lt;code&gt;JE&lt;/code&gt;（等于则跳转）、&lt;code&gt;JNE&lt;/code&gt;（不等于则跳转）等条件跳转指令的走向。&lt;/p&gt;
&lt;h2 id=&#34;总线系统&#34;&gt;&lt;a href=&#34;#%e6%80%bb%e7%ba%bf%e7%b3%bb%e7%bb%9f&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;总线系统
&lt;/h2&gt;&lt;p&gt;CPU 通过总线与外部通信：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;地址总线&lt;/strong&gt;（20 位）：决定能访问多少内存（1MB）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据总线&lt;/strong&gt;（16 位）：决定一次能读写多少数据（2 字节）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;控制总线&lt;/strong&gt;：读写信号、中断请求、时钟同步&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;总结&#34;&gt;&lt;a href=&#34;#%e6%80%bb%e7%bb%93&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;总结
&lt;/h2&gt;&lt;p&gt;8086 的架构虽然古老，但现代 x86_64 依然保留了这些核心概念（寄存器、段、标志位）。理解了 8086，再看现代 CPU 就会觉得&amp;quot;万变不离其宗&amp;quot;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;下一篇：《汇编语言环境搭建：MASM/TASM/DOSBox 从零配置》&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        
    </channel>
</rss>
