<?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/%E6%8C%87%E4%BB%A4%E9%9B%86/</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/%E6%8C%87%E4%BB%A4%E9%9B%86/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>8086 指令系统全景图：数据传送、算术运算与逻辑操作</title>
        <link>https://wenyiblog.top/2026/06/asm-05-instruction-set/</link>
        <pubDate>Sat, 13 Jun 2026 09:00:00 +0800</pubDate>
        
        <guid>https://wenyiblog.top/2026/06/asm-05-instruction-set/</guid>
        <description>&lt;h2 id=&#34;8086-指令分类&#34;&gt;&lt;a href=&#34;#8086-%e6%8c%87%e4%bb%a4%e5%88%86%e7%b1%bb&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;8086 指令分类
&lt;/h2&gt;&lt;p&gt;8086 有一百多条指令，但常用的只有 30 多条。我们将它们分为三大类：&lt;/p&gt;
&lt;h2 id=&#34;一数据传送指令&#34;&gt;&lt;a href=&#34;#%e4%b8%80%e6%95%b0%e6%8d%ae%e4%bc%a0%e9%80%81%e6%8c%87%e4%bb%a4&#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: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;MOV&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;复制数据&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;MOV AX, BX&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;XCHG&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;交换数据&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;XCHG AL, BL&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;PUSH/POP&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;压栈/出栈&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;PUSH AX&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;LEA&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;加载有效地址&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;LEA BX, VAR&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;注意事项：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MOV&lt;/code&gt; 不能在两个内存单元之间直接传送&lt;/li&gt;
&lt;li&gt;段寄存器不能直接接收立即数&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PUSH/POP&lt;/code&gt; 操作单位是字（16 位）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;二算术运算指令&#34;&gt;&lt;a href=&#34;#%e4%ba%8c%e7%ae%97%e6%9c%af%e8%bf%90%e7%ae%97%e6%8c%87%e4%bb%a4&#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: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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;ADD&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;加法&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;CF, ZF, SF, OF&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;ADD AX, 5&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;SUB&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;减法&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;CF, ZF, SF, OF&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;SUB BX, CX&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;MUL&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;无符号乘法&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;CF, OF&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;MUL BL&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;DIV&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;无符号除法&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;异常&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;DIV CX&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;乘除法细节：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MUL BL&lt;/code&gt;：AL × BL → AX&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DIV CX&lt;/code&gt;：DX:AX ÷ CX → AX(商) DX(余数)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;三逻辑运算指令&#34;&gt;&lt;a href=&#34;#%e4%b8%89%e9%80%bb%e8%be%91%e8%bf%90%e7%ae%97%e6%8c%87%e4%bb%a4&#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: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;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;AND&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;按位与&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;AND AL, 0Fh&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;清零高 4 位&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;OR&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;按位或&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;OR AH, 80h&lt;/code&gt;&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;strong&gt;XOR&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;按位异或&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;XOR AX, AX&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;快速清零&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;NOT&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;按位取反&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;NOT AL&lt;/code&gt;&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;strong&gt;SHL/SHR&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;逻辑移位&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;SHL AL, 1&lt;/code&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;×2 或 ÷2&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;实战用-xor-清零&#34;&gt;&lt;a href=&#34;#%e5%ae%9e%e6%88%98%e7%94%a8-xor-%e6%b8%85%e9%9b%b6&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;实战：用 XOR 清零
&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;XOR AX, AX   ; 比 MOV AX, 0 更快，且只占 2 字节
&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;p&gt;这是汇编优化中的经典技巧，也是现代编译器常用的优化手段。&lt;/p&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;掌握这 30 条指令，你就能写出 80% 的汇编程序。剩下的指令多在特定场景下使用。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;下一篇：《寻址方式终极指南：7 种寻址模式与性能分析》&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        
    </channel>
</rss>
