« »

Ein erstes RISC-V-Programm

a)

Level 1: Wissen

Beim Kramen nach alten Speicherbauteilen finden Sie einen USB-Stick mit einer einfachen Textdatei (siehe untenstehendes Listing). Ihnen fällt wieder ein, dass Ihre Nachbarin Ihnen den Stick gegeben hatte, um Ihnen zu zeigen, dass auch Assembly-Programme lesbar sein können. Sie ist selbst eine begeisterte RISC-V-Nutzerin. Leider ist inzwischen etwas Zeit vergangen und Sie haben vergessen, was die einzelnen Zeilen bedeuten.

li t0, 3         
add a0, t0, t0   
add a0, a0, t0   
add a0, a0, t0   
add a0, a0, t0  
ebreak

Glücklicherweise wissen Sie sich zu helfen. Nutzen Sie die RISC-V-Befehlsübersicht aus der Vorlesung, um die Bedeutung der einzelnen Befehle herauszufinden.

Lösung
li t0, 3        # t0 <- 3
add a0, t0, t0  # a0 <- t0 + t0    (a0 = 3 + 3)
add a0, a0, t0  # a0 <- t0 + a0    (a0 = 3 + 6)
add a0, a0, t0  # a0 <- t0 + a0    (a0 = 3 + 9)
add a0, a0, t0  # a0 <- t0 + a0    (a0 = 3 + 12)
ebreak          # Programmende

b)

Level 2: Verstehen

Können Sie erraten, welches Ziel das gegebene Programm verfolgt?

Lösung

Multiplikation von 3 und 5

c)

Level 4: Analysieren

Als Sie Ihrer Nachbarin stolz Ihre Rekonstruktion zeigen, meint sie, das Programm würde sie inzwischen nicht mehr in dieser Art formulieren. Sie benötige nur drei Befehle, um dieselbe Operation auszuführen. Finden Sie eine optimierte Version des Programms.

Hinweis

Werfen Sie einen Blick auf die Operationen zum Bitshift.

Lösung

Überlegung: $3 \times 5 = 3 \times 4 + 3 = 3 \times 2^2 + 3$

li t0, 3         # t0 <- 3
slli a0, t0, 2   # a0 <- t0 << 2
add a0, a0, t0   # a0 <- a0 + t0
ebreak

d)

Level 3: Anwenden

In der Vorlesung wurde der RISC-V-Simulator QtRvSim angesprochen. Nutzen Sie diesen, um die Funktionalität Ihres Programms zu überprüfen.

Lösung

Vorgehen:

  1. QtRvSim installieren und öffnen oder online aufrufen
  2. ohne weitere Einstellungen „Start empty“ auswählen
  3. unter „Windows“ → „Registers“ auswählen, um die Register einzublenden
  4. über „File“ → „New Source“ eine neue Quelldatei anlegen
  5. dort RISC-V-Assembly schreiben
  6. über „Machine“ → „Compile Source“ kompilieren
  7. via „Step“-Schaltfläche durch das Programm gehen
  8. prüfen, ob Register a0 den Wert 15 (0xf) enthält

Hinweise:

  • vor und nach Schritt 5 den Program-Bereich auf der linken Seite beobachten
  • dabei fällt auf: ABI-Namen werden in synonyme Registernamen umgewandelt
  • in Schritt 6 einzelne Registerwerte oben in der Übersicht und im Schema verfolgen

Lernziele

In dieser Aufgabe …

  • machen sich die Studierenden mit dem Lesen von Assembly-Instruktionen vertraut.
  • stellen die Studierenden einen Zusammenhang zwischen Anweisungen und ihrer Semantik her.
  • betrachten die Studierenden einfache Compiler-Optimierungen.
  • nutzen die Studierenden einen Simulator, um ihre Ergebnisse zu überprüfen.