Sadece inline asamblajın eşcinselde bir ağrının neden olduğunu anladığınızı düşünüyorum - bu tamamen tartışılmaz (sadece mimariler arasında değil, derleyiciler genellikle farklı ve uyumsuz sözdizimine sahipler). Harici bir montaj dosyası yazın ve bu şekilde ihtiyacınız olanı yapın. Parametrelerin montaj rutinlerine geçirilmesi, C fonksiyonlarına geçmekle aynıdır; Sadece işlev imzanızı bir yere ilan edin ve çağrı kodu (C) doğru olanı yapacağız. Ardından, dış derleme dosyasındaki rutini uygulayın (çağrı kurallarına uyduğunuzdan emin olun) ve bağlayıcının her şeyi doğru şekilde bağlaması için uygun sembolü dışa aktarın. Presto - çalışma grubu!
İstenildiği gibi bir örnek. Bunu herhangi bir şekilde derlemeyi ya da test etmeyi denemedim, bu yüzden% 100 olmayabilir. İyi şanslar.
myHeader.h:
void *someOperation(void *parameter1, int parameter2);
myAssemblyFile.s:
.text
.globl someOperation
someOperation:
add %rdx, %rcx
mov %rcx, %rax
ret
.end
mySourceCode.c:
int 3h` hata ayıklayıcı atlamak için kullanılan `yana
#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);
}
ben 'Çevirinin' assert (0) 'olduğunu söyleyebilirim. – avakar
int 3h sadece bir örnektir. Ayrıca farklı int, özellikle int 15h var. – Eldad