B Label;跳转到Label处对应的地址,无条件跳转指令。
BX reg;跳转到由寄存器reg给出的地址,无条件跳转指令。Rm的bit[0]必须是1,但跳转地址在创建时会把bit[0]置为0。
BL Label;跳转到Label对应的地址,并且把跳转前的下条指令地址保存到LR。
BLX reg;跳转到由寄存器reg给出的地址,并根据REG的LSB切换处理器状态,还要把转移前的下条指令地址保存到LR。
例1:
B loopA;无条件跳转到loopA的位置
BLE ng;LE条件跳转到标号ng
B.W target;在16 MB内跳转到target
IT块的使用形式如下:
其中<x>,<y>,<z>的取值可以是“T”或者“E”。
例2:
}
例3:
将R0的16进制数转成ASCII码的(‘0’-‘9’)或(‘A’-‘F’)
CMP R0,#9(www.xing528.com)
ITE GT;以下2条指令是本IT块内指令
ADDGT R1,R0,#55;转换成A—F
ADDLE R1,R0,#48;转换成0—9
例4:
ITTE EQ
MOVEQ R0,R1;EQ满足R0=R1
ADDEQ R2,R2,#10;EQ满足,r2+=10
ANDNE R3,R3,#1;NE条件满足,R3&=1
使用注意事项:
分支指令和修改PC值的指令必须放在IT块外或IT块最后一条。IT块里每条指令必须制订带条件码后缀,必须与IT指令相同或相反。
LDR和ADR都有能力产生一个地址,但是语法和行为不同。对于LDR,如果汇编器发现要产生立即数是一个程序地址,它会自动地把LSB置位,例如:
ADR指令则不会修改LSB。例如:
LDR通常是把要加载的数值预先定义,再使用一条PC相对加载指令来取出。而ADR则尝试对PC作算术加法或减法来取得立即数。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。