Visual c++ GNU g++;内联装配块,如Apple g++/visualc&x2B+;?
我目前正在大学学习一门课程,在这一阶段,我们将学习某些C/C++结构背后的汇编代码 工作流程通常是这样的:实验室助理简短地谈论一个主题,我们找出其中的怪癖,然后使用内联汇编解决一些完全随机的问题 (例如:他简要介绍了Visual c++ GNU g++;内联装配块,如Apple g++/visualc&x2B+;?,visual-c++,gcc,assembly,g++,inline-assembly,Visual C++,Gcc,Assembly,G++,Inline Assembly,我目前正在大学学习一门课程,在这一阶段,我们将学习某些C/C++结构背后的汇编代码 工作流程通常是这样的:实验室助理简短地谈论一个主题,我们找出其中的怪癖,然后使用内联汇编解决一些完全随机的问题 (例如:他简要介绍了struct(成员)如何存储在内存中,我们找出了模式,然后使用内联汇编编写了一个简单问题的解决方案,在这个问题中,我们使用struct) 实验室助理(以及小组其他成员)正在使用Visual C++编译器和调试器(用于反汇编)进行演示,但出于道德原因,我无法使用它,因此我选择了g++和
struct
(成员)如何存储在内存中,我们找出了模式,然后使用内联汇编编写了一个简单问题的解决方案,在这个问题中,我们使用struct
)
实验室助理(以及小组其他成员)正在使用Visual C++
编译器和调试器(用于反汇编)进行演示,但出于道德原因,我无法使用它,因此我选择了g++
和gdb
<> p>与VisualC++相比,我觉得G++的内联汇编很难理解的是:
- 如果我想写一个内联汇编的“块”,我有两个选择:有一个单独的
构造,其中每个指令前面都有一个asm(“..”
(导致大量混乱)。或者将每条指令放在自己的\n\t
块中(导致大量键入)asm(“..”
- 如果我想引用内联程序集中的局部变量,我必须使用扩展语法,或者使用偏移量来引用它,以
/esp
ebp
\uu asm{..}
并将每条指令写在新行上,为了引用一个变量,我只需写它的名称
在整个搜索过程中,我发现苹果的代码
希望我可能错过了一些东西,我在这里询问是否可以像GNU下的内联汇编块一样编译
,Visual C++
,您所指的语法不是Microsoft特有的。正如你所发现的,苹果也拥有它(尽管苹果放弃了GCC,转而使用了Clang)。另外,Metrowerks支持相同的语法。GCC不支持它(可能是因为GCC的人相信GCC是如此的好,以至于没有人再需要编写汇编:-)。但是,不需要一直键入g++
,您可以将其替换为\n\t
代码>。例如:
void foo()
{
asm("xor %eax,%eax;"
"rep; nop;"
"nop;"
"sfence;"
"nop;");
}
希望能有帮助。祝你好运 微软放弃了内联asm,并且在64位程序中不支持它,也许这不是一个好主意?这确实让它更清晰了一点,谢谢..但是它仍然有很多东西需要输入。如果没有其他方法,我可能会编写一个转换器。@MihaiBişog:是的。但内联汇编并不意味着用来编写成吨的汇编代码。这确实是一个很大的类型。您总是可以在汇编中编写代码,并使用友好的工具,如
nasm
,然后链接到该对象文件。这就是我要做的。