重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

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工程)?可以兼容的吧?先试试再说嘛。

试一试:

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平台关于内联汇编不再支持的解决方法是什么
浏览地址:http://cqcxhl.com/article/gchphs.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP