diff --git a/README.md b/README.md index 50ccd43..fbb6fc5 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Es gibt folgende Anweisungen: | Befehl | Abkürzung für | Aktion | - |:------:|:-------------:|:-------------------------------------------:| + |:------:|:-------------:|:-------------------------------------------:| | s | sprint | Führt den Sourcecode bis zum Ende aus | | l | line | Führe die nächste Zeile des Sourcecodes aus | | e | end | Beende den Emulator direkt | @@ -44,6 +44,7 @@ implementiert worden: - j - slli +- Die Beispielprogramme sind im entsprechenden Verzeichnis. ## Dokumentation für den Assembly Code diff --git a/beispielprogramme/1.txt b/beispielprogramme/1.txt new file mode 100644 index 0000000..2e4a73a --- /dev/null +++ b/beispielprogramme/1.txt @@ -0,0 +1,3 @@ +addi x1, x0, 5 # x1 = 5 +addi x2, x0, 10 # x2 = 10 +add x3, x1, x2 # x3 = x1 + x2 = 15 \ No newline at end of file diff --git a/beispielprogramme/2.txt b/beispielprogramme/2.txt new file mode 100644 index 0000000..13c286f --- /dev/null +++ b/beispielprogramme/2.txt @@ -0,0 +1,4 @@ +addi x1, x0, 42 # x1 = 42 +addi x2, x0, 100 # x2 = Ad res se 100 +sw x1, 0(x2) # Speicher[100] = 42 +lw x3, 0(x2) # x3 = Speicher[100] −> 42 \ No newline at end of file diff --git a/beispielprogramme/3.txt b/beispielprogramme/3.txt new file mode 100644 index 0000000..3133e81 --- /dev/null +++ b/beispielprogramme/3.txt @@ -0,0 +1,6 @@ +addi x1, x0, 7 # x1 = 7 +addi x2, x0, 7 # x2 = 7 +beq x1, x2, equal # springe nach ’equal’ falls gleich +addi x3, x0, 1 # wird uebersprungen +equal: +addi x3, x0, 99 # x3 = 99 \ No newline at end of file diff --git a/beispielprogramme/4.txt b/beispielprogramme/4.txt new file mode 100644 index 0000000..8748e54 --- /dev/null +++ b/beispielprogramme/4.txt @@ -0,0 +1,4 @@ +jal x0, target # Sprung ohne Rueckkehr +addi x1, x0, 1 # wird uebersprungen +target: +addi x2, x0, 2 # x2 = 2 \ No newline at end of file diff --git a/beispielprogramme/5.txt b/beispielprogramme/5.txt new file mode 100644 index 0000000..7af2c2d --- /dev/null +++ b/beispielprogramme/5.txt @@ -0,0 +1,4 @@ +addi x1, x0, 5 # x1 = 5 (Zaehler) +loop: +addi x1, x1, −1 # x1 −= 1 +bne x1 , x0, loop # solange x1 != 0 , wiederhole \ No newline at end of file diff --git a/beispielprogramme/6.txt b/beispielprogramme/6.txt new file mode 100644 index 0000000..3d925d1 --- /dev/null +++ b/beispielprogramme/6.txt @@ -0,0 +1,8 @@ +addi x1, x0, 10 # x1 = N = 10 +addi x2, x0, 1 # x2 = i = 1 +addi x3, x0, 0 # x3 = Summe = 0 +loop_sum: +add x3, x3, x2 # Summe += i +addi x2, x2, 1 # i += 1 +bne x2, x1, loop_sum # solange i != N, Schleife +add x3, x3, x1 # letzte Addition ( i == N) \ No newline at end of file diff --git a/beispielprogramme/7.txt b/beispielprogramme/7.txt new file mode 100644 index 0000000..7d39ac4 --- /dev/null +++ b/beispielprogramme/7.txt @@ -0,0 +1,12 @@ +addi x1, x0, 7 # x1 = n +addi x2, x0, 0 # x2 = F ( 0 ) +addi x3, x0, 1 # x3 = F ( 1 ) +addi x4, x0, 0 # x4 = Loop−Register +addi x5, x0, 1 # x5 = i +loop_fib: +add x4, x2, x3 # x4 = F( i ) = F( i −2) + F( i −1) +add x2, x3, x0 # x2 = a l t e s F( i −1) +add x3, x4, x0 # x3 = neues F( i ) +addi x5, x5, 1 # i++ +bne x5, x1, loop_fib +# x4 enthaelt jetzt F(7) = 13 \ No newline at end of file diff --git a/beispielprogramme/8.txt b/beispielprogramme/8.txt new file mode 100644 index 0000000..6210fde --- /dev/null +++ b/beispielprogramme/8.txt @@ -0,0 +1,25 @@ +# −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− +# Array liegt ab Adresse 100 , +# Laenge = 5 Elemente ( 4 Byte pro Element ) +# Ergebnis (Maximum) i n x3 +# −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− +addi x1, x0, 100 # x1 = Basisadresse des Arrays +addi x2, x0, 5 # x2 = Anzahl Elemente +addi x4, x1, 0 # x4 = Laufender Zeiger (ptr) ins Array +lw x3, 0(x4) # x3 = erstes Element (initiales Maximum) +addi x2, x2, −1 # x2 = verbleibende Elemente +loop_max: +addi x4, x4, 4 # ptr += 4 (naechstes Element ) +lw x5, 0(x4) # x5 = aktuelles Element +slt x6, x3, x5 # x6 = 1 , wenn x3 < x5 +bne x6, x0, update # falls neues Element groesser: update +cont: +addi x2, x2, −1 # naechstes Element ( RemainingCount−−) +bne x2, x0, loop_max # wiederhole, solange noch Elemente uebrig +# Ende : x3 enthaelt das Maximum +j end +update: +add x3, x5, x0 # x3 = x5 ( neues Maximum) +j cont +end: +# x3 = Maximum \ No newline at end of file diff --git a/beispielprogramme/9.txt b/beispielprogramme/9.txt new file mode 100644 index 0000000..dc7ceda --- /dev/null +++ b/beispielprogramme/9.txt @@ -0,0 +1,9 @@ +addi x1, x0, 21 # x1 = 21 +jal x5, double # Aufruf: ra in x5 +# nach Rueckkehr enthaelt x6 das Resultat +j end +double: +slli x6, x1, 1 # x6 = x1 << 1 = x1 ∗ 2 +jalr x0, 0(x5) # Ruecksprung ueber r a +end: +# x6 = 42 \ No newline at end of file