x86平台转x64平台关于内联汇编不再支持的解决方法是什么
本篇文章给大家分享的是有关x86平台转x64平台关于内联汇编不再支持的解决方法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
创新互联建站-专业网站定制、快速模板网站建设、高性价比元宝山网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式元宝山网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖元宝山地区。费用合理售后完善,十载实体公司更值得信赖。
工具:VS2005 编译器:cl.exe(X86 C/C++) ml64.exe(X64 ASM64)
前提:X86下内联汇编是嵌在函数当中实现的
在X86平台下,可以轻松的在C/C++代码中嵌入汇编代码,称其为“内联汇编”,使用”__asm{}”语法即可,比较简单,这里不做介绍。当你在X86平台下,由于性能和速度的要求,需要在C/C++代码中内联汇编。而当你好不容易在X86平台下实现了这些以后,发现要转到X64平台下面,怎么办(不是说在X64下运行X86的程序,因为这是肯定可以的,而是说从X86工程转到X64工程)?可以兼容的吧?先试试再说嘛。
试一试:
然后暴露出汇编中编写好的函数的接口。
我是这样暴露我的汇编函数的:
extern "C" int __stdcall RGB2YUV_ALL(int bmpWidth, int bmpHeight, unsigned char *videoRef, unsigned char*YUVData);
extern "C" int __stdcall RGB2YUV_BLOCK(int bmpWidth, int bmpHeight, unsigned char *videoRef, unsigned char*YUVData, int LargebmpWidth);
如果一切顺利的话,主工程就可以使用上面的函数,编译连接都没有问题,但是万恶的运行时有错,那就得靠你的调试了!至此,差不多,从X86到X64,从内联汇编到单独的汇编文件,解决了X64下不支持内联汇编的问题啦,嘻嘻。
但是,更加辛苦和耗时的是汇编代码的修改和编写、C/C++调用汇编函数过程遇到的种种问题,但是只要努力再加上有一定基础的情况下是搞得定许多问题的!
如果你感兴趣,或者就是和我一样碰到这样的问题,下面给出实例代码。
1. ASM文件
.data
;数据段
.code
FUNC proc
MOV EAX, 1234
RET
FUNC endp
end
2.测试VS2005控制台工程
#include
extern "C" int __stdcall FUNC();
int main(int argc, WCHAR* argv[])
{
int nret = FUNC();
printf(“%d\n”, nret);
system("pause");
return 0;
}
以上就是x86平台转x64平台关于内联汇编不再支持的解决方法是什么,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。
网站栏目:x86平台转x64平台关于内联汇编不再支持的解决方法是什么
URL地址:http://azwzsj.com/article/gchphs.html