ARM的跳转指令和地址装载(伪)指令总结
ARM的跳转指令和地址装载(伪)指令总结
(1)分支指令b、bl、bx
格式:b label
b跳转指令是相对跳转,地址label的计算依赖于当前PC的值和基于PC的偏移量(编译时编译器预先计算的值,保存在指令本身的 bit[23:0],始终不变),这使得使用b指令的程序不依赖于要跳到的代码的绝对地址。
(2)寄存器装载指令ldr
ldr rd, label
label: .word value/_label
此指令功能是将标号label的地址上放置的数据装载到rd(可以是pc)中,它也是相对寻址,且label必须是在当前指令的?4KB范围里;第2条伪指令中定义的值可以是另一个标号_label,在编译时编译器将直接把_label的绝对地址存入此存储单元。
(3) 地址装载伪指令adr、adrl、ldr
adr rd, label
此指令也是基于PC的相对寻址方式,rd(可以是pc)=当前PC值+相对偏移量;当地址值是字对齐时,取值范围为-1020,102
0字
个人自传范文3000字为中华之崛起而读书的故事100字新时代好少年事迹1500字绑架的故事5000字个人自传范文2000字
节;汇编编译时,adr伪指令被编译器换成1条合适的指令。
adrl rd, label
基本同上,当地址值是字对齐时,取值范围为-256,256KB;汇编编译时,adr伪指令被编译器换成2条合适的指令。
ldr rd, =label
该伪指令用于加载32位的立即数或一个绝对地址值到指令寄存器(可以是pc),它是绝对地址的加载;汇编编译时,ldr伪指令被编译器换成1条合适的指令,若加载的常数为超出mov或mvn的范围,则使用mov或mvn指令代替ldr伪指令,否则汇编器将常量存入文字池,并使用一个程序相对偏移的ldr指令从文字池读出常量(从PC到文字池的偏移量必须小于4KB)。