嵌入式cmp指令的判断标志位_ARM汇编指令集

article/2025/9/11 22:21:46

2ada66feb20c2840d142c653574abd41.png

ARM处理器的指令集可以分为跳转指令、数据处理指令、程序状态寄存器(PSR)处理指令、加载/存储指令、协处理器指令和异常产生指令6大指令。

一、跳转指令

跳转指令用于实现程序流程的跳转,在ARM程序中有以下两种方法可以实现程序流程的跳转。
Ⅰ.使用专门的跳转指令;

Ⅱ.直接向程序计数器PC写入跳转地址值,通过向程序计数器PC写入跳转地址值,可以实现在4GB的地址空间中的任意跳转,在跳转之前结合使用MOV LR,PC等类似指令,可以保存将来的返回地址值,从而实现在4GB连续的线性地址空间的子程序调用。

ARM指令集中的跳转指令可以完成从当前指令向前或向后的32MB的地址空间的跳转,包括以下4条指令:
1、B指令
B指令的格式为:

B{条件} 目标地址
B指令是最简单的跳转指令。一旦遇到一个B指令,ARM处理器将立即跳转到给定的目标地址,从那里继续执行。注意存储在跳转指令中的实际值是相对当前PC 值的一个偏移量,而不是一个绝对地址,它的值由汇编器来计算(参考寻址方式中的相对寻址)。它是24位有符号数,左移两位后有符号扩展为32 位,表示的有效偏移为26 位(前后32MB的地址空间)。以下指令:
B Label ;程序无条件跳转到标号Label处执行
CMP R1,#0 ;当CPSR寄存器中的Z条件码置位时,程序跳转到标号Label处执行
BEQ Label
2、BL指令
BL指令的格式为:

BL{条件} 目标地址
BL是另一个跳转指令,但跳转之前,会在寄存器R14中保存PC的当前内容,因此,可以通过将R14的内容重新加载到PC中,来返回到跳转指令之后的那个 指令处执行。该指令是实现子程序调用的一个基本但常用的手段。

以 下指令:

BL Label ;当程序无条件跳转到标号Label处执行时,同时将当前的 PC值保存到

;R14(LR)中
3、BLX指令
BLX指令的格式为:

BLX 目标地址
BLX指令从ARM指令集跳转到指令中所指定的目标地址,并将处理器的工作状态有ARM状态切换到Thumb状态,该指令同时将PC的当前内容保存到寄存 器R14中。因此,当子程序使用Thumb指令集,而调用者使用ARM指令集时,可以通过BLX指令实现子程序的调用和处理器工作状态的切换。同时,子程 序的返回可以通过将寄存器R14值复制到PC中来完成。
4、BX指令
BX指令的格式为:

BX{条件} 目标地址
BX指令跳转到指令中所指定的目标地址,目标地址处的指令既可以是ARM指令,也可以是Thumb指令。


二、数据处理指令

数据处理指令可分为数据传送指令、算术逻辑运算指令 和比较指令等。
数据传送指令用于在寄存器和存储器之间进行数据的双向传输;
算术逻辑运算指令完成常用的算术与逻辑的运算,该类指令不但将运算结果保存在目的寄存器中,同时更新CPSR中的相应条件标志位;
比较指令不保存运算结果,只更新CPSR中相应的条件标志位。
数据处理指令共以下16条。
1、MOV指令(传送)
MOV指令的格式为:

MOV{条件}{S} 目的寄存器,源操作数
MOV指令可完成从另一个寄存器、被移位的寄存器或将一个立即数加载到目的寄存器。其中S选项决定指令的操作是否影响CPSR中条件标志位的值,当没有S 时指令不更新CPSR中条件标志位的值。
指令示例:
MOV R1,R0 ;将寄存器R0的值传送到寄存器R1
MOV PC,R14 ;将寄存器R14的值传送到 PC,常用于子程序返回
MOV R1,R0,LSL#3 ;将寄存器R0的值左移3位后传送到R1
2、MVN指令(求反)
MVN指令的格式为:

