我覺得你剛纔打的原因,內聯彙編是一個痛苦的屁股 - 這是完全不可移植的(而不僅僅是架構之間;編譯器通常有不同的和不兼容的語法)。編寫一個外部程序集文件並以這種方式做你需要的。將參數傳遞給彙編例程與將它們傳遞給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