内联汇编中可以使用invoke伪指令吗?

Cyrosly 2007-09-04 11:14:13
这个指令是MASM独有的吗,LINUX?另外,能否详细描述下这个指令,谢谢!!!
...全文
254 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hkbyest 2007-09-07
  • 打赏
  • 举报
回复
vc++ 是可以使用even和align伪指令的。另外length,size,type也行,不过这些我认为是操作符而不是伪指令。
dongyi940333 2007-09-06
  • 打赏
  • 举报
回复
学习了^_^
pig4210 2007-09-06
  • 打赏
  • 举报
回复
其实楼主你应该还要注意,当调用完一个API后,除了eax为返回值外。ecx,edx的值都无法得到保证,也就是说,它们的值会发生变化,除非,你确定使用完这个API后,ecx与edx的值不会发生任何变化。然而,就算是你自己写的源代码,都不能去“假定”这种情况,所以,你用edx保存id,这样会发生不可预料的错误。(ebx,esi,edi是默认不变化的。而ebp寄存器你最好不要去使用它,它被用于局部变量寻址。)
还有就是API的调用方式,stdcall,这种调用方式,参数压栈顺序就是从后到前。还有两种cdel与pascl方式。自己了解去。这里不再详细说明。
大熊猫侯佩 2007-09-05
  • 打赏
  • 举报
回复
在vc中内联么?不能用。
sunlin7 2007-09-05
  • 打赏
  • 举报
回复
invoke 是masm6.0以后版本才支持的伪指令,
内联汇编只支持size和typeof两个伪指令,其它指令都得自己动手写,格式就像标准教科书里面的那样。
Cyrosly 2007-09-05
  • 打赏
  • 举报
回复
太感谢pig4210前辈了,看你代码中push的使用顺序,应该不可以颠倒吧。因为堆栈是先进后出,因此压入变量的顺序应该和API函数从左到右的参数顺序相反?对吧,相当于glGenTextures(n,id);glBindTexture(GL_TEXTURE_2D,id);
这个回答清晰很受用啊,thanks!!!
pig4210 2007-09-05
  • 打赏
  • 举报
回复
你怎么这么写啊,call指令只使用一个参数啊。你把call指令当用invoke来用了。使用call你参数应该自己手工入栈
__asm
{mov edx,id ;
push dword ptr[edx] ;
push n;
call glGenTextures;
push edx;
push GL_TEXTURE_2D;
call glBindTexture;
}
Cyrosly 2007-09-05
  • 打赏
  • 举报
回复
谢谢大家。试过了call,好象内联汇编也不支持,实验程序如下:
void main()
{
static GLsizei n=1;
static GLuint id;
__asm mov edx,id
__asm call glGenTextures,n,dword ptr[edx]
__asm call glBindTexture,GL_TEXTURE_2D,edx
exit(0);
}
编译结果如下:
--------------------Configuration: nvp - Win32 Debug--------------------
Compiling...
nvp.cpp
C:\nvp.cpp(13) : error C2414: illegal number of operands
C:\nvp.cpp(14) : error C2414: illegal number of operands
Error executing cl.exe.

nvp.obj - 2 error(s), 0 warning(s)
郁闷啊,各位前辈指点一下啊
水墨风光 2007-09-05
  • 打赏
  • 举报
回复
用 call 不错 ...
ReverseEngineering 2007-09-05
  • 打赏
  • 举报
回复
内联一般不支持伪指令
Cyrosly 2007-09-04
  • 打赏
  • 举报
回复
哦,谢谢,那么可以在内联汇编中使用吗?
大熊猫侯佩 2007-09-04
  • 打赏
  • 举报
回复
invoke 只是特定于masm32,他其实是masm编译器的伪指令。
在编译的时候它会把指令展开。

一般使用方法:
invoke 函数名[,参数1][,参数2]……

so 不能在linux下使用,除非masm编译器有linux版,我想MS也不会
做这种事吧?

21,458

社区成员

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

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