MVN{条件}{S} 目的寄存器,源操作数
MVN指令可完成从另一个寄存器、被移位的寄存器、或将一个立即数加载到目的寄存器。与MOV指令不同之处是在传送之前按位被取反了,即把一个被取反的值 传送到目的寄存器中。其中S决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值。
指令示例:
MVN R0,#0 ;将 立即数0取反传送到寄存器R0中,完成后R0=-1
3、CMP指令(比较)
CMP指令的格式为:

CMP{条件} 操作数1,操作数2
CMP指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行比较,同时更新CPSR中条件标志位的值。该指令进行一次减法运算,但不存储结果,只 更改条件标志位。 标志位表示的是操作数1与操作数2的关系(大、小、相等),例如,当操作数1大于操作操作数2,则此后的有GT后缀的指令将可以执行。
指令示例:
CMP R1,R0 ;将寄存器R1的值与寄存器R0的值相减,并根据 结果设置CPSR的标

;志位
CMP R1,#100 ;将寄存器R1的值与立即数100相减,并根 据结果设置CPSR的标志位
4、CMN指令(负数比较)
CMN指令的格式为:
CMN{条件} 操作数1,操作数2
CMN指令用于把一个寄存器的内容和另一个寄存器的内容或立即数取反后进行比较,同时更新CPSR中条件标志位的值。该指令实际完成操作数1和操作数2相 加,并根据结果更改条件标志位。
指令示例:
CMN R1,R0 ;将寄存器R1的值与寄存器R0的值相加,并根据 结果设置CPSR

;的标志位
CMN R1,#100 ;将寄存器R1的值与立即数100相加,并根据 结果设置CPSR的标志位
5、TST指令(测试)
TST指令的格式为:
TST{条件} 操作数1,操作数2
TST指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新CPSR中条件标志位的值。操作数1是要测试的数 据,而操作数2是一个位掩码,该指令一般用来检测是否设置了特定的位。
指令示例:
TST R1,#%1 ;用于测试在寄存器R1中是否设置了最低位(%表 示二进制数)
TST R1,#0xffe ;将寄存器R1的值与立即数0xffe按位与,并根据 结果设置CPSR

;的标志位
6、TEQ指令(测试相等)
TEQ指令的格式为:
TEQ{条件} 操作数1,操作数2
TEQ指令用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的异或运算,并根据运算结果更新CPSR中条件标志位的值。该指令通常用于比较操作数1和操作数2是否相等。
指令示例:
TEQ R1,R2 ;将寄存器R1的值与寄存器R2的值按位异或,并根据结果 设置CPSR

;的标志位
7、ADD指令(相加)
ADD指令的格式为:
ADD{条件}{S} 目的寄存器,操作数1,操作数2
ADD指令用于把两个操作数相加,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即数。
指令示例:
ADD R0,R1,R2 ; R0 = R1 + R2
ADD R0,R1,#256 ; R0 = R1 + 256
ADD R0,R2,R3,LSL#1 ; R0 = R2 + (R3 << 1)
8、ADC指令(带进位相加)
ADC指令的格式为:
ADC{条件}{S} 目的寄存器,操作数1,操作数2
ADC指令用于把两个操作数相加,再加上CPSR中的C条件标志位的值,并将结果存放到目的寄存器中。它使用一个进位标志位,这样就可以做比32位大的数 的加法,注意不要忘记设置S后缀来更改进位标志。操作数1应是一个寄存器,操作数2可以是一 个寄存器,被移位的寄存器,或一个立即数。
以下指令序列完成两个128位数的加法,第一个数由高到低存放在寄存器R7~R4,第二个数由高到低存放在寄存器R11~R8,运算结果由高到低存放在寄 存器R3~R0:
ADDS R0,R4,R8 ; 加低端的字
ADCS R1,R5,R9 ; 加第二个字,带进位
ADCS R2,R6,R10 ; 加第三个字,带进位
ADC R3,R7,R11 ; 加第四个字,带进位
9、SUB指令(相减)
SUB指令的格式为:
SUB{条件}{S} 目的寄存器,操作数1,操作数2
SUB指令用于把操作数1减去操作数2,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位的寄存器,或一个立即 数。该指令可用于有符号数或无符号数的减法运算。
指令示例:
SUB R0,R1,R2 ; R0 = R1 - R2
SUB R0,R1,#256 ; R0 = R1 - 256
SUB R0,R2,R3,LSL#1 ; R0 = R2 - (R3 << 1)

