条件执行指令 CMP

13 篇文章 3 订阅
订阅专栏

CMP可以比较两个数的关系,其本质就是一条减法指令,只是不会将运算结果保存到寄存器,因为对于CPU而言,比较两个数时只关心结果是false还是true

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

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

目录

1、CMP实现条件判断的本质

2、条件码以及条件码的使用

3、小练习:使用ARM指令进行条件判断,并执行相应的语句


1、CMP实现条件判断的本质

CMP 的本质就是一条减法指令,减法的结果会影响CPSR寄存器,CPU实际上是根据CPSR中的N、Z、C、V状态位来进行判断。以下面这条语句为例( 假设R1和R2中存的是无符号数)

CMP R1, R2

如果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

2、条件码以及条件码的使用

在实际使用的时候,我们不可能像上面那样,使用CPSR中的状态位去比较两个数的大小,因此,ARM给我们提供了更简洁的指令,那就是“条件码”。

使用时,主要关注第二列“后缀符”和第四列“含义”。

MOV R1, #1            @ R1 = 1
MOV R2, #2            @ R2 = 2
CMP R1, R2            @ 本质: R1 - R2,记录运算结果状态是否为0、是否借位,保存到CPSR寄存器

SUBGT R3, R1, R2      @ 含义: 如果CMP的比较结果是R1 > R2,那就执行SUB R3, R1, R2
                      @ SUBGT: 运算符SUB + 后缀符GT
                          @ SUB: 减法运算
                          @ GT: 表示大于,ARM指令集中大多数指令都可以带条件码后缀

注意:ARM指令集中大多数指令都可以带条件码后缀

3、小练习:使用ARM指令进行条件判断,并执行相应的语句

现在有这么一段C语言的代码,用ARM指令将其表示出来。

    int R1 = 9;                 // MOV R1. #9
    int R2 = 15;                // MOV R2, #15
START:   
                                // CMP R1, R2                       
    if(R1 == R2)                // BLEQ STOP
    {
       STOP(); 
    }
    else if(R1 > R2)            // SUBGT R1, R1, R2
    {
        R1 = R1 - R2;
    }
    else                        // SUBLT R2, R2, R1
    {
        R2 = R2 - R1;
    }
STOP:
    B STOP
ARMv8 汇编指令
hyskycity的博客
01-07 1400
extend>:可为UXTB,UXTH,UXTW,LSL|UXTX,SXTB,SXTH,SXTW,SXTX操作,这里amount取值范围为0-4,3bit位宽。Xd寄存器的值等于 Xn寄存器的值加上C。LDR Xt, [Xn] //以Xn寄存器中的内容作为内存地址,加载此内容地址的内容到Xt目标寄存器中。STP前变基:STP , , [, #]!STP后变基:STP , , , #:目标寄存器。
汇编(四)——ARM数据处理指令——比较指令
Scroll_C的博客
03-25 3032
ARM数据处理指令——比较指令 助记符 说明 操作 条件码位置 CMP Rn, operand2 比较指令 标志N、Z、C、V<-Rn-operand2 CMP{cond} CMN Rn,operand2 负数比较指令 标志N、Z、C、V<-Rn+operand2 CMN{cond} TST Rn,operand2 位测试指令 标志N、Z、C、V<-Rn&operand2 TST(cond)
arm cmp指令
07-12
指令arm 开发 CMP指令用于把 一个寄存器的内容和另一个寄存器的内容或立即数进行比较
cmp指令
weixin_34198881的博客
11-12 3463
cmp是比较指令cmp的功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。 cmp指令格式: cmp 操作对象1,操作对象2 功能:计算操作对象1-操作对象2但并不保存结果,仅仅根据计算结果对标志寄存器进行设置。 例如指令cmp ax,ax,做(ax)-(ax)的运算,结果为0,但并不在ax中保存,仅影...
ARM 汇编指令:(五)CMP指令
最新发布
孔祥锐
03-13 5115
CMP指令是计算机指令集中的一种比较指令,用于比较两个操作数的大小关系或相等性,并根据比较结果设置或更新条件码寄存器(或程序状态字)的标志位。指令格式:CMP 第一操作寄存器:参与比较的第一个数(只能是寄存器)第二操作数:参与比较的第二个数(既可以是寄存器,也可以是立即数)执行CMP指令时,计算机会计算操作数1与操作数2之间的差值,并更新CPSR状态寄存中的标志位。常见的标志位包括零标志位(Z),负标志位(N),进位标志位(C)和溢出标志位(V)。
cmp 指令
12-12 637
 cmp 是比较指令,相当于不保存结果的减法指令,但影响标志寄存器cmp ax,bxax=bx,  则ZF=1ax!=bx, 则ZF=0axaxax>bx,  则CF=0ax>=bx,则CF=0或ZF=1 相关链接:标志寄存器
