1.内存的操作指令
1.1单个寄存器和内存的访问
ldr:将指定地址的内存空间的内存拷贝到一个寄存器中
str:将一个寄存器中的内容拷贝到指定的内存空间中
a:
.word 0x00
ldr r0,=a @将a变量的地址赋值给了r0 ldr是伪指令
ldr r1,[r0] @r1 = *r0
str r1,[r2] @其中r2是b的地址 *r2 = r1
.text @告诉编译器以下代码放在代码段
if 0
int aa = 0x12345678;
int bb = 0x00;
bb = aa;
.endif
@分别将aa和bb的地址存放在r0和r1中
ldr r0,=aa
ldr r1,=bb
ldr r2,[r0]
ldr r3, [r1]
nop
nop
nop
.data
aa:
.word 0x12345678
bb:
.word 0x00
.end
ldr和str------->每次只访问四个字节
ldrb和strb------->每次只访问一个字节
ldrh和strh------->每次只访问两个字节
拷贝字符串:
一次拷贝一个字符
ldr r0,[r1, #4] @r0 = *(r1+4)
ldr r0,[r1],#4 @r0=*r1, r1+=4
1.2 连续内存空间的访问
ldm:将一块连续空间的内容拷贝到一组寄存器中
stm:将一组寄存器中的内容拷贝到一块连续的空间中
i--->increase 地址变化方向从小到大
d---->decrease 地址变化方向从大到小
a--->after 指针指向的空间没有值,需要先操作,后增加
b---->before 指针指向的空间有值,需要先增加后操作
ia:先访问内存,后增加地址 p++
ib:先增加地址,在访问内容 ++p
d
ARM汇编指令详解:内存操作与SWI

本文详细介绍了ARM处理器中的内存操作指令,包括单个寄存器与内存的访问、连续内存空间的访问和堆栈操作,以及SWI指令。重点讲解了ldr、str及其变种,ldm、stm系列指令的用法,同时阐述了堆栈操作的原理。此外,还提及了SWI软中断指令及其在异常处理中的角色。
最低0.47元/天 解锁文章
671

被折叠的 条评论
为什么被折叠?



