将汇编代码移植到c++
Porting assembly code to c++
我正在将汇编代码移植到c++,并且我在移植其中一部分时遇到了一些问题。
我有一个指针声明为:
void* function;
指向一个函数调用:
void* function = getfunction(lib, fname);
我有一个内联汇编代码,我必须迁移到c++:
__asm { call function }
如何在c++中调用这个指针?
请注意,参数lib
和fname
的类型为void*
。
, void* function
指向getfunction()
返回的值。
在下面,我假设整个函数调用被
封装__asm { call function }
在这种情况下,这是一个函数指针,可以这样声明:
void (*function)(void);
__asm
块不把参数压入堆栈。因此参数列表为空。并且__asm
块不提取返回值。因此该函数的返回类型为void
。
用同样的方法赋值给函数指针:
function = getfunction(lib, fname);
你可以这样称呼它:
function();
看下面的例子:
// ptrFunc is the name of the pointer to the getFunction
void* (*ptrFunc)(void*, void*) = &getfunction;
// ... Declaring whatever lib and fname are
// Now call the actual function by using a pointer to it
ptrFunc(lib, fname);
// Another form of how to call getFunc might be :
(*ptrFunc)(lib, fname);
还可以将函数指针传递给另一个函数,例如:
void *getFunction(void* lib, void* fname)
{
// Whatever
}
void myFunction( void* (*ptrFunc)(void*, void*) )
{
// void *lib = something;
// void *fname = something else;
ptrFunc(lib, fname);
}
int main()
{
void* (*ptrFunc)(void*, void*) = &getfunction;
// Passing the actual function pointer to another function
myFunction(ptrfunc);
}
相关文章:
- 为什么我的C++程序的程序集输出充满了 .ascii,没有汇编代码?
- 在 emscripten 网页汇编正在运行期间更新进度条?
- 为什么我们不编写可以处理C++标识符的汇编器和链接器?
- 在什么情况下,我想在 C/C++ 代码中使用内联汇编代码
- 为什么 memcpy() 和其他类似的函数使用汇编?
- [[可能]]和[[不太可能]]影响程序汇编的简单示例?
- 为什么 MSVC C++编译器将一个简单的 Hello World 扩展为 4000 行汇编?
- 英特尔汇编与内部函数,AVX
- 这个x86汇编代码是如何接收和存储子程序返回的数据的
- Capstone cs_disasm仅反汇编一小部分代码
- C++和汇编中的对数
- 卤化物:X86汇编代码生成
- C++:汇编代码包含断言结果
- 在 g++4.4.7 中为复数算术生成快速汇编
- 混合 c++ 和汇编不能将多个参数从C++函数传递到程序集
- 如何使用 gcc 内联汇编器代码访问成员变量
- SSE 内联汇编和可能的 g++ 优化错误
- C++汇编代码分析(使用 clang 编译)
- 设置Qt Creator以链接和编译汇编代码
- 在Cython中使用移动方法时的汇编误差