下边总结一下,汇编言语和C言语中对汇编中的大局标号的引证的差异:
1018: a1700048 0 NOTYPE GLOBAL DEFAULT 1 _bss_start
1083: a1700044 0 NOTYPE GLOBAL DEFAULT 1 _armboot_start
1142: a1700000 0 NOTYPE GLOBAL DEFAULT 1 _start
1197: a171b070 0 NOTYPE GLOBAL DEFAULT ABS __bss_start
在汇编中,标号==地址,对标号的引证便是对标号对应的地址操作,如_armboot_start,其值便是a1700044,假如想获得其对应内存地址中的数据,就需要ldr等指令。举个不恰当的比如,假如在汇编言语中也能够有相似x-y的操作的话
monitor_flash_len=_bss_start – _armboot_start=0xa1700048 – 0xa1700044 = 4
这是完全正确的。
但是,在C言语中,其成果却不是这样的。在C中,对汇编中的大局标号的引证,其值不再是地址,而是地址对应内存单元中的数据,所以关于C言语
monitor_flash_len = _bss_start – _armboot_start = a171b070 – a1700000 = 1b070
在C言语中,对根本数据类型变量的引证,其值便是对应内存中的数据,而关于杂乱数据类型及函数,其标识符名是指向首地址的指针,其值是它们的首地址。
或许能够这样了解,因为关于根本数据类型来说,其地址和对应内存单元中的数据刚好是一一对应的,对变量的引证意图也是期望对内存中的数据进行操作,所以默许是获得变量对应内存单元中的数据;而关于杂乱数据类型及函数来说,使用一个地址获得悉数数据是不可能的,所以就用标明首地址的方法,加上地址的线性接连,便能够经过首地址获得悉数数据,这是经过对指针(地址)的操作来完成的。