Fragen zu mov byte [sample], al (x86 Assembler Intel-Syntax)
-
Hallo,
gegeben sei der Code in 32-Bit x86-Assembler unter Linux mit nasm in Intel-Syntax.section .text mov eax, 0x33445566 mov [sample], al mov [sample], ax mov [sample], eax ;mov byte [sample], al ;mov word [sample], ax ;mov dword [sample], eax section .data sample: db 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x11, 0x22
Was ist der Unterschied zwischen oberen drei Befehlen und den Befehlen hinter den Semikolons?
Anhand der Quellregisterangaben sieht man doch, dass 8, 16 bzw. 32 Bit übertragen werden müssen, oder nicht?
Ich habe mal die Variable sample einmal mit "mov [sample], al" und einmal mit "mov byte [sample], al" modifizieren lassen und es mit gdb näher angegguckt. Das Ergebnis ist gleich.
-
Kein Unterschied.
Bei den unteren Befehlen handelt es sich um einen Hinweis, ob ein Byte, Word oder Doubleword zu speichern ist. Bei den oberen Befehlen merkt NASM von selbst anhand des Registers, wieviel Bytes zu speichern sind. Du brauchst den Hinweis nur, wenn NASM das nicht erkennen kann, z.B. bei
inc [sample]
viele grüße
ralph
-
Vielen Dank!