CMP指令
离,路的尽头还很远...
10-28 2930
cmp指令 cmp是比较指令cmp的功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。 比如:mov ax,8        mov bx,3        cmp ax,bx 执行后:ax=8,ZF=0,PF=1,SF=0,CF=0,OF=0. 通过cmp指令执行后,相关标志位的值就可以看出
INC和CMP指令运用三
03-19
比如,通过"CMP"指令检查计数值是否达到预设阈值,当满足条件时,触发"INC"指令停止计数并执行其他操作。这在自动化设备的定时控制或定量控制中非常常见。 提供的压缩包文件中包含"快速接线模块.pdf",可能涵盖了...
三菱plc比较指令CMP.doc
10-02
在PLC(可编程逻辑控制器)编程中,比较指令CMP)是不可或缺的一部分,它用于在程序中执行数值或逻辑的比较操作。三菱PLC的比较指令 CMP 是一种功能强大的工具,允许用户对数据进行比较并根据比较结果进行后续处理...
cmp 字节 汇编_汇编 常用指令 cmp jmp call ret
weixin_33587161的博客
01-13 1408
cmp 指令功能相当于减法指令 只是不保存结果不过cmp执行后会影响标志位 其它指令 通过识别标志位 来得知比较的结果CPU在执行cmp指令时 像add sub指令一样 也包含两种含义 (有符号 无符号)无符号的 cmp指令 cmp ax,bx 执行后即(ax - bx 执行)1 zf=1 ax 等于 bx 结果为02 zf=0 ax 不等于 bx ...
汇编 SUB+JZ,比较指令CMP+JZ条件跳转指令
06-09
SUB和CMP指令都可以用于比较操作,并且都可以和条件跳转指令JZ(Jump if Zero)配合使用。 SUB指令将源操作数的值减去目的操作数的值,并将结果存储到目的操作数中。因此,如果两个操作数的值相等,那么执行SUB指令...
汇编 sub减法指令 比较指令CMP JZ条件跳转指令
weixin_30730151的博客
02-04 1830
二、SUB指令 减法指令SUB (SUBtract) 格式: SUB A,B //A=A-B; 功能: 两个操作数的相减,即从A中减去B,其结果放在A中. 二、CMP 和JZ 指令 比较指令CMP 格式: CMP A,B // A-B; 功能: 两个操作数的相减,即从A中减去B,其结果会影响标志位, 对标志位的影响与SUB指令相同。本条指令主要是用于配合条件...
ARM cmp命令详解
菜鸟的飞翔
06-10 1万+
ARM指令ARM指令的基本格式 ARM指令的基本格式为:    {}  {S}  ,    { , } 其中,内的项是必需的,{  }内的项是可选的。 (1)Opcode项 Opcode是指令助记符,即操作码,说明指令需要执行的操作,在指令中是必需的。 (2)Cond项(command) Cond项表明了指令执行条件,每一条ARM指令都可以在规定的条件执行,每
cmp命令
WindrunnerMax
07-16 1691
cmp命令 cmp命令用来比较两个文件是否有差异,当相互比较的两个文件完全一样时,则该指令不会输出任何信息,若发现有差异,预设会标示出第一个不同之处的字符和列数编号,若不指定任何文件名称或是所给予的文件名为-,则cmp指令会从标准输入设备读取数据。 语法 cmp [-clsv][-i <number of characters>][--help][file][file] 参数 -c或--print-chars: 除了标明差异处的十进制字码之外,一并显示该字符所对应字符。 -i <num
ARM指令CMP详解
热门推荐
海纳百川,有容乃大。
10-07 3万+
1、加减指令     add  r1, r2, #1    /*r1 = r2 + 1 */     sub  r1, r2, #1    /*r1 = r2 - 1 */ 2、adr指令     adr是小范围的地址读取伪指令,ldr是大范围的读取地址伪指令。可实际上adr是将基于PC相对偏移的地址值或基于寄存器相对地址值读取的为指令,而ldr用于加载32为立即数或一个地址到指定
cmp指令详解
piracy
12-03 2万+
假设现在AX寄存器中的数是0002H,BX寄存器中的数是0003H。     执行指令是:CMP AX, BX     执行这条指令时,先做用AX中的数减去BX中的数的减法运算。     列出二进制运算式子:       0000 0000 0000 0010     - 0000 0000 0000 0011     _________________________________   ...
ARM 汇编比较指令-条件执行指令
fantasy_ARM9的博客
11-09 1296
为了提高代码密度,减少ARM指令的数量, 几乎所有的ARM指令都可以根据CPSR寄存器中的标识为,通过指令组合实现条件执行,如无条件跳转指令B,我们呢可以在后面加上条件码组成BEQ,BNE组合指令,BEQ指令表示两个数比较,结果相等时跳转;条件执行经常出现在跳转或循环的程序结构中。构成一个循环程序结构。比较指令用来比较两个数大小,或者是否相等,比较指令的运算结果会影响CPSR寄存器的N\Z\C、V标识位,具体的标志位可以参考前面的CPSR寄存器介绍,比较指令的格式如下/表 3-3 ARM指令条件码。
写文章

