您的位置 首页 电子

ARM汇编中标号的引用在汇编和C言语中差异

下边总结一下,汇编语言和C语言中对汇编中的全局标号的引用的区别:1018:a17000480NOTYPEGLOBALDEFAULT1_bss_start1083:a1

下边总结一下,汇编言语和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言语中,对根本数据类型变量的引证,其值便是对应内存中的数据,而关于杂乱数据类型及函数,其标识符名是指向首地址的指针,其值是它们的首地址。
或许能够这样了解,因为关于根本数据类型来说,其地址和对应内存单元中的数据刚好是一一对应的,对变量的引证意图也是期望对内存中的数据进行操作,所以默许是获得变量对应内存单元中的数据;而关于杂乱数据类型及函数来说,使用一个地址获得悉数数据是不可能的,所以就用标明首地址的方法,加上地址的线性接连,便能够经过首地址获得悉数数据,这是经过对指针(地址)的操作来完成的。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/257211.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部