ARM在gcc下面的汇编指令片段解析

下面是一段汇编代码的片段。

 

00000432:   mov     r10, r7

00000434:   mov     r11, r7

00000436:   mov     r12, r7

00000438:   ldr     r1, [pc, #40]   ; (0x464 <Reset_Handler+84>) /* 将地址PC+40(立即数,十进制)中保存的数load到r1*/

0000043a:   ldr     r2, [pc, #44]   ; (0x468 <Reset_Handler+88>)

0000043c:   subs    r2, r2, r1 /* subtract. Is an optional suffix. If S is specified, the condition code flags are updated on the
result of the operation.  r2 = r2 - r1 */

0000043e:   subs    r2, #1 /* r2 = r2 - 1. 其中1是十进制表示的立即数 */

通过汇编语言能够察觉到,C语言是最接近于汇编的语言。

从FreeRTOS中的port.c文件可以看出,ARM架构有其独特的特点,并不和其他架构的细节一致。

在FreeRTOS的操作系统的实现中,port.c中表达了详细的执行细节。注意,这里面用到的一些技术性技巧比较多,比如对汇编语言在gcc下面的使用,对于链接文件的各种技巧的使用。

可能使用了在汇编语言中定义全局变量的技巧。

 

参考资料:Cortex-M4-Devices-Generic-User-Guide.pdf

参考资料: https://zhuanlan.zhihu.com/p/336687316

posted @ 2022-03-23 14:35  panrui  阅读(102)  评论(0)    收藏  举报