<?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%9D%A1%E4%BB%B6%E8%B7%B3%E8%BD%AC/</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/%E6%9D%A1%E4%BB%B6%E8%B7%B3%E8%BD%AC/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>标志位详解：CF/ZF/SF/OF 如何影响程序流程</title>
        <link>https://wenyiblog.top/2026/06/asm-08-flags/</link>
        <pubDate>Sat, 13 Jun 2026 10:00:00 +0800</pubDate>
        
        <guid>https://wenyiblog.top/2026/06/asm-08-flags/</guid>
        <description>&lt;h2 id=&#34;flags-寄存器&#34;&gt;&lt;a href=&#34;#flags-%e5%af%84%e5%ad%98%e5%99%a8&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;FLAGS 寄存器
&lt;/h2&gt;&lt;p&gt;CPU 执行指令后，会自动更新 FLAGS 中的状态位。这些标志位决定了程序的&lt;strong&gt;分支走向&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;核心标志位&#34;&gt;&lt;a href=&#34;#%e6%a0%b8%e5%bf%83%e6%a0%87%e5%bf%97%e4%bd%8d&#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;何时置 1&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;ZF&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Zero&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;结果为 0&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;SUB AX, AX&lt;/code&gt; → ZF=1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;CF&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Carry&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;ADD AL, 0FFh&lt;/code&gt; → CF=1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;SF&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Sign&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;结果为负（最高位=1）&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;code&gt;SUB AL, 5&lt;/code&gt; → SF=1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;OF&lt;/strong&gt;&lt;/td&gt;
&lt;td style=&#34;text-align:left&#34;&gt;Overflow&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;ADD AL, 7Fh, 1&lt;/code&gt; → OF=1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;条件跳转指令&#34;&gt;&lt;a href=&#34;#%e6%9d%a1%e4%bb%b6%e8%b7%b3%e8%bd%ac%e6%8c%87%e4%bb%a4&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;条件跳转指令
&lt;/h2&gt;&lt;p&gt;跳转指令根据标志位决定走向：&lt;/p&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;JE/JZ&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;ZF=1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;JNE/JNZ&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;ZF=0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;JC&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=1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;JNC&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=0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;JG&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;ZF=0 且 SF=OF&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&#34;text-align:left&#34;&gt;&lt;strong&gt;JA&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=0 且 ZF=0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;实战判断两数大小&#34;&gt;&lt;a href=&#34;#%e5%ae%9e%e6%88%98%e5%88%a4%e6%96%ad%e4%b8%a4%e6%95%b0%e5%a4%a7%e5%b0%8f&#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;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&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, 100
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MOV BX, 200
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;CMP AX, BX      ; 实际执行 AX - BX
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;JG  GREATER     ; 如果 AX &amp;gt; BX（有符号）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;JL  LESS        ; 如果 AX &amp;lt; BX
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;JE  EQUAL       ; 如果相等
&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;h2 id=&#34;cf-与-of-的区别&#34;&gt;&lt;a href=&#34;#cf-%e4%b8%8e-of-%e7%9a%84%e5%8c%ba%e5%88%ab&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;CF 与 OF 的区别
&lt;/h2&gt;&lt;p&gt;这是初学者最容易混淆的点：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CF&lt;/strong&gt; 关注无符号数：&lt;code&gt;0FFh + 1 = 100h&lt;/code&gt; → 进位了，CF=1&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OF&lt;/strong&gt; 关注有符号数：&lt;code&gt;7Fh + 1 = 80h&lt;/code&gt; → 从 +127 变成 -128，溢出了，OF=1&lt;/li&gt;
&lt;/ul&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;标志位是汇编语言的&amp;quot;红绿灯&amp;quot;。掌握它们，你才能写出有逻辑判断的程序。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;下一篇：《汇编语言语法与程序格式：段定义、数据声明与伪指令》&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        
    </channel>
</rss>
