在 C 中引用汇编语言定义的 .globl 变量
生活随笔
收集整理的這篇文章主要介紹了
在 C 中引用汇编语言定义的 .globl 变量
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
緣起
在 Linux-0.11 中遇到了這種用法,所以想做個實驗以加深理解。
實驗代碼
分為2個源文件和1個Makefile.
a.s
.globl phone_num .data phone_num: .word 0x1234 .word 0x5678可以認(rèn)為,phone_num是一個全局變量,可以供其他文件鏈接,phone_num的值是0x56781234.
b.c
#include <stdio.h>extern unsigned int phone_num; //聲明a.s中的phone_num變量 int main(void) {printf("phone = 0x%x\n", phone_num);printf("&phone_num = %p\n", &phone_num);return 0; }Makefile
TGT =main C_SRC = $(wildcard *.c) ASM_SRC = $(wildcard *.s) OBJ =$(patsubst %.c,%.o,$(C_SRC)) OBJ +=$(patsubst %.s,%.o,$(ASM_SRC)) CC =gcc $(TGT): $(OBJ)$(CC) -o $@ $^ clean:$(RM) $(TGT) *.o編譯與運行
編譯后生成可執(zhí)行文件main
運行main,結(jié)果如下:
分析結(jié)果
可以看到,我們成功地在C程序中引用了a.s里面定義的符號(或者說變量)phone_num.
注意:
1. phone_num的地址是在鏈接后確定的。如果想查看符號地址,可以用nm命令。
【完】
參考資料
https://blog.csdn.net/smstong/article/details/54405649
總結(jié)
以上是生活随笔為你收集整理的在 C 中引用汇编语言定义的 .globl 变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于体育的python毕业设计_Pyth
- 下一篇: C语言中“数组名”和“数组名”