I think you just came across why the built-in assembly is a pain in the ass - it is completely not portable (and not only between architectures, compilers often have different and incompatible syntax). Write an external assembly file and do what you need. Passing parameters to build procedures is exactly the same as passing them to C functions; just move the ad somewhere somewhere, and the call code (in C) will do it right. Then, follow the procedure in the external assembly file (be sure to abide by the calling convention) and export the appropriate symbol to link all the links correctly. Presto - working assembly!
Example, on request. I have not tried to compile or test this in any way, so this may not be 100%. Good luck.
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); }
Carl Norum
source share