【ARM|GNU ARM中的汇编指令.word】GNU ARM中的汇编指令.word
汇编中的标号通常情况下是用来标明程序段的起始地址的,如
_start:
breset
ldrpc, _undefined_instruction
ldrpc, _software_interrupt
ldrpc, _prefetch_abort
ldrpc, _data_abort
ldrpc, _not_used
ldrpc, _irq
ldrpc, _fiq
_start就是该程序段的起始地址,即第一条指令“breset”的内存地址,其对应内存单元中存放的是该指令的机器码,加标号多是用来实现程序的跳转。
而对于下面的标号,其作用就不是这样了:
_armboot_start:
.word _start
这里的_armboot_start也是一个标号,其值也是内存地址,但不是指令的地址,其对应内存单元中不再是指令的机器码,而是一个字(word),这个字是 _start的值,也即指令“breset”的内存地址。这类似于C语言中的函数指针,其值是函数的入口地址,也不过是开辟一个字的内存,存放着第一条语句的内存地址。
.word表示的就是在_armboot_start地址的内存单元中用一个字的空间存放_start,这里的_armboot_start和_start都是内存地址。大多情况下,标号对应的内存单元中存放的是第一条指令的机器码,对于ARM指令来说,也是一个机器字的长度(32位)。