gcc inline Assembler
-
Ich lerne gerade inline Assembler mit gcc und frage mich warum folgendes nicht funktioniert:
#include <stdio.h> int main(void) { char hello[256]="Hello World!\n"; int eingabe[256]; __asm__("mov $4, %eax "); __asm__("mov $1, %ebx"); __asm__("mov $hello, %ecx"); __asm__("mov $13, %edx"); __asm__("int $0x80"); __asm__("mov $3, %eax"); __asm__("mov $0, %ebx"); __asm__("mov $eingabe, %ecx"); __asm__("mov $13, %edx"); __asm__("int $0x80"); __asm__("mov $4, %eax"); __asm__("mov $1, %ebx"); __asm__("mov $eingabe, %ecx"); __asm__("mov $13, %edx"); __asm__("int $0x80"); __asm__("mov $1, %eax"); __asm__("mov $0, %ebx"); __asm__("int $0x80"); return 0; }
Hoffe jemand kann mir sagen warum es nicht funktioniert,denn es erscheint
folgende fehlermeldung:gcc assembler.c -o assemb
assembler.c:27:2: warning: no newline at end of file
/tmp/ccugobmw.o(.text+0x59): In functionmain': : undefined reference to
hello'
/tmp/ccugobmw.o(.text+0x6f): In functionmain': : undefined reference to
eingabe'
/tmp/ccugobmw.o(.text+0x85): In functionmain': : undefined reference to
eingabe'
collect2: ld returned 1 exit statusPS:Wer ein gutest tutorial inline Assembler mit gcc kennt bitte posten..
Danke
-
Ein gutes Inline HowTo findest du hier. Inline ASM mit dem gcc funktioniert nach dem folgenden Prinzip:
__asm__("asm code" : output : input : registers);
Variablen und Funktionen müssen entsprechend bei Input/Output angegeben werden. Wenn du z.B. die Adresse von hello nach ecx kopieren möchtest, müsste das so lauten:
__asm__("movl %0, %%ecx"::"m"(*hello));
Erklärung: %0 steht für den ersten optionalen Parameter ("m"(*hello)), vor dem ecx müssen zwei %% stehen, da durch ein % die Parameter angesprochen werden. Nach dem ersten : müssten die Output-Parameter kommen, die es hier aber nicht gibt. Nach dem zweiten : kommen die Input Parameter, in unserem Fall nur "m"(*hello). Das "m" zeigt an, dass es sich um einen Wert aus dem Speicher handelt. Und *hello gibt eben die entsprechende Adresse an. Bei der Variable eingabe funktioniert das analog.