2012-03-31 21 views
4

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

4

<< 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.

4

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