* Programmrahmen fuer einfache MMIX-Programme. * ein Aufruf von * TRIP DrZahl,$n,0 * druckt den Wert aus Register n als vorzeichenbehaftete * ganze Zahl aus. * Ferner: * TRIP LsZahl,$n,0 * liest eine vorzeichenbehaftete ganze Zahl in Reg. $n ein. * In beiden F"allen wird der Inhalt von Register $255 ver"andert * Version vom 8.9.2001, ab@cs.fhm.edu DrZahl IS 0 LsZahl IS 1 LOC Data_Segment GREG @ ----------------------------------------------------------------------- * AB HIER k"onnen eigene Daten erg"anzt werden * ENDE eigene Daten LOC 0 JMP IO Einsprung f"ur {\tt TRIP}: Verzweigung nach IO LOC #100 ----------------------------------------------------------------------- * AB HIER kann das eigene Programm eingesetzt werden Main TRIP LsZahl,$11,0 TRIP DrZahl,$11,0 TRAP 0,Halt,0 * ENDE des eigenen Programms. ----------------------------------------------------------------------- * Ausgeben PREFIX Rahmen: r GREG 0 Rest Zahl GREG 0 zu behandelnde Zahl Stellen IS 23 max. 23 Stellen BUFFER OCTA 0 LOC (BUFFER+Stellen+4)&-4 Arg OCTA BUFFER,Stellen :IO GET $255,:rX X der {\tt TRIP}-instruction extrahieren SETML r,1 AND r,r,$255 BNZ r,LsZahl GETA $255,BUFFER+Stellen+1 positioniern GET Zahl,:rY PBNN Zahl,2F NEG Zahl,Zahl 2-Kompl. berechnen 2H SUB $255,$255,1 Zahl ohne VZ ausgeben DIVU Zahl,Zahl,10 GET r,:rR INCL r,'0' STBU r,$255,0 PBNZ Zahl,2B GET Zahl,:rY PBNN Zahl,3F SUB $255,$255,1 neg. VZ schreiben SETL r,'-' STBU r,$255,0 3H TRAP 0,:Fputs,:StdOut RESUME 0 * Einlesen Count GREG 0 Bytes im Eingabepuffer z"ahlen Str GREG 0 Adr. Eingegebener String Vorz GREG 0 Vorzeichen Num IS $255 eing. dez.-Zahl LsZahl GETA $255,Arg Lesen TRAP 0,:Fgets,:StdIn GETA Str,BUFFER SET Count,0 Vorbelegen SET Num,0 LDB Zahl,Str,Count Vorzeichen pr"ufen CMP Vorz,Zahl,'-' PBNZ Vorz,1F INCL Count,1 1H LDB Zahl,Str,Count CMP r,Zahl,'0' Hier kann die Basis BN r,2F ver"andert werden CMP r,Zahl,'9' BP r,2F MUL Num,Num,10 Mult. mit Basis SUB Zahl,Zahl,'0' ADD Num,Num,Zahl INCL Count,1 JMP 1B 2H PBNZ Vorz,3F NEG Num,Num 3H SETML Vorz,#2100 gelesenen Wert bereit stellen: INCL Vorz,#FF00 {\tt ADDI} {\bf \$0,\$255,\$0} nach Vorz GET Zahl,:rX Zahl$\leftarrow$Zielregister SET Count,#FF00 AND Zahl,Zahl,Count SL Zahl,Zahl,8 Als 1. Operand in {\tt ADDI} einbauen OR Vorz,Vorz,Zahl PUT :rX,Vorz RESUME 0