首页 理论教育 C模块与汇编模块的数据交互方式优化

C模块与汇编模块的数据交互方式优化

时间:2023-06-20 理论教育 版权反馈
【摘要】:C程序与汇编相互访问变量或常数时,必须保证相同的命名规则,以便找到同一个数据。因此,C和汇编混合编程时必须保持一致的命名方式。汇编程序:C程序:C程序:2)对于在汇编中有.set和.global命令定义的全局常数,也可以从C程序中访问。如在汇编中的常数变量名为_x,则在C程序中要取到这个常数值的方法应为&x。 C访问汇编常量示例。需要特别注意的是在C中的命名符号,在汇编中被引用要在前面加下画线“_”。

C模块与汇编模块的数据交互方式优化

C程序与汇编相互访问变量或常数时,必须保证相同的命名规则,以便找到同一个数据。C编译成汇编时,自动对符号命名(包括变量命名)前加下画线“_”。特别是在C语言中,变量的命名是一个标识符(identifier),用来指明一块内存区域,代表的是地址起始值,对变量的操作实际就是操作了内存中对应的区域(area)。

因此,C和汇编混合编程时必须保持一致的命名方式。在汇编中命名符号前面可加一个下画线“_”,才可以被C识别;同理C中的命名符号,在汇编中被引用也需要前面加下画线“_”。

例如:在C语言中定义符号max,在汇编中被引用名应为_max;在汇编语言中定义符号_min,在C中被引用名应为min。

1.从C程序中访问汇编程序变量

从C程序中访问在汇编程序中定义的变量或常数时,需要根据变量或常数定义的方式一般采取3种不同的方法,分别为变量在.bss块中定义、变量不在.bss块中定义、常数。

对于访问在.bss命令定义的变量或直接用.usect定义的变量,可用如下方法实现:

●采用.bss或.usect命令定义变量。

●用.global命令声明为外部变量。

●在变量名前加一下画线“_”。

●在C程序中将变量说明为外部变量。

采用上述方法后,在C程序中就可以访问这个变量。

例5-23】 C访问汇编变量示例。

汇编程序:

C程序:

C程序:

1)对于访问不在.bss块中定义的变量,例如:在汇编中定义的常量表,在这种情况下,把汇编中的符号映射成C语言中的一个指向该变量的指针,会比较方便,在C程序中利用指针间接地访问这些变量。在汇编中定义一常量表时,可定义为一个独立的块,或在现有的块中定义都可以,然后说明一个指向该表起始的全局标号。如果定义为一个独立的块,则可以在链接时将它分配到任意可用的存储器空间。在C程序中访问该表时,必须另外说明一个指向该表的指针。

例5-24】 C访问汇编常量表示例。

汇编程序:

1)对于访问不在.bss块中定义的变量,例如:在汇编中定义的常量表,在这种情况下,把汇编中的符号映射成C语言中的一个指向该变量的指针,会比较方便,在C程序中利用指针间接地访问这些变量。在汇编中定义一常量表时,可定义为一个独立的块,或在现有的块中定义都可以,然后说明一个指向该表起始的全局标号。如果定义为一个独立的块,则可以在链接时将它分配到任意可用的存储器空间。在C程序中访问该表时,必须另外说明一个指向该表的指针。

例5-24】 C访问汇编常量表示例。

汇编程序:

C程序:

C程序:

2)对于在汇编中有.set和.global命令定义的全局常数,也可以从C程序中访问。

在C或汇编中定义的变量,变量符号表本质上指的是变量在内存中的地址,而非变量值本身。但在汇编中定义的常数,符号表包含的是常数值。编译器不区分符号表中哪些是变量值,哪些是变量的地址。因此,在C程序中可以把访问汇编中的常数当作一个变量的地址值看待,在常数名之前加一个地址操作符&,取到常数值。如在汇编中的常数变量名为_x,则在C程序中要取到这个常数值的方法应为&x。

例5-25】 C访问汇编常量示例。

汇编程序:(www.xing528.com)

2)对于在汇编中有.set和.global命令定义的全局常数,也可以从C程序中访问。

在C或汇编中定义的变量,变量符号表本质上指的是变量在内存中的地址,而非变量值本身。但在汇编中定义的常数,符号表包含的是常数值。编译器不区分符号表中哪些是变量值,哪些是变量的地址。因此,在C程序中可以把访问汇编中的常数当作一个变量的地址值看待,在常数名之前加一个地址操作符&,取到常数值。如在汇编中的常数变量名为_x,则在C程序中要取到这个常数值的方法应为&x。

例5-25】 C访问汇编常量示例。

汇编程序:

C程序:

C程序:

2.从汇编程序中访问C程序变量

编写独立的汇编程序时,也经常需要访问在C程序中定义的全局变量或数组。需要特别注意的是在C中的命名符号,在汇编中被引用要在前面加下画线“_”。

(1)访问在C程序中定义的全局变量

例5-26】 汇编访问C变量示例。

C程序:

2.从汇编程序中访问C程序变量

编写独立的汇编程序时,也经常需要访问在C程序中定义的全局变量或数组。需要特别注意的是在C中的命名符号,在汇编中被引用要在前面加下画线“_”。

(1)访问在C程序中定义的全局变量

例5-26】 汇编访问C变量示例。

C程序:

汇编程序:

汇编程序:

(2)访问在C程序中定义的全局数组

例5-27】 汇编访问C全局数组示例。

C程序:

(2)访问在C程序中定义的全局数组

例5-27】 汇编访问C全局数组示例。

C程序:

汇编程序:

汇编程序:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