C verwendet zusammenstellen: operand Typenkonflikt für push

Ich versuche es zu aktivieren/deaktivieren, cache im Linux-kernel-space.

Den code, den ich verwenden, ist

 __asm__ __volatile__(
      "pushw %eax\n\t" /*line 646*/
      "movl %cr0,%eax\n\t"
      "orl $0x40000000,%eax\n\t"
      "movl %eax,%cr0\n\t"
      "wbinvd\n\t"
      "pop  %eax");

Nachdem ich kompilieren, bekam ich die Fehlermeldung wie folgt:

memory.c: Assembler messages:
memory.c:645: Error: operand type mismatch for `push'
memory.c:646: Error: unsupported for `mov'
memory.c:648: Error: unsupported for `mov'
memory.c:650: Error: operand type mismatch for `pop'
make[4]: *** [memory.o] Error 1

Mein Rechner Intel(R) Xeon(R) CPU E5-1650 v2 @ 3.50 GHz. 64bit Maschine.

Könnte mir jemand helfen, darauf hinweisen, welcher Teil falsch ist und wie ich es beheben kann?

Ich vermute, es ist, weil die Abweichung von der Anweisung und dem register. Aber ich bin verwirrt, wie, um es zu beheben. 🙁

Vielen Dank im Voraus!

  • nicht pushw für word-Größe (16bit)? eax ist ein 32bit, versuchen pushl
  • Hi @Leeor, ich Danke Ihnen sehr für Ihren Kommentar! aber pushl wird meldet Fehler: die Erinnerung.c:645: Fehler: ungültige Anweisung suffix für "push"; ich habe auch versucht pushq, die funktioniert entweder nicht,
InformationsquelleAutor Mike | 2014-01-20
Schreibe einen Kommentar