5
#include <stdio.h>
int main(){
__asm__ (
"result: \n\t"
".long 0 \n\t"
"rdtsc \n\t"
"movl %eax, %ecx\n\t"
"rdtsc \n\t"
"subl %ecx, %eax\n\t"
"movl %eax, result\n\t"
);
extern int result;
printf("%d\n", result);
}
Ich mag einige Daten von Assembler main
über die result
Variable zu übergeben würde. Ist das möglich? Mein Assemblercode verursacht eine Segmentation fault (core dumped)
. Ich benutze Ubuntu 15.10 x86_64, gcc 5.2.1.Passing Variable von Assembler C
GCC hat [Erweiterte ASM] (https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html) für diese, so dass Sie sich auf zu einer Ausgangsvariablen in diesem '__asm__' Fragment. –
Um das hinzuzufügen: der Code, wie er steht, reserviert Platz für 'result' im Code-Segment des Programms, und' .long 0' erzeugt zwei 'add% al, (% rax)' Anweisungen. –
Wenn Sie die Uhr lesen möchten, verwenden Sie einfach 'unsigned long long a = __builtin_ia32_rdtsc()'? Dann müssen Sie keine Asm schreiben. –