首页 理论教育 子程序调用和跳转指令的关键知识点

子程序调用和跳转指令的关键知识点

时间:2023-11-23 理论教育 版权反馈
【摘要】:BX reg;跳转到由寄存器reg给出的地址,无条件跳转指令。BLX reg;跳转到由寄存器reg给出的地址,并根据REG的LSB切换处理器状态,还要把转移前的下条指令地址保存到LR。对于LDR,如果汇编器发现要产生立即数是一个程序地址,它会自动地把LSB置位,例如:ADR指令则不会修改LSB。而ADR则尝试对PC作算术加法或减法来取得立即数。

子程序调用和跳转指令的关键知识点

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作算术加法或减法来取得立即数。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