在启动文件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
在汇编语言中,ALIGN
指令的功能是使得后面的代码从特定地址开始。这个地址应该是某个数的倍数,这个数就是ALIGN
指令的参数。例如ALIGN 4
会使得后面的代码从一个4的倍数的地址开始,也就是说地址的最低两位为0。
而在你提供的代码中,ALIGN
指令后面没有跟参数,这可以被理解为ALIGN 0
,也即不对齐,后面的代码可以从任何地址开始。但实际上在大多数汇编器中(包括 ARM 的汇编器),如果ALIGN
指令没有参数,则默认参数为4,也即默认按照4字节对齐。
所以,回答你的问题,ALIGN
在汇编层面上有默认值,通常默认为4。
非常感谢您的回答。
@云逆: 是不是可以拿悬赏了,哈哈哈