Syntax: | ASR Rd |
---|---|
Funktion: | Mit diesem Befehl werden alle Bits des Registers Rd eine Position nach rechts geschoben. Das Bit 7 verändert sich dabei nicht, das Bit 0 wird in das Carry-Flag geschoben. Damit stellt dieser Befehl eine vorzeichenbehaftete Division durch 2 dar. Das Carry-Flag kann dazu benutzt werden, das Ergebnis zu runden. |
Operation: | C ← Rd0 ← Rd1 ← Rd2 ← Rd3 ← Rd4 ← Rd5 ← Rd6 ← Rd7 |
Operanden: | 0 ≤ d ≤ 31 |
Programmzähler: | PC ← PC + 1 |
Words: | 1 (2 Byte) |
Zyklen: | 1 |
16-Bit-Opcode: | 1001 010d dddd 0101 |
I | T | H | S | V | N | Z | C |
---|---|---|---|---|---|---|---|
- | - | - | ↔ | ↔ | ↔ | ↔ | ↔ |
S: | Das S-Flag wird gesetzt, wenn entweder das N-Flag oder das V-Flag gesetzt ist. Wenn beide Flags gleich sind, wird das S-Flag gelöscht. |
---|---|
V: | Das V-Flag wird gesetzt, wenn aus der Operation ein Zweierkomplement-Überlauf erfolgt, andernfalls wird das Flag gelöscht. |
N: | Das N-Flag wird gesetzt, wenn das Bit 7 des Ergebnisses gesetzt ist, andernfalls wird es gelöscht. |
Z: | Das Z-Flag wird gesetzt, wenn das Ergebnis 0x00 ist, andernfalls wird das Flag gelöscht. |
C: | Das C-Flag wird gesetzt, wenn das Bit 0 im Register Rd vor dem Schieben gesetzt war. War das Bit 0 vorher gelöscht, so wird auch das Carry-Flag gelöscht. |
ldi r16,16 ;Die Dezimalzahl 16 in R16 laden asr r16 ;R16 := R16/2 = 8 ;oder ldi r16,-4 ;Die Dezimalzahl -4 in R16 laden asr r16 ;R16 := R16/2 = -2