C语⾔中通过全局变量引⽤汇编语⾔中的全局标签c语言中文网汇编语言
汇编语⾔和C语⾔混合编程中,在C语⾔中通过全局变量来引⽤汇编中的数据定义⾮常普遍,然⽽却存在同名不同义的陷阱。
1 测试代码
在汇编语⾔中的定义整数变量studentID,并赋初值,如下:
.global studentID
.data
studentID:
.word12345678
.text
ldr r0, =studentID  /* studentID被当做内存地址 */
ldr r0, [r0]        /* 执⾏后,r0=12345678 */
假设链接后,studentID所代表地址为0x30000000。
在C语⾔中引⽤studentID,如下:
extern int studentID;  /* studentID被当做标签studentID内存地址处的值 */
printf("%d\n", studentID); /* 会打印出12345678 */
printf("%p\n", &studentID); /* 会打印studentID标签代表的地址0x30000000 */
2 注意事项
需要注意:
(1)字符串“studentID”,在汇编语⾔中代表其所在的内存地址,即常数0x30000000。可以理解为:
studentID = 0x30000000
(2)同样的字符串“stdentID”,在C语⾔中则表⽰0x30000000内存地址处存放的数据(值)。要想取得内存地址,则需要使⽤“&studentID”。可以理解为:
studentID = 12345678;
&studentID = 0x30000000;
显然C语⾔提⾼了抽象层次,同时也造成了同⼀个名字在不同语⾔中所代表的含义的不同,给汇编和C混合编程造成了⼀定的混淆。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。