« »

Debugging

a)

Level 3: Anwenden

Das folgende Programm in RISC-V-Assembler soll die Länge (Anzahl der Zeichen) einer Null-terminierten Zeichenkette (String), die im Speicher ab der in Register a0 gespeicherten Adresse abgelegt ist, berechnen. Die Länge soll in Register a1 zurückgegeben werden.

Das angegebene Programm enthält zwei Fehler. Geben Sie für jeden Fehler die betroffene Zeile, eine kurze Beschreibung sowie eine Korrektur an.

search:
    li    a1, 0
loop:
    lbu    a4, 0(a0)
    beq    a4, zero, loop
    addi   a0, a1, 1
    addi   a1, a1, 1
    j      loop
end:
    ret

Diese Aufgabe war Teil der Klausur im Sommersemester 2024 (Zweittermin).

Lösung
  • Zeile 5: loop muss durch end ersetzt werden, damit die Schleife endet.
  • Zeile 6: a1 muss durch a0 ersetzt werden. a1 ist der Zähler für die String-Länge. a0 ist die Adresse des aktuellen Zeichens. Diese soll erhöht werden, damit wir im nächsten Durchlauf das nächste Zeichen betrachten.

b)

Level 3: Anwenden

Das folgende C-Programm berechnet das Produkt zweier Zahlen i und j durch fortgesetzte Addition. Gehen Sie davon aus, dass die Variablen in i und j positive Ganzzahlen (>0) enthalten.

// Berechne r = i * j
int r, i, j;
r = 0;
while (i > 0 ) {
    r = r + j:
    i = i - 1;
}

Das folgende RISC-V-Assemblerprogramm ist die Übersetzung des obigen C-Programms. Dabei ist die Variable i in Register a0, die Variable j in Register a1 und die Variable r in Register a2 enthalten. Leider sind im Programm drei Details verlorengegangen. Füllen Sie die entsprechenden Lücken so aus, dass das angegebene Assemblerprogramm ebenfalls r = i × j berechnet!

mult:
    li    a2, __
loop:
    b__   a0, zero, end
    add   a2, a2, __
    addi  a0, a0, -1
    j     loop
end:
    ret

Diese Aufgabe war Teil der Klausur im Sommersemester 2024 (Zweittermin).

Lösung
  • Zeile 2: 0
  • Zeile 4: ble
  • Zeile 5: a1

Lernziele

In dieser Aufgabe …

  • üben die Studierenden das Lesen fremder Assembly-Programme.
  • ordnen die Studierenden Hochsprachen-Konstrukte wie Schleifen ihren Assembler-Entsprechungen zu.
  • festigen die Studierenden ihr Verständnis von RISC-V-Instruktionen.