10、~~~~C指令
~~~~C指令的格式为:
~~~~C{条件}{S} 目的寄存器,操作数1,操作数2
~~~~C指令用于把操作数1减去操作数2,再减去CPSR中的C条件标志位的反码,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以 是一个寄存器,被移位的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法,注意不要忘记设置S后缀来更改进位标志。该指令可用于有符号数或无符号数的减法运算。
指令示例:
SUBS R0,R1,R2 ;R0 = R1 - R2 - !C,并根据结果设置CPSR的进位标志位
11、R~~~~指令
R~~~~指令的格式为:
R~~~~{条件}{S} 目的寄存器,操作数1,操作数2
R~~~~指令称为逆向减法指令,用于把操作数2减去操作数1,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位 的寄存器,或一个立即数。该指令可用于有符号数或无符号数的减法运算。
指令示例:
R~~~~ R0,R1,R2 ; R0 = R2 – R1
R~~~~ R0,R1,#256 ; R0 = 256 – R1
R~~~~ R0,R2,R3,LSL#1 ; R0 = (R3 << 1) - R2
12、RSC指令(反向带进位减)
RSC指令的格式为:
RSC{条件}{S} 目的寄存器,操作数1,操作数2
RSC指令用于把 操作数2减去操作数1,再减去CPSR中的C条件标志位的反码,并将结果存放到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存器,被移位 的寄存器,或一个立即数。该指令使用进位标志来表示借位,这样就可以做大于32位的减法,注意不要忘记设置S后缀来更改进位标志。该指令可用于有符号数或 无符号数的减法运算。
指令示例:
RSC R0,R1,R2 ;R0 = R2 – R1 - !C
13、AND指令(逻辑位 与)
AND指令的格式为:
AND{条件}{S} 目的寄存器,操作数1,操作数2
AND指令用于在两个操作数上进行逻辑与运算,并把结果放置到目的寄存器中。操作数1应是一个寄存器,操作数2可以是一个寄存


http://chatgpt.dhexx.cn/article/Ys4mhGAg.shtml

相关文章

实操汇编原理cmp指令 对比sub与cmp指令

mov ax, 5 mov bx, 5 cmp ax, bx这段指令是5-50&#xff0c;但是并不是在寄存器中a改值: 还没有给ax寄存器放值之前如上图&#xff0c;放入ax和bx之后如下图: 这个时候再step调试一步也就是走cmp ax,bx之后变成如下: 这里可以看到ax并没有发生改变&#xff0c;改变的是flag…

CMP指令(cmp指令的功能)

目前有哪些类型的CMP&#xff1f; 目前有共享一级Cache的CMP、共享二级Cache的CMP以及共享主存的CMP PLC里的cmp比较指令是不是停电保持&#xff1f; OQ0.0 /或 Q0.0常开触点 这个是Q0.0线圈的常开触点&#xff0c;作用就是停电自保持 CMP指令的指令详解 原发布者:weilei1201 c…

汇编语言 CMP指令

CMP(比较)指令执行从目的操作数中减去源操作数的隐含减法操作&#xff0c;并且不修改任何操作数。 指令格式&#xff1a; CMP 目的操作数, 源操作数标志位 当实际的减法发生时&#xff0c;CMP指令按照计算结果修改溢出、符号、零、进位、辅助进位和奇偶标志位。如果比较的是两…

