GCC Inline
-
Danke
-
Was pushfd, popfd angeht, anscheinend heißen die in gas einfach pushf und popf
-
Pushf und Popf kanns normal nicht sein. Das währen die 16 Bit pushes.
Pushfl und Popfl scheinen richtig zu sein. Bei AT&T gibts ja kein DWord, sondern Long
-
SnorreDev schrieb:
Pushf und Popf kanns normal nicht sein. Das währen die 16 Bit pushes.
Pushfl und Popfl scheinen richtig zu sein. Bei AT&T gibts ja kein DWord, sondern LongABer wären pushf und popf in 16-Bit nicht pushfw und popfw?
-
Zumindest beim Intel Syntax ist es so definiert:
POPF = POPFW = POP FLAGS 16 Bit bzw. Word
POPFD = POP FLAGS DoublewordLaut meiner Referenz
-
Und laut meiner Referenz ist popf je nach Modus definiert, im 32-Bit-Mode als popfd und im 16-Bit-Mode als popfw
SPrich alles derselbe Opcode, n sind d bzw. w ein Hint für den Assembler, während ohne suffix einfach der Opcode hingepackt wird.
-
Dann ist in einer Referenz ein Käfer
Bei mir steht wordwörtlich bei popf:
POPF schreibt das word, daß auf der Stack-Spitze liegt, in die unteren 16-Bit des Flag-Registers.
Die Meisten Compiler unterstützen auch den Befehl POPFW ( = pop flag word ), der synonym für den Befehl popf benutzt werden kann
und bei popfw
POPFW pop flag word
Siehe POPFBuch: Assembler Gepackt MITP Verlag
Was für eine Referenz hast du denn?
-
Das Assembler-Buch von Trutz Eike Podschun. So ich starte jetzt nen Feldversuch
-
triphoenix:~/root$ cat > test.asm [BITS 16] popfw popf popfd triphoenix:~/root$ nasm test.asm triphoenix:~/root$ ndisasm test 00000000 9D popf 00000001 9D popf 00000002 669D popfd triphoenix:~/root$ cat > test.asm [BITS 32] popfw popf popfd triphoenix:~/root$ nasm test.asm triphoenix:~/root$ ndisasm test 00000000 669D popfd 00000002 9D popf 00000003 9D popf triphoenix:~/root$ cat > test.s popfw popf popfl triphoenix:~/root$ as test.s triphoenix:~/root$ objdump -d a.out a.out: file format elf32-i386 Disassembly of section .text: 00000000 <.text>: 0: 66 9d popfw 2: 9d popf 3: 9d popf
:p
-
Dann hat wohl mein Buch nen Bug