Lernziele
In dieser Aufgabe …
- üben die Studierenden das Simulieren einfacher Assembler-Programme.
- betrachten die Studierenden die Effekte von Load- und Store-Anweisungen.
Level 3: Anwenden
Gegeben ist das folgende RISC-V-Assemblerprogramm mit Speicherzugriffen. Nehmen Sie an, dass zu Beginn alle Register auf den Wert 0 initialisiert wurden.
addi a1, zero, 0x10
loop:
bgt a2, a1, end
addi a2, a2, 4
srli a1, a1, 1
lw a3, 0x504(a2)
slli a4, a3, 4
sw a4, 0x500(a2)
jal x0, loop
end:
Der Speicher ist wie folgt initialisiert:
0x500: 0x12345678
0x504: 0xDEADBEEF
0x508: 0x50505050
0x50C: 0x77773333
0x510: 0x12345678
Welchen Inhalt haben die 32-Bit-Speicherworte 0x504 und 0x508, wenn die Ausführung das Label end erreicht hat?
Diese Aufgabe war Teil der Klausur im Sommersemester 2025 (Zweittermin).
Startzustand (einschließlich Zeile 1):
a1 = 0x10 (16)a2 = a3 = a4 = 0Erster Durchlauf:
| Z. | Anweisung | Bedeutung | Notiz |
|---|---|---|---|
| 3 | bedingter Sprung | a2 (0) > a1 (16)? | falsch, kein Sprung, weiter mit nächster Instruktion |
| 4 | Addition | a2 <- 0 + 4 = 4 | |
| 5 | Shift | a1 <- 16 >> 1 = 8 | |
| 6 | Laden | a3 <- Mem[0x504 + 4] = 0x50505050 | |
| 7 | Shift | a4 <- a3 << 4 = 0x05050500 | (4 Bit = 1 Hexadezimalstelle) |
| 8 | Speichern | Mem[0x500 + 4] <- a4 = 0x05050500 |
Zweiter Durchlauf:
| Z. | Anweisung | Bedeutung | Notiz |
|---|---|---|---|
| 3 | bedingter Sprung | a2 (4) > a1 (8)? | falsch, kein Sprung, weiter mit nächster Instruktion |
| 4 | Addition | a2 <- 4 + 4 = 8 | |
| 5 | Shift | a1 <- 8 >> 1 = 4 | |
| 6 | Laden | a3 <- Mem[0x504 + 8] = 0x77773333 | |
| 7 | Shift | a4 <- a3 << 4 = 0x77733330 | (4 Bit = 1 Hexadezimalstelle) |
| 8 | Speichern | Mem[0x500 + 8] <- a4 = 0x77733330 |
Schleifenende:
| Z. | Anweisung | Bedeutung | Notiz |
|---|---|---|---|
| 3 | bedingter Sprung | a2 (8) > a1 (4)? | wahr, Sprung zum Label end |
Ergebnis:
Mem[0x504] = 0x05050500
Mem[0x508] = 0x77733330
In dieser Aufgabe …