<?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%86%85%E5%AD%98%E8%AE%BF%E9%97%AE/</link>
        <description>Recent content in 内存访问 on 文艺技术笔记</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <copyright>文艺技术笔记 | 软件工程师文艺</copyright>
        <lastBuildDate>Sat, 13 Jun 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://wenyiblog.top/tags/%E5%86%85%E5%AD%98%E8%AE%BF%E9%97%AE/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>寻址方式终极指南：7 种寻址模式与性能分析</title>
        <link>https://wenyiblog.top/2026/06/asm-06-addressing-modes/</link>
        <pubDate>Sat, 13 Jun 2026 10:00:00 +0800</pubDate>
        
        <guid>https://wenyiblog.top/2026/06/asm-06-addressing-modes/</guid>
        <description>&lt;h2 id=&#34;寻址的本质&#34;&gt;&lt;a href=&#34;#%e5%af%bb%e5%9d%80%e7%9a%84%e6%9c%ac%e8%b4%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;寻址的本质
&lt;/h2&gt;&lt;p&gt;CPU 执行指令时，需要找到操作数的位置。&lt;strong&gt;寻址方式&lt;/strong&gt;就是告诉 CPU 去哪里找数据。&lt;/p&gt;
&lt;h2 id=&#34;立即数寻址&#34;&gt;&lt;a href=&#34;#%e7%ab%8b%e5%8d%b3%e6%95%b0%e5%af%bb%e5%9d%80&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;立即数寻址
&lt;/h2&gt;&lt;p&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;MOV AX, 1234h
&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;ul&gt;
&lt;li&gt;最快，无需访问内存&lt;/li&gt;
&lt;li&gt;数据随指令一起从代码段取出&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;寄存器寻址&#34;&gt;&lt;a href=&#34;#%e5%af%84%e5%ad%98%e5%99%a8%e5%af%bb%e5%9d%80&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;寄存器寻址
&lt;/h2&gt;&lt;p&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;MOV AX, BX
&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;ul&gt;
&lt;li&gt;极快，寄存器在 CPU 内部&lt;/li&gt;
&lt;li&gt;无内存访问延迟&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;直接寻址&#34;&gt;&lt;a href=&#34;#%e7%9b%b4%e6%8e%a5%e5%af%bb%e5%9d%80&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;直接寻址
&lt;/h2&gt;&lt;p&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;MOV AX, [2000h]
&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;ul&gt;
&lt;li&gt;访问 &lt;code&gt;DS:2000h&lt;/code&gt; 处的数据&lt;/li&gt;
&lt;li&gt;地址在编译时确定&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;寄存器间接寻址&#34;&gt;&lt;a href=&#34;#%e5%af%84%e5%ad%98%e5%99%a8%e9%97%b4%e6%8e%a5%e5%af%bb%e5%9d%80&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;寄存器间接寻址
&lt;/h2&gt;&lt;p&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;MOV AX, [BX]
&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;ul&gt;
&lt;li&gt;地址 = &lt;code&gt;DS:BX&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;适合遍历数组&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;基址寻址&#34;&gt;&lt;a href=&#34;#%e5%9f%ba%e5%9d%80%e5%af%bb%e5%9d%80&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;基址寻址
&lt;/h2&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;MOV AX, [BP+10h]
&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;ul&gt;
&lt;li&gt;地址 = &lt;code&gt;SS:BP + 10h&lt;/code&gt;（注意用 SS 段）&lt;/li&gt;
&lt;li&gt;常用于访问局部变量&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;变址寻址&#34;&gt;&lt;a href=&#34;#%e5%8f%98%e5%9d%80%e5%af%bb%e5%9d%80&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;变址寻址
&lt;/h2&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;MOV AX, [SI+50h]
&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;ul&gt;
&lt;li&gt;地址 = &lt;code&gt;DS:SI + 50h&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;适合数组元素访问&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;基址变址寻址&#34;&gt;&lt;a href=&#34;#%e5%9f%ba%e5%9d%80%e5%8f%98%e5%9d%80%e5%af%bb%e5%9d%80&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;基址变址寻址
&lt;/h2&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;MOV AX, [BX+SI+100h]
&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;ul&gt;
&lt;li&gt;地址 = &lt;code&gt;DS:BX + SI + 100h&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;最灵活，适合二维数组或结构体成员访问&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;性能对比&#34;&gt;&lt;a href=&#34;#%e6%80%a7%e8%83%bd%e5%af%b9%e6%af%94&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;性能对比
&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:center&#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;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;0&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;⚡ 最快&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;寄存器&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;0&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;⚡ 最快&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;直接&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;1&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;较快&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;间接&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;1&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;中等&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;基址变址&lt;/td&gt;
&lt;td style=&#34;text-align:center&#34;&gt;1&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;较慢（计算地址）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;选择合适的寻址方式，是汇编性能优化的第一步。简单变量用直接寻址，数组用变址，结构体用基址变址。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;下一篇：《堆栈操作深度解析：PUSH/POP 与函数调用的秘密》&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        
    </channel>
</rss>
