ARM 汇编指令:(五)CMP指令

目录

1.CMP比较指令

2.指令条件码 cond


1.CMP比较指令

CMP指令是计算机指令集中的一种比较指令,用于比较两个操作数的大小关系或相等性,并根据比较结果设置或更新条件码寄存器(或程序状态字)的标志位。

指令格式:CMP  <第一操作寄存器>  <第二操作数>

  • 第一操作寄存器:参与比较的第一个数(只能是寄存器)
  • 第二操作数:参与比较的第二个数(既可以是寄存器,也可以是立即数)

执行CMP指令时,计算机会计算操作数1与操作数2之间的差值,并更新CPSR状态寄存中的标志位。常见的标志位包括零标志位(Z),负标志位(N),进位标志位(C)和溢出标志位(V)。

ps:这里提一下CPSR状态寄存器每一位的作用。

 示例分析:

cmp r1, r2;
bleq r1;  //r1 和 r2保存的地址一样,才发生跳转

用C表示就是:
if (r1 == r2) {
    r1();
}

如果R1 == R2,即 R1 - R2 = 0,CPSR中的状态位 Z = 1

如果R1 != R2,即 R1 - R2 != 0,CPSR中的状态位 Z = 0

如果R1 < R2,即 R1 - R2 运算过程中产生了借位,CPSR中的状态位 C = 0

如果R1 <= R2,即 R1 - R2 运算过程中产生了借位 或者 R1 - R2 = 0,此时 C = 0 或 Z = 1

如果R1 > R2,即 R1 - R2 运算过程中没有产生借位,而且 R1 - R2 != 0,此时 C = 1 且 Z = 0

如果R1 >= R2,即 R1 - R2 运算过程中没有产生借位 或者 R1 - R2 = 0,则 C = 1

所以看到这里,大家应该知道cmp指令的实质,其实就是两个数subs(有符号的减法),后续的指令(比如:BlEQ,其实他就是跳转指令B ,只是在执行前需要根据CPSR状态,判断是否执行跳转BL指令)根据CPSR的N Z C V状态做出不同的条件判断动作。

2.指令条件码 cond

什么是指令条件码? 拿第一节讲过的mov举例:

MOV{cond}{S} Rd, Operand2 

那个cond就是指令条件码,它是可选的。mov+cond ,就说明这条指令在执行前,需要根据当前的CPSR状态寄存器的状态(cmp作比较的时候,修改了CPSR的状态),来判断是否执行mov。

类似的:

BEQ 实际上B  判断EQ的条件是否成立才执行.

addne 表示ADD 判断NE的条件是否成立 才开始加.

示例:

cmp r1, r2;
movne r1,r2;  //r1 和 r2保存的值不一样,才发生mov操作

用C表示就是:
if (r1 != r2) {
    r1 = r2;
}

看到这里相信大家已经能够明白条件码的作用了,那么接下来我们了解下有哪些条件码:

ARM机器码中,高4bit是条件执行码,ARM指令是否执行取决这4bit数据

这张表主要理解每个字母的单词意思,否则真不好记,只能用到的时候查表,哈哈!! 

下一页:ARM 汇编指令:(六) B 跳转指令

相关推荐

  1. ARM 汇编指令:(三)运算处理指令

    2024-03-14 13:12:06       44 阅读
  2. ARM 汇编指令:(四) 位运算指令

    2024-03-14 13:12:06       45 阅读
  3. 汇编指令——ARM Cortex-M指令分析

    2024-03-14 13:12:06       29 阅读
  4. 汇编 -- ARM汇编之 .inst指令与udf指令使用

    2024-03-14 13:12:06       22 阅读
  5. ARM 汇编指令:(六) B 跳转指令

    2024-03-14 13:12:06       46 阅读
  6. arm64机器指令转换为汇编指令

    2024-03-14 13:12:06       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-14 13:12:06       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-14 13:12:06       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-14 13:12:06       87 阅读
  4. Python语言-面向对象

    2024-03-14 13:12:06       96 阅读

热门阅读

  1. 25.最大公因数 最小公倍数

    2024-03-14 13:12:06       40 阅读
  2. 学C还是学C++?

    2024-03-14 13:12:06       31 阅读
  3. vue install 报错:code CERT_HAS_EXPIRED

    2024-03-14 13:12:06       44 阅读
  4. Qt QMetaObject::invokeMethod

    2024-03-14 13:12:06       41 阅读
  5. Linux基线安全检测-服务器安全配置检测

    2024-03-14 13:12:06       29 阅读
  6. LeetCode18.四数之和

    2024-03-14 13:12:06       44 阅读
  7. 大带宽服务器怎么租详细过程

    2024-03-14 13:12:06       39 阅读
  8. 字符串和字节的使用

    2024-03-14 13:12:06       39 阅读
  9. redis中setnx命令的底层原理是什么

    2024-03-14 13:12:06       34 阅读
  10. MyBatis-Plus IgnoreStrategy:深入解析与策略应用

    2024-03-14 13:12:06       40 阅读
  11. ES6基础1

    2024-03-14 13:12:06       38 阅读
  12. 单元测试框架unittest D16

    2024-03-14 13:12:06       40 阅读