cmp 字节 汇编_ARM汇编语言入门(六)

本文介绍了ARM汇编语言中的条件状态和分支,包括如何利用CPSR控制程序执行流程,讲解了条件执行在Thumb模式下的实现,如IT指令的使用。还详细阐述了分支指令B、BX、BLX的用法,以及如何实现条件分支,通过实例展示了如何在满足特定条件时执行跳转。
摘要由CSDN通过智能技术生成

35cc8ebff87178013bfa8b6001e7b57e.png

Part 6:条件状态和分支

在探讨CPSR时我们已经接触了条件状态。我们通过跳转(分支)或者一些只有满足特定条件才执行的指令来控制程序在运行时的执行流。通过CPSR寄存器中的特定bit位来表示条件状态。这些位根据指令每次执行的结果而不断变化。例如,比较运算时如果两个数相等,那么就置CPSR中的Zero位(Z=1),实际上是因为:a - b = 0,这种情况下就是相等状态。如果第一个数大,那么就是大于状态。如果第二个数大,就是小于状态。除此之外,还有小于等于大于等于等等。

下面的表格列出了可用的条件状态码,描述和标志位:

494b3d420fcab814fc9b26effc7db618.png

在下面代码片段中看一下执行条件加法时的实际用法L:

.global main
​
main:
        mov     r0, #2     /* 初始化变量 */
        cmp     r0, #3     /* 将R0中的值与3比较,负数位置1 */
        addlt   r0, r0, #1 /* 如果上一条比较结果是小于(查看CPSR),则将R0加1 */
        cmp     r0, #3     /* 将R0中的值再与3比较, 零位置1,同时负数位重置为0 */
        addlt   r0, r0, #1 /* 如果上一条比较结果是小于(查看CPSR),则将R0加1 */
        bx      lr

第一条cmp指令结果导致CPSR中的负数位置1(2- 3 = -1)意思是R0小于R3。因为满足小于条件(CPSR中的溢出位不等于负数位V != N)所以接下来的ADDLT指令执行。在执行下一条cmp指令时,R0 = 3。所以清除负数位(3 - 3 = 0,负数位清零),零位置位(Z = 1)。现在溢出位是0,负数位是0ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值