C++和汇编混合编程时,如何在汇编程序中访问C++的全局变量?

han012 2005-03-22 04:51:09
C++程序 main.cpp

DWORD g_Ori; //<= 定义全局变量
extern "C" void AccessIO(); // <= 此函数在汇编模块中实现

BOOL OpenDB()
{
...
g_Ori = xxx; //<= 对全局变量赋值
...
AccessIO(); //<= 调用汇编模块
...
}

汇编程序 myAsm.asm

.386
.model flat

extern g_Ori : DWORD ;引入my.cpp中定义的全局变量

.code

public _AccessIO ; 输出函数AccessIO
_AccessIO proc
...
mov eax, g_Ori ; //访问my.cpp中定义的全局变量
...
_AccessIO end

END

编译myAsm.asm用ml.exe,命令行如下:
ml /coff /c /Cx myAsm.asm

编译main.cpp用VC++6.0

以上都没有问题,但在VC++中连接myAsm.obj,main.obj时出现以下错误:
"myAsm.obj : error LNK2001: unresolved external symbol g_Ori"

请问如何解决这个错误, 谢谢
...全文
407 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
han012 2005-03-24
  • 打赏
  • 举报
回复
thanks a lot
levis_ju 2005-03-23
  • 打赏
  • 举报
回复
myc.cpp
#include <iostream.h>
extern "C" int g_Ori; //<= 声明全局变量,变量在汇编中定义.
extern "C" void AccessIO(); // <= 此函数在汇编模块中实现

void main()
{

for(int i=0;i<10;i++)
{
AccessIO(); //<= 调用汇编模块
cout<<g_Ori<<'\n';
}
g_Ori++;
cout<<g_Ori<<'\n';
}
myasm.asm
.386
.model flat
.data
public _g_Ori
_g_Ori dw 0;定义全局变量
.code

public _AccessIO ; 输出函数AccessIO
_AccessIO proc near
inc _g_Ori ; //访问my.cpp中定义的全局变量
ret
_AccessIO endp

END
经过调试我发现c++可以访问汇编里定义的全局变量,但从汇编里就无法访问c里定义的全局变量了,
另外汇编调用c++里的变量时前面应该加"_".
以上程序是经过调试的.

VxD1 2005-03-23
  • 打赏
  • 举报
回复
turbo c中的全局变量会加上下划线,不知道vc++加不加下划线
Areslee 2005-03-22
  • 打赏
  • 举报
回复
1、C语言中定义时加上
extern "C" 变量名
2、汇编访问时前面加下划线

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