3.9.5. 汇编中的对应位置有存储值的标号 = C语言中的指针变量

像前文所解析的代码中类似于这样的:

LABEL1:.word Value2

比如:

_TEXT_BASE:
	.word	TEXT_BASE
        

所对应的含义是,有一个标号_TEXT_BASE

而该标号中对应的位置,所存放的是一个word的值,具体的数值是TEXT_BASE,此处的TEXT_BASE是在别处定义的一个宏,值是0x33D00000。

所以,即为:

有一个标号_TEXT_BASE,其对应的位置中,所存放的是一个word的值,值为

TEXT_BASE=0x33D00000

总的来说,此种用法的含义,如果用C语言来表示,其实更加容易理解:

int *_TEXT_BASE = TEXT_BASE = 0x33D00000

即:

int *_TEXT_BASE = 0x33D00000
[提示]C语言中如何引用汇编中的标号

不过,对于这样的类似于C语言中的指针的汇编中的标号,在C语言中调用到的话,却是这样引用的:

/* for the following variables, see start.S */
extern ulong _armboot_start;	/* code start */
extern ulong _bss_start;	/* code + data end == BSS start */
......
	IRQ_STACK_START = _armboot_start - CFG_MALLOC_LEN - CFG_GBL_DATA_SIZE - 4;
......
            

而不是我原以为的,直接当做指针来引用该变量的方式:

	*IRQ_STACK_START = *_armboot_start - CFG_MALLOC_LEN - CFG_GBL_DATA_SIZE - 4;
            

其中,对应的汇编中的代码为:

.globl _armboot_start
_armboot_start:
	.word _start
            

所以,针对这点,还是需要注意一下的。至少以后如果自己写代码的时候,在C语言中引用汇编中的global的标号的时候,知道是如何引用该变量的。

[注意]【总结】

汇编中类似这样的代码:

label1: .word value2

就相当于C语言中的:

int *label1 = value2

但是在C语言中引用该标号/变量的时候,却是直接拿来用的,就像这样:

label1 = other_value

其中label1就是个int型的变量。