嵌入汇编出错,请教大家!

kmfangxun 2007-11-23 12:37:46

//Pascal 嵌入汇编,在Delphi下编译通过
function AttachStart:DWORD;stdcall;
asm
CALL @@1
@@1:
POP EAX
SUB EAX, 5
end;


//对应的C格式嵌入汇编,编译时提示@@1未定义
DWORD __stdcall AttachStart()
{

DWORD RS;
asm{
CALL @@1 //编译时提示@@1未定义
@@1:
POP EAX
SUB EAX , 5
MOV RS , EAX
}

return RS;

}

请问这样转换对吗? 如何解决?
//------------------------------------------------------------------------------
...全文
176 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
kmfangxun 2007-11-23
  • 打赏
  • 举报
回复
to mydo:

换为 lbl0也不行,提示" 未定义符号lbl0"
大熊猫侯佩 2007-11-23
  • 打赏
  • 举报
回复
换一个标号名称试试,比如 lab0
kmfangxun 2007-11-23
  • 打赏
  • 举报
回复

to shw014:

多谢,编译通过。呵呵!
shw014 2007-11-23
  • 打赏
  • 举报
回复
#pragma inline


或加入编译指令 -B
kmfangxun 2007-11-23
  • 打赏
  • 举报
回复

to: wangkunc

谢谢,在VC下将标号@@1改为blb1后,编译确实通过了,不过还是想看看在Borland C 有没有解决办法。
王鲲彩 2007-11-23
  • 打赏
  • 举报
回复
原来是用BORLAND的编译器啊,
我记得BORLAND的C编译器在嵌入汇编时有点问题,就是用asm{...}有点问题.
建议楼主这样做:
不要使用asm{...}形式;每行汇编代码前都使用asm mov ax,bx;这样的形式,哈哈,这样比较麻烦,
而且遇到跳转到符号位置时也可能出问题.
最后建议楼主还是使用VC++吧.
kmfangxun 2007-11-23
  • 打赏
  • 举报
回复

to xccpp:

编译时提示的是标号@@1未定义,应该不用修改其他地方吧。
xccpp 2007-11-23
  • 打赏
  • 举报
回复
asm{
改成
__asm{
xccpp 2007-11-23
  • 打赏
  • 举报
回复
asm{
CALL @@1 //编译时提示@@1未定义
@@1:
POP EAX
SUB EAX , 5
MOV RS , EAX
}
用EBX 来代替 EAX
kmfangxun 2007-11-23
  • 打赏
  • 举报
回复

to wangkunc :

还是同样的问题,我是用Cbuilder编译的。
王鲲彩 2007-11-23
  • 打赏
  • 举报
回复
这样试试:
DWORD __stdcall AttachStart()
{

DWORD RS;
asm{
CALL lbl1;
}
lbl1:
asm{
POP EAX ;
SUB EAX , 5;
MOV RS , EAX;
}

return RS;

}

21,459

社区成员

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

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