Wie NASM „Push-Byte“ auf GAS-Syntax übersetzen?
Frage
Ich bin eine NASM Quelle GAS „Portierung“ und ich fand die folgenden Codezeilen:
push byte 0
push byte 37
GAS nicht erlaubt "Push-Byte" oder "pushb".
Wie soll ich den obigen Code auf GAS-Syntax übersetzen?
Danke
Lösung
pushb
wurde von GAS entfernt. Sie sollten den push
Befehl verwenden, um den gleichen Effekt zu erzielen. Etwas mehr Informationen hier .
Andere Tipps
1) push byte
in NASM 2.11 64-Bit kompiliert auf die gleiche wie nur push
, mit der Ausnahme, dass es sich weigert, zu kompilieren, wenn das Ding geschoben größer als ein Byte:
push 0x0000
push 0x01
push 0x0001
push 0x10
Ist das gleiche wie:
push byte 0x0000
push byte 0x01
push byte 0x0001
push byte 0x10
Aber die folgenden fehlschlagen:
push byte 0x0100
push byte 0x1000
push byte 0x01000000
push byte 0x10000000
Alle diese kompilieren, um die 6a XX
Form des Befehls.
2) NASM und GAS automatisch entscheiden, welche Form auf der Operandengröße basiert zu verwenden:
Die GAS 2.25:
push $0x0000
push $0x01
push $0x0001
push $0x10
push $0x0100
push $0x1000
push $0x01000000
push $0x10000000
Kompiliert auf das gleiche wie die NASM:
push 0x0000
push 0x01
push 0x0001
push 0x10
push 0x0100
push 0x1000
push 0x01000000
push 0x10000000
objdump:
0: 6a 00 pushq $0x0
2: 6a 01 pushq $0x1
4: 6a 01 pushq $0x1
6: 6a 10 pushq $0x10
8: 68 00 01 00 00 pushq $0x100
d: 68 00 10 00 00 pushq $0x1000
12: 68 00 00 00 01 pushq $0x1000000
17: 68 00 00 00 10 pushq $0x10000000
Also nur push
in GAS ist die gleiche wie push byte
in NASM, aber ohne die Fehlerprüfung.
3) Der Modifikator, dass hat existiert in GAS ist w
wie in:
pushw $0
, die kompiliert:
0: 66 6a 00 pushw $0x0
d., Fügt den 0x66
Präfix 16-Bit-Betrieb zu wechseln.
NASM äquivalent ist:
push word 0
4) Der Unterschied von mov
ist, dass wir nicht willkürlich Druckgrößen kontrollieren können. Sie sind alle Festbeträge auf den Stapel schieben
Der einzige Parameter, den wir auf der Befehlscodierung steuern können, ist der 0x66
Präfix enthält oder nicht.
Der Rest wird durch den Segmentdeskriptor bestimmt. Sehen Sie sich die Intel 64 und IA-32 Architektur-Handbuch Software-Entwicklers - Volume 2 Instruction set Reference - 325383-056US September 2015 .