BL 和 BLX 指令可将下一个指令的地址复制到 lr(r14,链接寄存器)中。 BX 和 BLX 指令可将处理器的状态从 ARM 更改为 Thumb,或从 Thumb 更改为 ARM。 BLX label 无论何种情况,始终会更改处理器的状态。 BX Rm 和 BLX Rm 可从 Rm 的位 [0] 推算出目标状态: 如果 Rm 的位 [0] 为 0,则处理器的状态会更改为(或保持在)ARM 状态 如果 Rm 的位 [0] 为 1,则处理器的状态会更改为(或保持在)Thumb 状态。
adr指令:
10: _start
0x0000000C E1A00000 NOP
11: nop
ldr r0, _start //从内存地址 _start 的地方把值读入。执行这个后,r0 = 0xe1a00000
adr r0, _start //adr r0, _start 得到 r0 = 0x00000010 这里和具体运行位置无关
LDR/STR:
ldr内存到寄存器,str寄存器到内存,刚好相反
LDR R1,=0xE0000000 ;R1=0xE0000000
LDR R1,0xE0000000 ;将内存中地址为0xE0000000的内容载入到R1
LDR R1,[R0] ;将R0中的数所指定的地址的内容传输到R1
STR R1,[R0]
beq:
.text:00001070 00 29 CMP R1, #0 ; Alternative name is '__aeabi_idiv' .text:00001072 56 D0 BEQ loc_1122
bx lr
arm中lr中保存的是返回地址,与x86的好像是不同的
指令后带.w说明是32位
ADD R3,R2,R1,LSL#3; R3ßR2+8*R1
其中LSL #3 为左移三位
移位指令:
LSL:逻辑左移
LSR:逻辑右移
ASR:算术右移
ROR:循环右移
RRX:扩展为1的循环右移
//表示r0右移31位与r0相加放入r0
ADD.W R0, R0, R0,LSR#31