首页 新闻 会员 周边 捐助

关于STM32的启动文件

0
悬赏园豆:50 [已解决问题] 解决于 2023-12-18 14:34

在启动文件startup_stm32f10x_hd.s中,最后的部分有两个ALIGN,但是其后都没有跟参数。我在网络上暂时没有找到相关描述,是这两个参数是可以省略的吗,还是说ALIGN在汇编层面上有默认值。如有大佬解惑,感激不尽。(下面是原疑惑代码部分)

          ALIGN

;*******************************************************************************
; User Stack and Heap initialization
;*******************************************************************************
IF :DEF:__MICROLIB

             EXPORT  __initial_sp
             EXPORT  __heap_base
             EXPORT  __heap_limit
            
             ELSE
            
             IMPORT  __use_two_region_memory
             EXPORT  __user_initial_stackheap

__user_initial_stackheap

             LDR     R0, =  Heap_Mem
             LDR     R1, =(Stack_Mem + Stack_Size)
             LDR     R2, = (Heap_Mem +  Heap_Size)
             LDR     R3, = Stack_Mem
             BX      LR

             ALIGN

             ENDIF

             END
云逆的主页 云逆 | 初学一级 | 园豆:154
提问于:2022-10-06 17:28
< >
分享
最佳答案
1

在汇编语言中,ALIGN指令的功能是使得后面的代码从特定地址开始。这个地址应该是某个数的倍数,这个数就是ALIGN指令的参数。例如ALIGN 4会使得后面的代码从一个4的倍数的地址开始,也就是说地址的最低两位为0。

而在你提供的代码中,ALIGN指令后面没有跟参数,这可以被理解为ALIGN 0,也即不对齐,后面的代码可以从任何地址开始。但实际上在大多数汇编器中(包括 ARM 的汇编器),如果ALIGN指令没有参数,则默认参数为4,也即默认按照4字节对齐。

所以,回答你的问题,ALIGN在汇编层面上有默认值,通常默认为4。

收获园豆:50
npe0 | 小虾三级 |园豆:1502 | 2023-12-18 11:40

非常感谢您的回答。

云逆 | 园豆:154 (初学一级) | 2023-12-18 12:11

@云逆: 是不是可以拿悬赏了,哈哈哈

npe0 | 园豆:1502 (小虾三级) | 2023-12-18 13:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册