Wie würden Sie eine NASM-Verschiebung in einem Register machen? Ich lese das Handbuch und es scheint nur diese Operatoren zu erwähnen >>, < <. Wenn ich versuche, sie zu benutzen, beschwert sich NASM über den Schichtoperator, der an Skalarwerten arbeitet. Können Sie erklären, was ein Skalarwert ist und ein Beispiel für die Verwendung von >> und < < geben. Außerdem dachte ich, es gäbe eine shr oder shl Betreiber. Wenn es sie gibt, können Sie ein Beispiel geben, wie man sie benutzt? Vielen Dank für Ihre Zeit.NASM shift operators
Antwort
<<
und >>
sind nur für die Verwendung mit ganzzahligen Konstanten. Dies ist, was es mit "Skalarwert" meint. Sie können den Wert in einem Register mit den Anweisungen shl
oder shr
verschieben. Sie werden verwendet, um den Wert in einem Register nach links oder rechts um eine gegebene Anzahl von Bits zu verschieben.
Die erste Zeile in diesem Beispiel verschiebt den Wert in ax
links 4 Bits, was der Multiplikation mit 16 entspricht. Die zweite Zeile verschiebt den Wert in bx
um 2 Bits, was der Ganzzahldivision entspricht 4.
shl ax, 4
shr bx, 2
Sie können auch cl
verwenden, um die Anzahl von Bits, um anzuzeigen, anstelle eines konstant zu verschieben. Weitere Informationen zu diesen und zugehörigen Anweisungen finden Sie unter this page.
huckepack auf ughoavgfhw Antwort ... <<
und >>
zu verwenden, so dass sie direkt auf Konstanten verwenden:
MOV EAX, 1 << 2 ; Puts 4 into EAX
MOV EAX, 2 << 2 ; Puts 8 into EAX
MOV EAX, 8 >> 1 ; Puts 4 into EAX