Gcc-inline-assembly-was bedeutet "'asm' operand unmöglich Einschränkungen" bedeuten?

Ich habe diesen code unten in die Funktion:

void makeSystemCall(uint32_t num, uint32_t param1, uint32_t param2, uint32_t param3){
    asm volatile (
        "mov %0, %%eax\n\t"//Move num to eax
        "mov %1, %%ebx\n\t"//Move param1 to ebx
        "mov %2, %%ecx\n\t"//Move param2 to ecx
        "mov %3, %%edx\n\t"//Move param3 to edx
        "int $0x80"//Call interrupt. Data in eax, ebx, ecx and edx
        : //No output params
        : "r" (num), "r" (param1), "r" (param2), "r" (param3)//Input params
        : "%eax", "%ebx", "%ecx", "%edx" //This handles register state pushing and popping?
    );
}

Nun habe ich keine Idee warum das nicht funktioniert. Gcc sagt: "Fehler: 'asm' operand unmöglich Zwänge" habe ich nach gcc-inline-assembly-tutorials und ich dachte, dass dies wäre richtige Weg, um Parameter von c-code für die inline-Montage block.

Auch ich benutze gcc cross-compiler gebaut für 32-bit x86.

  • Tun Sie das nicht. Verwenden Sie die verfügbaren syscalls(2) oder wenn Sie eine Dereferenzierung syscall(2). Sie würden VDSO so wäre schneller.
  • Ich bin irgendwie der Entwicklung meiner EIGENEN os hier, wenn u don ' T mind...
  • Dann versuchen Sie, Anschluss einige vorhandene libc zu. musl-libc hat einen sehr gut lesbaren Quellcode, die lehren, wie Sie es tun. Und verwenden SYSENTER Maschine aufrufen.
  • Aber ich will lernen, solche Sachen, also ich bin der Planung zu meinem eigenen zu machen. Auch meine Frage, nur fragt, warum diese nicht kompilieren.
Schreibe einen Kommentar