c语言assembly,Assembly 多模块程序

多模块程序是由不止一个目标文件组成的程序。这里出现的所有程序都是多模块程序。它们由C驱动目标文件和汇编目标文件(加上C库目标文件)组成。回忆一下连接程序将目标文件组合成一个可执行程序。连接程序必须把在一个模块(也就是目标文件)中引用的每个变量匹配到定义该变量的模块。为了让模块A能使用定义在模块B里的变量,就必须使用extern(外部)指示符。在extern 指示符后面是用逗号隔开的变量列表。这个指示符告诉编译器把这些变量视为是模块外部的。也就是说,这些变量可以在这个模块中使用,但是却定义在另一模块中。asm_io.inc文件中就将read_int等程序定义为外部的。

在编译语言中,缺省情况下变量不可以由外部程序访问。如果一个变量可以被一个模块访问,而这个模块又不是定义它的,那么在定义它的模块中,它一定被声明为global(全局的)。global 指示符就可以用来做这件事情。图1.7的程序skeleton中的第13行定义了一个全局变量asm main。若没有这个声明,就可能会出错。为什么?因为C代码将会找不到内部的_asm_main变量。

下面是用两个模块重写的以前例子的代码。子程序(get_int和print_sum)在不同的源文件中,而不是在_asm_main程序中。

c40afc58724d386242b8fdd8cf1e25f6.png

4dd1f9a85f36ce4303f970643c131216.png

e48ac311fa08b2ed405e8689faea9ccd.png

ca94847371e17d5d8b9c46c3115f4cc3.png

上面的例子只有全局的代码变量;同样,全局数据变量也可以使用一模一样的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值