ARM 汇编比较指令:只修改标志位的底层逻辑与实战用法
前言初学 ARM 汇编时CMP、CMN、TST、TEQ 四条比较指令总会让人产生困惑指令内部完成了减法、加法、按位与、异或运算却不保存运算结果仅仅刷新 CPSR 程序状态寄存器的标志位。课堂上仅记住 “指令会影响标志位” 这一结论却不清楚这套设计的底层目的直到上机实操搭配条件跳转后才理清比较指令、标志位、条件指令三者不可分割的联动关系。本文从底层原理出发结合代码实例拆解四条比较指令的用法。一、核心底层逻辑汇编判断分为两步拆分设计高级语言中一条if语句即可完成 “数值对比 分支跳转”但 ARM 汇编将该逻辑拆分为两个独立环节分工明确比较指令负责运算留下判断依据CMP/CMN/TST/TEQ 执行内部运算后直接丢弃运算结果唯一输出是更新 CPSR 中的 N负标志、Z零标志、C进位 / 借位标志、V溢出标志。该指令不会修改任何通用寄存器也不会主动跳转程序仅把对比结果以标志位的形式保存下来。 单独书写比较指令没有任何实际效果标志位更新后无指令读取判断程序仍顺序执行对比操作等同于无效。条件指令读取标志执行分支动作所有带条件后缀的指令条件跳转 BXX、条件运算 MOVXX/ADDXX本身无法完成数值对比仅读取上一条指令刷新的标志位匹配预设条件后决定是否执行。 二者必须配对使用固定执行流程比较指令更新标志位 → 条件指令读取标志完成逻辑判断。二、四大比较指令运算原理与适用场景1. CMP 减法比较指令语法CMP Rn, operand底层运算Rn - operand完整更新 N/Z/C/V 全部标志位 核心用途判断两个数值大小区分有符号、无符号数对比是循环、区间判断最常用指令。 标志判断规则Z1两数相等C1无符号数 Rn ≥ operandN V有符号数 Rn ≥ operand。示例判断 R0 是否大于 100大于则跳转CMP R0, #100 BGT R0_Greater ; 有符号数大于跳转 BHI R0_Greater_U ; 无符号数大于跳转2. CMN 负数比较指令语法CMN Rn, operand底层运算Rn operand等价执行CMP Rn, #-operand核心用途快速判断寄存器数值是否等于某个负数无需手动取负运算。 标志判断规则Z1 时代表Rn -operand。示例判断 R0 是否等于 - 20CMN R0, #20 BEQ Equal_Neg20 ; R0 -20 跳转3. TST 位测试指令语法TST Rn, operand底层运算Rn operand仅依靠 Z 标志判断特定位状态 核心用途硬件寄存器、IO 引脚位检测快速查看某一 bit 是否置 1。 标志判断规则Z0掩码对应 bit 为 1Z1掩码对应 bit 全为 0。示例检测 R0 第 0 位是否为高电平TST R0, #0x01 BNE Bit0_Set ; bit01 跳转4. TEQ 等值测试指令语法TEQ Rn, operand底层运算Rn ^ operand仅更新 N、Z 标志不改动进位 C 核心用途单纯校验两数是否完全相等不会破坏进位标志适合连续等值判断场景。 标志判断规则Z1两数数值完全一致。示例判断 R0 与 R1 数值是否相同TEQ R0, R1 BEQ Value_Same三、实战拓展不止跳转所有指令均可加条件后缀标志位不仅服务于 B 系列跳转指令MOV、ADD、SUB 等常规运算指令都支持条件后缀可省去多余分支精简代码。 需求R0 大于 50 时将 R1 赋值为 100CMP R0, #50 MOVGT R1, #100 ; 满足GT有符号大于才执行赋值四、总结比较指令 “只改标志位、不存结果” 是硬件分层设计分离 “对比运算” 和 “逻辑判断”简化 CPU 指令架构四条指令各司其职CMP 判大小、CMN 判负数、TST 测比特、TEQ 判等值标志位是连接比较指令与条件指令的桥梁二者必须搭配使用单独书写比较指令无业务逻辑意义条件后缀适用于全部 ARM 基础指令灵活运用可简化分支代码提升汇编执行效率。

相关新闻

MRS/MSR 指令操作 xPSR 寄存器

MRS/MSR 指令操作 xPSR 寄存器

