我觉得你刚才打的原因,内联汇编是一个痛苦的屁股 - 这是完全不可移植的(而不仅仅是架构之间;编译器通常有不同的和不兼容的语法)。编写一个外部程序集文件并以这种方式做你需要的。将参数传递给汇编例程与将它们传递给C函数完全相同;只是向前声明你的函数签名的地方和调用代码(在C)将做正确的事情。然后在外部程序集文件中实现例程(确保遵守调用约定)并导出相应的符号以使链接器将所有内容正确绑定。 Presto - 工作大会!
一个例子,按要求。我没有试图以任何方式编译或测试它,所以它可能不是100%。祝你好运。
myHeader.h:
void *someOperation(void *parameter1, int parameter2);
myAssemblyFile.s:
.text
.globl someOperation
someOperation:
add %rdx, %rcx
mov %rcx, %rax
ret
.end
mySourceCode.c:
#include "myHeader.h"
void someFunction(void)
{
void *arg1 = (void *)0x80001000;
int arg2 = 12;
void *returnValue;
printf("Calling with %x %x\n", arg1, arg2);
// call assembly function
returnValue = someOperation(arg1, arg2);
printf("Returned: %x\n", returnValue);
}
由于'INT 3h'用于跳转到调试器,我'd说翻译是'assert(0)'。 – avakar 2009-10-12 15:38:07
int 3h只是一个例子。我也有不同的int,主要是int 15h。 – Eldad 2009-10-13 07:25:31