ARM命令CMP详细信息
1、加减指令
add r1、r2、#1 /*r1=r2 1 */
sub r1、r2、#1 /*r1=r2 - 1 */
2.ADR命令
adr是较窄范围的地址读取伪指令,ldr是较宽范围的地址读取伪指令。 实际上,adr将基于PC相对偏移的地址值或寄存器的相对地址值作为指令读取,而ldr用于将32个即时数或一个地址加载到指定的寄存器中。 到这里就知道其中的区别了。 如果希望程序加载函数或合并时指定的地址,请使用adr。 例如,在lds中使用需要重新定位的地址。 如果32加载的即时数或外部地址,请使用ldr。 3、CMP
假设现在AX寄存器的数量为0002H,BX寄存器的数量为0003H。
要执行的命令是CMP AX、BX
运行此命令时,首先从AX的数量中减去BX的数量。
要列出二进制运算表达式:
0000 0000 0000 0010
000000000000000000011
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
(借位1 ) 1111 1111 1111 1111
因此,运算结果为0FFFFH
根据该结果,各标志位分别设定为以下值。
CF=1,因为我欠你
OF=0,无溢出
科幻=1,结果为负
ZF=0,结果都不是零
另外,AF、PF等也将相应设置。
CMP比较命令被减去之后,基于运算结果设置各个标记位。 如果设置了标志,则0FFFFH的减法结果将被浪费、丢弃或不保存。 执行CMP指令后,除CF、ZF、OF、SF、等各个标志位变化以外的数据不变化。
与通常的减法指令SUB AX、BX相比,它们的差异如下。
执行SUB命令后,原始AX中的减数丢失,并替换为减法结果。
执行CMP指令后,被减数、减数保持不变。 cmp r0,#0
Beq标签1; 如果r0==0,则跳至LABEL1执行
bne LABEL2; 否则,跳至LABEL2并运行
4、控制流指令
跳转命令(branch ) )
说明:无条件迁移b,BAL
示例: b标签; 标签在某个地方
条件迁移
说明: BEQ等于
BNE各不相同
BPL非负
BMI负
卡介苗没有进位
BCS有进位
BLO更小(无符号数) ) ) ) ) )。
BHS为以上(无符号数) ) ) ) ) ) )。
BHI更大(无符号数) ) ) ) ) ) ) )。
BLS为以下(无符号数) ) ) ) ) )。
无BVC溢出(有符号数) ) ) ) ) )。
存在BVS溢出(有符号数) ) ) ) )。
BGT更大(有符号的数) ) ) ) ) ) ) )。
BGE为以上(带符号数) ) ) ) ) ) ) ) ) ) )。
BLT更小(有符号的数) ) ) ) )。
BLE为以下(带符号数) ) ) ) ) ) ) ) )。
-----------------
作者: n阶立方
来源: CSDN
译文: https://blog.csdn.net/zhouqt/article/details/78172332
声明:本文为博客原创文章。 转载请附上博文链接!