[32位移植到64]_[C/C++代码嵌入汇编代码移植篇]
来源:互联网 发布:mac 备份照片图库 编辑:程序博客网 时间:2024/05/29 03:43
情景
在C/C++一些代码中为了高效及方便,是允许嵌入汇编。这在VS的32位编译中,直接嵌入都是没问题的,不需要另外处理,但在64位中编译就会报错了。64位就不支持混编了,错误如下:
1>.\test2.cpp(16) : error C4235: 使用了非标准扩展: 不支持在此结构上使用“__asm”关键字
1>.\test2.cpp(19) : error C2065: “rdtsc”: 未声明的标识符
我的代码例子是
int _tmain(int argc, _TCHAR* argv[]){__asm{rdtsc mov lowtick, eaxmov hightick, edx}return 0;}
开发环境
我用的开发环境是
开发工具:VS 2005
操作系统:win 8 pro
CPU:AMD
解决步骤
VS支持C/C++跟汇编混编,不需要其他设置,64位不支持混合编怎么办呢,还好vs支持自定义生成规则,可以通过自定义生产规则文件设置达到64汇编编译;
因为VS有默认对32位汇编编译支持,所以我们只要参照着32位的自定义规则设置就行;
在说解决步骤之前我们先看看32的汇编生成规则文件设置。
32位自定义生成规则文件
- 打开自定义生成规则文件窗口,项目->自定义生成规则,如图:
- 可以看到后缀为.asm文件的编译规则设置,使用的是ml.exe;
- 点击修改可以看到使用的是哪个规则文件:
64位自定义生成规则文件步骤
- 我们通过上面可以知道,32位的规则文件在哪,以及放在哪,我这里的目录为:C:\Program Files (x86)\Microsoft Visual Studio 8\VC\VCProjectDefaults;
- 把masm.rules复制一份,并命名为masm64.rules;
- 我们再打开自定义生成规则设置窗口或者点击《自定义生成规则文件》窗口中的刷新列表,可以看到多了一条记录,点击选择多出那条也就是第三条,点击修改按钮进入修改窗口,可以看到规则文件名是masm64.rules;
- 选中自定义规则,这里只有一条,再点击修改生成规则,进入窗口后修改,把ml.exe改成ml64.exe,如图:
- 点击确定,如果提示不能修改只读文件,保存失败,得修改masm64.rules文件的权限;
- 到这里基本完成设置了,不过记得把第三项的规则文件选上,要不然在64环境下,编译.asm文件是不行的,找不到规则去编译。
最后
把汇编代码移出来单独形成单元文件,生成单独的.obj,链接的时候要记得加上这个.obj,要不然链接失败。我汇编不怎么样,就不献丑,就不单独写出例子来了。
0 0
- [32位移植到64]_[C/C++代码嵌入汇编代码移植篇]
- 8位机C代码移植到32机
- C程序将32位代码向64位平台移植的注意事项
- (转) 嵌入到C语言中的汇编代码
- 在c代码中嵌入汇编
- C语言中嵌入汇编代码
- C代码从GCC到MSVC的移植
- C代码从GCC到MSVC的移植
- 将关键代码手动移植到C语言
- 32位C/C++程序移植到64位系统时需要注意的问题
- 32位C/C++程序移植到64位系统时需要注意的问题
- C/C++32位程序移植到64位操作系统(转)
- 32位C/C++程序移植到64位系统时需要注意的问题
- c语言数据类型 32位移植到64位系统需要修改的地方
- 将32位代码向64位平台移植
- 32位平台代码向64位平台移植
- 创建可移植的64位代码
- Linux 系统调用的实现及其汇编代码的嵌入到C中
- 静态链接库与动态链接库
- Tcl/Tk快速入门
- 点滴:Android SQLite3 更多【转】
- java实现 邮件抄送,密送,多个附件 发送
- 每一天每一夜分分秒秒都在推翻自己
- [32位移植到64]_[C/C++代码嵌入汇编代码移植篇]
- win+VS2010+Qt 无法定位程序输入点 于动态链接库QtGuid4.dll问题
- 友元函数和友元类
- 常使用的正则
- Kruskal算法模板
- 图片轮播器
- 平板电脑能打电话吗?如何让不支持电话功能的平板获得电话功能?
- How to Obtain Tracing of Optimizer Computations (EVENT 10053) (文档 ID 225598.1)
- Java设计模式泛型化之命令模式