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]]