汇编指令简单个人理解

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 <gp_reg>, <special_reg> ;读特殊功能寄存器的值到通用寄存器

MSR <special_reg>, <gp_reg> ;写通用寄存器的值到特殊功能寄存器

str r0,[r2]:将r0的值写入r2内保存的地址里,r2内存放着任务控制块的首地址,r0中存放着当前最新的堆栈栈顶指针,即把当前栈顶指针写入当前任务控制块的第一个字段

猜你喜欢

转载自www.cnblogs.com/wangzhihong-102511/p/10857031.html