一、指令基础概述MRS、MSR 是 ARM Cortex‑M 内核中唯一能够直接读写程序状态寄存器 xPSR 的专用指令,普通 MOV/LDR/STR 等数据传送指令无法访问 xPSR,必须依靠这两条指令完成状态寄存器读写操作。1. MRS:读状态寄存器到通用寄存器指令格式&a…

2026/10/18 4:54:35 阅读更多 →
SSM+Java毕设攻略:在线学习平台从选型到答辩全流程解析

SSM+Java毕设攻略:在线学习平台从选型到答辩全流程解析

毕设季又到了,每年这个时候我都能收到一堆类似的咨询:老师,SSM是不是已经过时了?在线学习平台做了会不会太简单?源码和论文怎么才能对上号?今天我就用“ssmjava2026年毕设软件工程在线学习平台”这个题目&a…

2026/10/18 4:54:35 阅读更多 →
CentOS 8.2 手动编译 libssh 0.9.5 实战指南

CentOS 8.2 手动编译 libssh 0.9.5 实战指南

1. 为什么在 CentOS 8.2 上要手动编译 libssh 0.9.5CentOS 8.2 自带的 libssh 版本停留在 0.9.4,这个版本在部分场景下存在几个让人头疼的问题:一是对某些新版本 OpenSSL 的兼容性不够顺滑,二是部分 SSH 服务端在密钥交换阶段会触发一些边缘 …

2026/10/18 4:54:35 阅读更多 →

最新新闻

飞凌 OK3576-C 实测:Debian 13 上的八核 CPU、eMMC、GPU 和 NPU,实际表现怎么样?

飞凌 OK3576-C 实测:Debian 13 上的八核 CPU、eMMC、GPU 和 NPU,实际表现怎么样?

拿到一块嵌入式开发板,我一般会先确认系统能否正常启动和使用,再考虑跑分。芯片参数很好查,但装上 Debian 以后,软件包是否齐全、编译是不是够快、eMMC 读写会不会拖后腿,以及 GPU 和 NPU 能否真正运行程序&#xff0c…

2026/10/18 13:46:06 阅读更多 →
机器人会走路之后,行业开始争“大脑“

机器人会走路之后,行业开始争“大脑“

2026年,人形机器人的"身体"差距正在快速缩小。关节电机国产化率超过八成,整机价格两年下降七成,头部厂商的产线已经能以分钟级节拍下线产品。但一个让全行业尴尬的事实始终没有改变:机器人在标定好的工位上成功率可以接…

2026/10/18 13:46:06 阅读更多 →
我给 Gemini 4 和 DeepSeek 搞了套「末位淘汰」,AI 干活会更猛吗?(Day 3)

我给 Gemini 4 和 DeepSeek 搞了套「末位淘汰」,AI 干活会更猛吗?(Day 3)

昨天定下做 Beyond Compare 的免费开源版 OpenCompare 后,评论区又有朋友提了 FTP 远端对比等新需求,我已经让 AI 员工收进需求池交给 Gemini 4 评估。 今天本来该直接让 Gemini 4 和 DeepSeek 开工写核心代码。但动手前,我突然好奇一件事&am…

2026/10/18 13:46:06 阅读更多 →
Spring Cloud Gateway实战:路由、断言、过滤器与跨域配置全解析

Spring Cloud Gateway实战:路由、断言、过滤器与跨域配置全解析

微服务做久了,几乎谁都绕不开这两个词:Spring Boot 和 Spring Cloud。我经常在面试里碰到候选人张口就能背“Spring Boot是基础框架,Spring Cloud是微服务全家桶”,但真让他落地一个服务网关的时候,却连路由怎么写、依…

2026/10/18 13:46:06 阅读更多 →
计算机组成原理|数据与文字的表示方法

计算机组成原理|数据与文字的表示方法

前言 在计算机硬件体系当中,所有信息都不能以我们人类熟悉的十进制数字、汉字、符号直接存在硬件里面。不管是数字计算、文本信息,最后全部要转换成为二进制比特串。第二章作为整本书承上启下的关键章节,一边衔接第一章计算机系统概述的硬件基…

2026/10/18 13:46:06 阅读更多 →
MySQL 定时 DDL 导致 mysqldump 备份失败:场景模拟、排查与优化建议

MySQL 定时 DDL 导致 mysqldump 备份失败:场景模拟、排查与优化建议

1. 问题背景生产环境中,MySQL 数据库每天凌晨 2 点执行定时 DDL 操作(如新增索引、修改表结构),随后触发 mysqldump 逻辑备份任务,但备份经常失败。本文通过模拟该场景,分析失败根因,并给出可落…

2026/10/18 13:45:06 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →