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型的变量。 |