【发布时间】:2020-04-24 10:47:23
【问题描述】:
我想使用汇编语言向我的班级添加方法。我该怎么做? 示例:
main.cpp
Struct ex {
int field1;
asm_method(char*);
}
添加.asm
asm_method:
//some asm code
【问题讨论】:
-
cppreference 有一个例子en.cppreference.com/w/cpp/language/asm
-
我知道 asm() 指令,但我想在两个不同的文件中进行操作
-
差不多就是这样。您需要在 C++ 代码中声明 asm_method(就像您将前向声明 C++ 方法一样),并将其声明为
extern "C"(这比修改名称以匹配您的编译器更容易),然后组装并将汇编代码与正常的链接步骤链接起来。如果您需要更具体的帮助,能否告诉我们哪个 CPU、操作系统(=> 调用约定)和编译器? -
@ChurkinAleksey 我分享的链接有一个在程序集中定义函数的示例。这不是您要找的吗?
-
哦,我错过了你说的“将方法添加到我的类” - 因为在这个方法中应该有一个 this 指针?这将需要更多的工作来设置:您需要使用编译器的名称修改工具来确定应该调用什么 asm_method(对类名、返回值和参数类型进行编码)并找出您需要的调用约定汇编代码。例如Windows __thiscall 在 ECX 中传递 this 指针,方法本身从堆栈中删除其参数(“callee clean”)