% mögl. Lösung zur Aufgabe 5b) von Matthias Dräger % % Lösungsidee: Da innerhalb der Schleife das Hornerschema zur Basis 10 angewendet wird, % können wir hier DIV x,x,10 durch DIV x,x,2 ersetzen. % % Hinweis: Der Buffer wurde vergrößert, um auch größere Zahlen im Binärsystem darstellen zu können. % Bei zu großen Zahlen wird das Programm ohne Rückmeldung beendet (Marke Stopp). % % Sollten Warnungen auftreten, dann mit dem Parameter -b 200 assemblieren. % -> mmixal -b 200 Muster_Ueb1_Aufg5b.mms Buffer BYTE " 0",#a,0 % acht Zeichen, newline, String-Terminator 0 x IS $14 digit IS $42 LOC #100 Main SET x,255 % die Zahl, die ausgegeben werden soll GETA $17,Buffer % get address of Buffer -> $17 SET $18,7 % zaehlt die Stellen herunter 7...0 % Im folgenden Code-Abschnitt wird das Hornerschema angewendet, das bei allen Basen funktioniert. % Wir tauschen also DIV x,x,10 in DIV x,x,2 um die Zahl im Binärsystem auszugeben. Loop DIV x,x,2 % durch 2 teilen um die letzte Stelle als Rest zu erhalten GET digit,rR % der Rest der Division steht in rR -> digit ADD digit,digit,'0' % addiere den Wert des ASCII Zeichens ’0’ STBU digit,$17,$18 % store byte unsigned, schreibe das Zeichen in den Buffer mit dem Offset $18 (3...0) SUB $18,$18,1 % Offset herunterzaehlen BN $18,Stopp % prüfen, ob die Stelle negativ ist -> Programm beenden, damit kein Fehler auftritt BNZ x,Loop % branch if x not zero -> loop SET $255,$17 % Adresse des Buffer in $255 laden Stopp TRAP 0,Fputs,StdOut % String, auf den $255 zeigt, ausgeben TRAP 0,Halt,0