bei CentOS 5.5 in vmware-Player auf einem Host Windows 7 Ich schrieb eine Assembler-Code-Datei gpi.S:verwirrte durch x86-Assembler Syntax
.intel_syntax noprefix
... /* cut off some code */
lea eax, string_label
mov ebx, [DWORD PTR ds:eax]
push ebx
mov ebx, [DWORD PTR cs:eax]
push ebx
... /* cut off some code */
Kompilierung:
gcc -o gpi gsi.S
Es ist OK.
Ich installierte später eine neuen CentOS-Version 6.2 im VMware, dann den gleichen Assembler-Code mit dem gleichen Befehl kompilieren, aber ich fand einige Fehler:
Nachrichten Assembly:
Error: invalid use of register
Diese Fehler zeigen zu den Zeilen:
mov ebx, [DWORD PTR ds:eax]
mov ebx, [DWORD PTR cs:eax]
In der CentOS 6.2 ist die GNU gcc Version 4.6.6. Das GNU als Version ist 2.20.51.0.2 (i686-redhat-lnux).
Ich denke, die 2 Zeilen verwenden die Standard-Assembly-Syntax von Intel, so dass sie in CentOS 5.5 OK sind. Ich weiß nicht warum.
Die Assembly-Syntax ist nur für den Compiler relevant, nicht für das Betriebssystem oder die Hardware, also ist das nicht der Täter ... Haben Sie versucht, die AT & T-Syntax zu verwenden? Versuchen Sie die Tabelle am Ende dieses Abschnitts: http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#s3 – Irfy
Die Klammern sind seltsam, dword ptr gehört außerhalb von ihnen. –
Ich bin eher überrascht, dass der Code verwendet wurde, um an erster Stelle zu arbeiten .. – harold