|
MACRO伪操作标识 宏定义的开始,MEND标识宏定义的结束。 在后面的程序有多处调用,其大致作用是把宏的第一个参数$HandlerLabel 转变为一个标号,然后让程序跳转到第二个参数 $HandleLabel (第二个参数应该为一个地址)对应的值的地址去。 下面一句一句分析一下,为了便于分析,假设sp =0x33ff8000,$HandleLabel =0x33ffff00, [0x33ffff00]=0x10000000,r0 =0x56001234: $HandlerLabel HANDLER $HandleLabel 宏的名字叫HANDLER ,有两个参数 $HandlerLabel sub sp,sp,#4 把栈顶指针减4,留出一个字的空间(用于保存跳转地址的值),sp=0x33ff7ffc stmfd sp!,{r0} 首先把sp减4 (sp=0x33ff7ff8),然后把将要使用的r0寄存器入栈,此时[0x33ff7ff8]=0x56001234 ldr r0,=$HandleLabel 给寄存器r0赋值,r0=0x33ffff00 ldr r0,[r0] 给寄存器r0赋值,r0=0x10000000 str r0,[sp,#4] ;把寄存器r0保存到0x33ff7ffc (0x33ff7ff8+4),sp没有改变sp=0x33ff7ff8,如果 str r0,[sp,#4]!sp 改变 此时 ;[0x33ff7ffc] = 0x10000000 ldmfd sp!,{r0,pc} 把栈顶的两个字弹出,分别保存到r0、pc,此时sp=0x33ff8000,r0=0x56001234,pc=0x10000000,通过比较不难发现,sp和r0在执行前后都没有变化,程序就跳转到0x10000000处执行 |
ARM 汇编 伪指令 MACRO及MEND handle
ARM汇编宏指令解析
最新推荐文章于 2024-06-04 16:08:09 发布
本文详细解析了ARM汇编语言中的MACRO伪操作及其应用实例,通过具体宏定义展示了如何利用宏指令实现代码复用,并深入分析了宏指令在处理器中断处理程序中的展开过程。
2963

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



