BuK/IIm13/Studenten/simaknoc/Vorlesung 8
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
== RAM-Programme ==
'''Führen Sie obiges Programmbeispiel per Hand aus.'''
[[Bild:Simaknoc__MultipliziererRAM_Hand.JPG|300px]]
=== Kreativaufgabe ===
Geben Sie mind. ein RAM-Programm zur Berechnung der Funktion $w : \N \mapsto \N$ mit $w(n) = \left\lfloor \sqrt{n} \right\rfloor$ an.
==== Programm ====
Hinweis: Programm schließt die 0 in $\N$ ein.
{|| border="1" cellpadding="5" cellspacing="0"
!Nr
!Methode
!Kommentar
|-
||<div align="right">0</div>||R0 = 3|| R0 = n (Berechnung Wurzel von 3)
|-
||<div align="right">1</div>||R3 = 1|| R2 = fixer Wert für Inkrement/Dekrement
|-
||<div align="right">2</div>||R5 = R1|| R5 = aktuelle Testvariable
|-
||<div align="right">3</div>||R6 = R1|| R6 = Multiplikationszähler
|-
||<div align="right">4</div>||IFZERO R6 GOTO 8|| Wenn Multiplikationszähler = 0, ist Multiplikation fertig
|-
||<div align="right">5</div>||R7 += R5|| R7 = Multiplikationszwischenergebnis
|-
||<div align="right">6</div>||R6 -= R3|| Multiplikationszähler um 1 dekrementieren
|-
||<div align="right">7</div>||GOTO 4||
|-
||<div align="right">8</div>||R2 = R7|| R2 = Ergebnis der Multiplikation zwischenspeichern
|-
||<div align="right">9</div>||R7 = 0|| Multiplikationszwischenergebnis auf 0 zurücksetzen
|-
||<div align="right">10</div>||R1 += R3|| Testvariable inkrementieren
|-
||<div align="right">11</div>||R4 = R2|| Multiplikationsergebnis nach R4 übertragen
|-
||<div align="right">12</div>||R4 -= R0|| n vom Multiplikationsergebnis abziehen
|-
||<div align="right">13</div>||IFZERO R4 GOTO 2|| Wenn Ergebnis der Subtraktion 0, Multiplikation mit inkrementierten Wert fortsetzen
|-
||<div align="right">14</div>||R5 -= R3|| R5 dekrementieren zum Abrunden
|-
||<div align="right">15</div>||R0 = R5|| Ergebnis übernehmen
|-
||<div align="right">16</div>|| STOP ||
|}
==== Beispielrechnungen ====
In den Beispielrechnungen wurden jeweils der aktuelle Befehl und die damit zusammenhängende Registerveränderung, sowie Befehlssprünge dargestellt.
'''n=3 und n=4'''
[[Bild:Simaknoc__RAM_KA_Beispiel3_und4.JPG|300px]]
'''n = 10'''
[[Bild:Simaknoc__Testrechnung-RAM-Wurzel10.JPG|300px]]