ARM Assembler

Krikus

Mitglied
Hi,

ich stehe gerade auf dem Schlauch bei 2 Befehlen.

1. Befehl
PHP:
mvn R0, #0xff  -> R0=0xffffff00
movs R1, R0, asr #4 -> R1=0xfffffff0
eors R0,Ro,R1 -> R0=0x000000F0

Kann mir mir einer sagen was genau dieses asr#4 bewirkt?
Außerdem ist es mir Rätsel, wie ich das Exklusiv-Oder im Kopf bzw. schriftlich schnell mit Hex-Zahlen hinbekomme, ohne einen Taschenrechner zu benutzen.

2. Befehl.

PHP:
LDR R0,=0x7ffff -> R0 = 0x0007ffff
movs R1,R0,lsr#3 -> R1=0x0000ffff
sub R0,R0,R1 -> R0=0x00070000

Hier habe ich mir lsr#3 (left-shift-right) meine Problem.
Wie genau funktioniert das in diesem Beispiel.


Vielen Dank im Voraus.

Krikus
 
Hallo,

asr führt einen Arithmethischen Shift nach rechts aus. D.h. die Zahl wird um #Anzahl Bitpositionen nach rechts verschoben. Im Unterschied zum logical shift wird der Wert allerdings vorzeichen-erhaltend geschiftet. D.h. wenn die Zahl negativ war (an führender Bitposition steht eine 1) so werden auch 1en nachgeschoben anstatt 0en.

Zu den Berechnungen:

Wandle die Hexzahlen in Binärzahlen um und führe dann die jeweilige Operation aus:

xor:
Code:
R0 =0xffffff00 = 11111111111111111111111100000000b
R1 =0xfffffff0 = 11111111111111111111111111110000b
R0 xor R1      = 00000000000000000000000011110000b = 0x0000000F0
Für den lsr #3 gilt folgendes:
Code:
R0 = 0x0007ffff = 00000000000001111111111111111111b >> 3
                = 00000000000000001111111111111111b = 0x0000FFFF
Gruß,
RedWing
 

Neue Beiträge

Zurück