ARM语言中LDMIA R1!,{R0,R4-R12};是什么意思】
LDMIA 中的 I 是 increase 的缩写,A 是 after 的缩小,LD加载(load)的意思R1后面的感叹号“!”表示会自动调节 R1里面存的指针
所以整句话意思是任务栈R1的存储地址由低到高,将R1存储地址里面的内容手动加载到 CPU 寄存器 R0,R4-R12里
还有一种是STMDB R1!, {R0,R4-R12} 这就和上面反过来了,ST是存储(store)的意思,D是decrease的意思,B是before的意思,整句话就是R1的存储地址由高到低递减,将R0,R4-R12里的内容存储到R1任务栈里面。
IA:Increase After
传输“之后”“递增”的意思R1有初始值,指向一个存储地址
依次将R0,R4到R12的值传入相应的地址,每次传输之后递增R1指向的存储地址,因为是32位,每次递增的地址应该是4bytes
Load addresses to a register using LDR Rd, =label
LDR r0,[r1] //将R1中的值存到r0中
LDR r1,[r2,#16] //将(r2+16)地址中的内容存到r1中
LDR r1,[r2],#4 //将r2地址中的内容存到r1中,同时r2=r2+4
LDR --- Load from memory into a register
STR --- Store from a register into memory
它们只能被专用的 MSR 和 MRS 指令访问,而且它们也没有存储器地址。
MRS
MSR
str r0,[r2]:将r0的值写入r2内保存的地址里,r2内存放着任务控制块的首地址,r0中存放着当前最新的堆栈栈顶指针,即把当前栈顶指针写入当前任务控制块的第一个字段