社区
汇编语言
帖子详情
内联汇编中可以使用invoke伪指令吗?
Cyrosly
2007-09-04 11:14:13
这个指令是MASM独有的吗,LINUX?另外,能否详细描述下这个指令,谢谢!!!
...全文
254
12
打赏
收藏
内联汇编中可以使用invoke伪指令吗?
这个指令是MASM独有的吗,LINUX?另外,能否详细描述下这个指令,谢谢!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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也不会
做这种事吧?
McGraw C++程序调试实用手册
第7章 调试
内联汇编
语言代码 7.l 汇编语言初步 7.1.l 数据类型 7.1.2 寄存器 7.1.3 寻址模式 7.1.4 指针 7.1.5 协处理器 7.2 调试 7.2.l 减法运算 7.2.2
使用
256位整数 7.2.3 程序循环 7,2.4 ...
Win32汇编学习——windows汇编语法(小甲鱼教程)
.386 语句是汇编语句的
伪指令
,类似指令有:.8086 、 .186 、.286 、.386/.386p 、 .486/.486p 和 .586/.586p 用于告诉编译器在本程序
中
使用
的指令集。 在DOS的汇编
中
默认
使用
的是8086指令集,那时候如果在源程序...
32位汇编第七讲,混合编程,
内联汇编
32位汇编第七讲,混合编程 ... 转载请注明出处,谢谢 混合编程的概念,有时候我们会想,C语言可不可以调用汇编...或者说C语言里面内部直接
内联汇编
去编写. 可以实现,静看怎么实现 一丶C语言调用汇编语言的函数 1.创...
C语言msvc编译器内嵌汇编,【原创】如何
使用
VS自带工具写Windows汇编程序 Ⅰ
,一个外平衡栈 ,入栈顺序都是从右向左依次入栈 option casemap:none为区分大小写,没什么好解释的了 proto声明函数原型
invoke
调用函数 这俩个是Masm的
伪指令
,并不是汇编 例如: [Asm] 纯文本查看 复制代码
invoke
...
32位汇编学习
32位汇编学习
汇编语言
21,458
社区成员
41,603
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章