我在VS2008中将32位C ++代码移植到64位。旧代码具有用汇编编写的混合代码 例如:
__asm
{
mov esi, pbSrc
mov edi, pbDest
...
}
我在某处读过我需要删除所有汇编代码并将它们全部放在一个单独的项目中并以某种方式链接到它。有人可以给我步骤x步骤来做到这一点。我知道C ++& C#但不懂汇编语言。提前谢谢。
答案 0 :(得分:4)
Visual C ++ 2005,2008或2010在编译64位平台时不支持程序集内联。 x64 ASM有太多的复杂性和复杂性,可能会导致__asm
块周围的C(++)代码搞砸,所以他们只是不允许它。简而言之,没有办法“移植”它。
我建议在尝试跨架构编译这样的低级代码时,使用带有#define
和#ifdef
的64位内在函数。查看:http://msdn.microsoft.com/en-us/library/h2k70f3s.aspx
编辑:如果您真的知道自己在做什么,可以将某个ASM字节码保存在某种缓冲区数组中并执行“raw” - 通过{{1指针和void*
或类似的东西。当然,您需要了解x64调用/返回约定,因为您实际上是在调用函数。请注意,这是糟糕主意的99.9%。
答案 1 :(得分:1)
如果您不能使用内部函数来执行任务,或者无法在C / c ++中编写等效函数,那么您将不得不深入研究x64汇编语言。从高层次开始:
1)假设您从x86汇编语言例程开始,您需要将它们移植到x64。
2)使用ML64(Microsoft x64汇编程序)或等效的汇编程序将您的例程汇编成可以链接到C / C ++项目的.OBJ。
3)设置一个自定义构建步骤,调用.ASM文件上的汇编程序。
祝你好运!