Kann ich Binär zu schreiben, die integer-Konstanten in der Montage?
ich eine Aufgabe haben, die Sie fragt, zu definieren 4 Ganzzahlen, die jeweils eine unterschiedliche byte-Länge (1, 2, 4, 8)
würde dieser code funktionieren?
segment .data
one db 1
two dw 01
four dd 1011
eight dq 01101110
global _start
_start:
mov rax, [one] ;
mov rbx, [two] ;
ich bin auch gespannt, ob ich sicher aufbewahren können diese Werte in Registern verwendet werden, für die Zugabe in die Zukunft.
Und das soll ich verwenden, Zeichen-Erweiterung für die kürzere Werte, aber könnte etwas Richtung
- IIRC, können Sie eine
b
suffix auf die zahlen ähnlich wie die, die Sie schreiben könnenFFh
oder0xFF
. Wie geschrieben, der code nicht alles tun, um zu sagen, das assembler das sind keine Dezimalzahlen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
3.4.1 Numerische Konstanten in der NASM-online-Handbuch (erste google-Treffer für: nasm Binär-Konstante):
Einige Beispiele (alle produzieren genau den gleichen code):
Natürlich können Sie diese Suffixe auf Konstanten überall, nicht nur immediate-Operanden.
Also ja, Sie können mit binären. Beachten Sie, dass der code in deiner Frage verwendet eine one-bit Konstante, nicht eine ein-byte-Konstante, für die der Wert gespeichert, in
one
.one = 1
, undtwo = 2
, aberfour = 2^3 + 0 + 2^1 + 1 = 11(decimal)
.eight
ist ebenfalls seltsam definiert. Es sollteeight = 1000b
.Aller Kraft-der-zwei Ganzzahlen, die nur ein einziges bit in Ihre binäre Darstellung, genau wie alle power-of-10 Nummern haben eine einzige
1
in Ihre dezimale Darstellung.Die einzige form der
mov
Anweisung, dass jedes Zeichen-Erweiterung istmov r64, imm32
. Alle anderen Formen laden die gleiche Größe aus dem Speicher als Operanden-Größe, so gibt es nichts, um dich zu erweitern. (ALU-Operationen wieadd
haben separate Befehle füradd r32, imm32
undadd r32, imm8
(mit sign-extension), da das hinzufügen /Verknüpfung /Verknüpfung eine kleine Konstante ist sehr verbreitet.Wenn Sie möchten, laden aus dem Speicher mit Vorzeichen-Erweiterung, look-up -
movsx
im insn ref manual. (verlinkt von x86 - info-wiki.) z.B.movsx rax, byte [mem]