我正在编写一个需要一些自定义汇编代码的C ++程序。
我像这样编写汇编代码
__asm
{
//Code Here
}
我希望能够在程序集中调用C ++函数,就像调用
一样MyFunction(eax, ebp).
答案 0 :(得分:0)
不确定您正在谈论的指令集。但只要指令集支持它,你就可以 1.在代码中声明并初始化函数指针 2.使用调用或跳转类型的指令从函数指针
指向的存储器地址执行答案 1 :(得分:0)
如果您遵守调用约定,则可以调用函数。这是Visual Studio 2010(32位)的示例:
#include <iostream>
char* txt = "Hello world";
int myfunc2 (char* s)
{
std::cout << s << std::endl;
return 0;
}
int myfunc1 ()
{
char* s = new char[80];
__asm
{
mov ebx, s ; = mov ebx, [ebp -4]
mov byte ptr [ebx], 'H'
mov byte ptr [ebx+1], 'e'
mov byte ptr [ebx+2], 'l'
mov byte ptr [ebx+3], 'l'
mov byte ptr [ebx+4], 'o'
mov byte ptr [ebx+5], 0 ; Don't forget the terminator!
push s
call myfunc2 ; Call the function above
add esp, 4
push txt
push s
call strcpy ; Function of C-library
add esp, 8
push s
call puts ; Function of C-library
add esp, 4
}
delete[] s;
return 0;
}
int main()
{
myfunc1();
return 0;
}