一、跳转指令
:完成程序跳转,实质就是对PC操作(赋值),b/bl跳转是短跳转,跳转范围:±32MB。
_start:
mov r0, #1
mov r1, #2
mov r3, #3
b func @; b跳转,不带返回值
mov r4, #4
func:
mov r5, #5
mov r6, #6
.end
底层现象:
当代码执行至第四行,直接跳转至func:
当func中代码执完毕后,直接结束,b跳转不带返回值,因素跳过代码不会被再执行!
_start:
mov r0, #1
mov r1, #2
mov r3, #3
bl func @; bl跳转前,保存返回地址到lr
mov r4, #4
func:
mov r5, #5
mov r6, #6
mov pc, lr
.end
底层现象:
当bl跳转前,会保存返回地址到lr。
之前所跳过指令也会继续执行。
二、内存传输指令
:对内存的读写操作
(1)单寄存器传输指令:ldr/str
内存地址寻址:前索引、后索引、自动索引
_start:
mov r0, #0x40000000
mov r1, #0x12
str r1, [r0] @ *r0 = r1 把r1的数据存入r0指向的地址中
ldr r2, [r0] @ r2 = *r0 吧r0地址处的数据读出,存入r2中
.e