时钟周期、机器周期、总线周期、指令周期的关系

一、时钟周期 时钟周期由主频决定&#xff0c;是最小的时间单位 也叫节拍、T周期、cpu时钟周期 二、机器周期 cpu完成一项基本操作所需最短时间&#xff0c;用了多个时钟周期 又叫cpu周期 例&#xff1a;取指周期&#xff08;含取指令和分析指令&#xff09;、间址周期、执行…

请说明指令周期、机器周期、时钟周期之间的关系。

一条指令周期包括若干个机器周期&#xff0c;一条机器周期又包括若干个时钟周期&#xff0c;时钟周期即振荡周期。 指令周期&#xff1a;取出一条指令并执行这条指令的时间。一般由若干个机器周期组成&#xff0c;是从取指令、分析指令到执行完所需的全部时间。 机器周期&…

时钟周期、机器周期、指令周期的概念及三者之间的关系;定时器及计数器

时钟周期 时钟周期也称为振荡周期&#xff0c;定义为时钟脉冲的倒数(可以这样来理解&#xff0c;时钟周期就是单片机外接晶振的倒数&#xff0c;例如12M的晶振&#xff0c;它的时间周期就是1/12 us)&#xff0c;是计算机中最基本的、最小的时间单位。 在一个时钟周期内&#xf…

如何理解时钟周期及公式CPU执行时间 = CPU时钟周期数/主频

因为用OneNote制作的&#xff0c;公式复制不过来太麻烦&#xff0c;直接截图了。 下面看一下时钟周期的定义&#xff1a; CPU时钟周期&#xff1a;通常为节拍脉冲或T周期&#xff0c;即主频的倒数&#xff0c;它是CPU中最小的时间单位&#xff0c;每个动作至少需要一个时钟周期…

51/时钟周期、时钟频率、状态周期、机器周期

1.时钟频率是什么&#xff1f; 时钟&#xff1a;顾名思义&#xff0c;时钟以精确和固定的时间间隔&#xff0c;触发电信号&#xff0c;其信号被控制单元用于推进CPU的内部操作。而CPU执行 取指令–解码–执行的速度为时钟速度&#xff08;时钟频率&#xff09;。 在各类CPU当中…

时钟周期,机器周期,指令周期的区别

时钟周期 时钟周期也称为振荡周期&#xff0c;定义为时钟脉冲的倒数&#xff08;时钟周期就是单片机外接晶振的倒数&#xff0c;例如12M的晶振&#xff0c;它的时钟周期就是1/12us&#xff09;&#xff0c;是计算机中的最基本的、最小的时间单位。 在一个时钟周期内&#xff0c…

【嵌入式百科】003——时钟周期、指令周期、机器周期、总线周期

一、时钟周期 时钟周期也称为振荡周期&#xff0c;定义为时钟脉冲的倒数(时钟周期就是单片机外接晶振的倒数&#xff0c;例如12M的晶振&#xff0c;它的时钟周期就是1/12us)&#xff0c;是计算机中的最基本的、最小的时间单位。在一个时钟周期内&#xff0c;CPU仅完成一个最基本…

IC基础知识(十一)时钟周期、状态周期、机器周期、指令周期和总线周期的定义及关系

目录 ​ ​1.时钟周期、振荡周期、节拍周期 2.状态周期 3.机器周期、CPU周期 4.指令周期 5.总线周期 总结 微信公众号 ​1.时钟周期、振荡周期、节拍周期 时钟周期又叫做振荡周期、节拍周期&#xff0c;定义为时钟晶振频率的倒数。时钟周期是计算机中最基本的、最小的时…

CPU时钟周期和时钟频率

