条件执行指令CMP-创新互联

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

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享标题:条件执行指令CMP-创新互联
转载注明:http://pwwzsj.com/article/dppegh.html