Verwenden von OR r / m32, imm32 in NASM

8

Der Opcode wird generiert von:

%Vor%

mit NASM ist:

%Vor%

Aber im Intel Instructions Manual:

%Vor%

Meine Frage ist, warum NASM den Opcode 83 anstelle von 81 benutzt und wie man den Opcode 81 erzeugt?

Dies ist die Befehlszeile für NASM: nasm -fwin32 file.asm -l list.lst

    
Bite Bytes 12.06.2017, 17:01
quelle

1 Antwort

9

NASM wählt die 8-Bit-Operandengröße als Optimierung aus, weil es dasselbe tut und weniger Platz benötigt. Sie können NASM zwingen, eine bestimmte Operandengröße zu verwenden:

%Vor%

Dies führt zu:

%Vor%

Das Zusammenstellen des ursprünglichen Codes ohne Optimierungen ( nasm -O0 ) wird ebenfalls zu diesem Ergebnis führen.

Wenn das Register EAX ist, führt dies dazu, dass der 0D-Opcode ( mov eax, imm32 ) statt 81 angezeigt wird. In diesem Fall müssen Sie die Anweisung möglicherweise selbst ausgeben: db 0x81, 0xc8, 0xff, 0xff, 0xff, 0xff .

    
interjay 12.06.2017, 17:29
quelle

Tags und Links