就工作方式而言&#xff0c;CPU 分两种&#xff1a;同步 CPU 和异步 CPU。异步 CPU并不常见&#xff0c;用途广泛的是同步 CPU 。 既然是同步 CPU&#xff0c;当然就需要有一个同步机制&#xff0c;或者说要有个“主管”来维护同步状态&#xff0c;不然你做一样&#xff0c;我…

CPU中的指令周期、CPU周期和时钟周期

https://zhuanlan.zhihu.com/p/90829922 1&#xff0c;指令周期 指令周期&#xff1a;是指计算机从取值到执行执行完毕的时间 计算机执行指令的过程可以分为以下三个步骤&#xff1a; Fetch&#xff08;取指&#xff09;&#xff0c;也就是从 PC 寄存器里找到对应的指令地址…

时钟周期和机器周期之间的关系

时钟周期和机器周期之间的关系 时钟周期&#xff08;小&#xff09;机器周期&#xff08;中&#xff09;指令周期 &#xff08;大&#xff09;作用 时钟周期&#xff08;小&#xff09; 时钟周期&#xff1a;单片机时钟控制的基本时间单位。以微秒(μs)作单位。 时钟周期受时…

凸包和凸集

凸集&#xff1a;在欧氏空间中&#xff0c;凸集是对于集合内的每一对点&#xff0c;连接该对点的直线段上的每个点也在该集合内。 凸包&#xff1a;点集Q的凸包&#xff08;convex hull&#xff09;是指一个最小凸多边形&#xff0c;满足Q中的点或者在多边形边上或者在其内。 凸…

凸优化理论(一)深入理解仿射集,凸集,锥等定义及相关证明

文章目录 1&#xff1a;仿射集相关定义与证明2&#xff1a;相关子空间与性质证明3&#xff1a;线性方程组的解集与化零空间4&#xff1a;任意集合构建最小仿射集-仿射包5&#xff1a;凸集相关&#xff1a;凸包-凸组合6&#xff1a;锥 Cone与凸锥 Convex Cone7&#xff1a;概念比…

泛函分析笔记(八) 凸集和凸函数

文章目录 1. 凸集2. 凸函数 1. 凸集 线段&#xff1a; 给定向量空间的两点 a 和 b &#xff0c;集合 [ a , b ] : { x ∈ X ; x λ a ( 1 − λ ) b , 0 ≤ λ ≤ 1 } [a,b]: \{ x\in X; x \lambda a (1-\lambda)b,0\le \lambda \le 1\} [a,b]:{x∈X;xλa(1−λ)b,0≤λ…

【第1章】凸集——几种重要的凸集

凸集——几种重要的凸集 2.几种重要的凸集2.1 超平面与半空间2.2 球和椭球2.3 多面体(关注单纯形)2.4 半正定锥2.5参考 Date: 2020/04/11 Editor:萧潇子&#xff08;Jesse&#xff09; Contact: 1223167600qq.com 2.几种重要的凸集 本节讲述一些重要凸集的概念,首先介绍一些简…

凸集、凸函数及其充分必要条件

凸集的定义&#xff1a; 设集合 D⊂Rn D ⊂ R n &#xff0c;若对于任意点 x,y∈D x , y ∈ D 及实数 α∈[0,1] α ∈ [ 0 , 1 ] &#xff0c;都有 αx(1−α)y∈D α x ( 1 − α ) y ∈ D 则称集合 D D 为凸集。 由凸集的定义可以看出凸集的几何意义,对于非空集合D"…

凸函数与凸集

文章目录 1、凸集2、凸函数 对于《欠定线性系统与正则化》一节中的优化问题&#xff1a; ( P J ) : min ⁡ x J ( x ) s . t . b A x (P_J):\min \limits_{\bf x} J({\bf x})\quad {\rm s.t.} \quad{\bf bAx} (PJ​):xmin​J(x)s.t.bAx 只要 J ( ⋅ ) J(\cdot) J(⋅)为严格凸的…