标签:R1 接口技术 STOP LDR 指令 寄存器 ARM
状态寄存器(CPSR)传送指令
@ 状态寄存器传送指令 .text .global _start _start: @ 状态寄存器指令 @ 读CPSR到R1 MSR R1,CPSR @写到CPSR MSR CPSR, #0x10 STOP: B STOP .end
软中断指令
ARM的异常向量表默认在以0x00为起始地址的32字节内存空间。
每个偏移地址存储的是一个中断产生后执行的指令,如软中断产生执行的指令位于0x00+0x08。
@ 软中断指令 .text .global _start _start: @ 4x8=32字节的异常向量表 B MAIN B . B SWI_HANDLER @ SWI中断指令写为跳转到SWI_HANDLER B . B . B . B . B . MAIN: @ 复位和软中断都是SVC模式 @ 所以用的是同一个栈顶指针寄存器SP_<SVC mode> MOV SP,#0x40000020 @ 初始化SVC模式的栈顶指针 MSR CPSR, #0x10 @ 切换为User模式 @ 在这里操作的是User的栈顶指针SP_<User mode> @ 在这里初始化栈顶指针在软中断中没用 @ MOV SP,#0x40000020 MOV R1,#1 MOV R2,#2 @ 软中断指令 SWI #1 ADD R3,R1,R2 B STOP SWI_HANDLER: STMFD SP!,{R1,R2,LR} @ 压栈,保护现场 MOV R1,#5 MOV R2,#6 LDMFD SP!,{R1,R2,PC}^ @出栈(出栈写入的第三个寄存器为PC,可以直接跳转) @^执行切换user模式 STOP: B STOP .end
扩展1——ARM协处理器指令
协处理器指令是指ARM本身不处理的指令,但是会交给ARM支持的协处理器执行的指令。
如MMU, CP15是两种协处理器。
...
扩展2——ARM伪指令
ARM伪指令本质上不是指令,不会对应一条能被CPU直接执行的机器码,但是能被编译器转换成若干条指令。
@ 伪指令 .text .global _start _start: NOP @ 空指令,它是一条伪指令,实际上被编译成 MOV R0,R0 @LDR @ 它根据格式不同,可以是指令,也可以是伪指令 LDR R1,[R2] @ 这是一条指令 @ LDR伪指令格式 LDR R1, =0x12345678 @ 这一条伪指令,可以将任意一个32位的数据放到寄存器中 @ 实际上被编译成LDR R1,[PC] 和 0x12345678 LDR R1,=STOP @ 将STOP的地址写入R1寄存器 LDR R1,STOP @ 将STOP地址中的内容写入R1寄存器 STOP: B STOP .end
END
标签:R1,接口技术,STOP,LDR,指令,寄存器,ARM 来源: https://www.cnblogs.com/zjccc/p/16163013.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。