热门文章

  • 【cmake学习】cmake 引入第三方库(头文件目录、库目录、库文件) 53048
  • 【DMA】认识 DMA 及其工作流程(与传统CPU存取方式的区别) 34769
  • 【虚拟机】Ubuntu18.04 设置共享文件夹(解决/mnt 目录下没有 hgfs 目录) 25740
  • 重新认识 IP地址 23714
  • 【虚拟机】Ubuntu 手动配置DNS 22463

分类专栏

  • 嵌入式 25篇
  • STM32 4篇
  • 汇编 13篇
  • makefile 11篇
  • Linux驱动(I.MX6ULL) 27篇
  • I.MX6ULL裸机开发 29篇
  • Linux 基本命令和开发工具 54篇
  • cmake 17篇
  • Linux 基础 131篇
  • C/C++ 111篇
  • 数据结构 12篇
  • Mysql / Sqlite 数据库 21篇
  • springboot + vue3 + mybatis 23篇

最新评论

  • 【虚拟机】Ubuntu18.04 设置共享文件夹(解决/mnt 目录下没有 hgfs 目录)

    我要当太空人404: 错误:fuse: bad mount point `/mnt/hgfs': No such file or directory

  • 认识epoll模型的两种工作方式 以及 ET模式必须设为非阻塞的原因

    BUG制造机.: 因为我们每次都需要在接受的字符串后面加上 \0 代表该字符串的结束。所以接受字符串的最长长度是 1023 ,因为还需要腾出一个位置放 \0

  • 隐式类型转换 —— 整型提升

    java进击者: 你好,文中正整数型提升,第四步的结果是否有问题呢?

  • 【系统移植】SD卡烧录uboot、linux内核、根文件系统

    Medjay_: 写的很好,但是内核会卡在starting kernel不知道为啥,一样的配置

  • 【DMA】认识 DMA 及其工作流程(与传统CPU存取方式的区别)

    2301_81444586: 通俗易懂

最新文章

  • 【Makefile】Makefile 编译 Keil 工程(Linux 环境)
  • 【Makefile】编译 .h 头文件生成 .gch 预编译文件
  • 【cmake】Windows 环境下编译第三方依赖源码(以编译Xerces库为例)
2024年18篇
2023年169篇
2022年281篇
2021年10篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家商场国庆美陈布置方案ppt武汉肖像玻璃钢人物雕塑福州园林玻璃钢雕塑安装玻璃钢房地产雕塑制作大型玻璃钢雕塑销售厂家广东特色商场美陈厂家直销大连哈萨克玻璃钢人物雕塑南京玻璃钢雕塑厂玻璃钢卡通人偶雕塑厂滑县玻璃钢花盆花器玻璃钢雕塑制作单位陶瓷玻璃钢花盆批发马拉车玻璃钢雕塑教程淮北人物玻璃钢雕塑多少钱品正玻璃钢花盆山东装饰商场美陈多少钱玻璃钢阿凡提与小毛驴雕塑南京玻璃钢雕塑摆件设计企业大连商场美陈制作玻璃钢佛像雕塑哪个比较好大理市玻璃钢雕塑设计哪里有卖阳江玻璃钢动物雕塑生产贵州园林玻璃钢雕塑定制浙江户内玻璃钢雕塑定制邳州美陈商场布置珠海定制玻璃钢动物雕塑江苏户外商场美陈供货商湛江玻璃钢雕塑货源充足玻璃钢雪山雕塑代理商保定玻璃钢卡通雕塑厂家香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化