Da haben Sie nun einen teuren, mit allen Schikanen ausgerüsteten PC auf Ihrem Tisch stehen, doch das, wofür der Begriff Computer eigentlich steht, kann er nicht so ohne weiteres: Rechnen. Speicherresidente Taschenkalender und Rechenfunktionen in Anwenderprogrammen oder Programmiersprachen schaffen zwar Abhilfe – doch ist im Lieferumfang des Betriebsystems außer GW-Basic keine Möglichkeit zur Kalkulation vorhanden. RECHNE.DEB berechnet den als Parameter übergebenen Ausdruck und zeigt das Ergebnis auf dem Bildschirm an. Der Ausdruck darf ganze Zahlen sowie die Operatoren Plus (+), Minus (-), Mal (*) und Dividiert Durch (/) enthalten. Außerdem ist es möglich, beliebig viele Klammern zu setzen. Diese werden ebenso wie »Punkt vor Strich« ausgewertet. Negative Zahlen sind möglich.
Damit jedoch das Listing in der Nähe der durchschnittlichen Größe unserer Tips bleibt, müssen die Zahlen mit 16 Bit darstellbar sein, was den Bereich auf -32768 bis +32767 einschränkt. Eine Division berücksichtigt nur den ganzzahligen Anteil des Ergebnisses. 7 dividiert durch 3 ergibt also 2. Überläufe werden nicht abgefangen oder angezeigt, fehlende Klammern werden ignoriert. Sie müssen also aufpassen! Ein Fließkomma-Algorithmus mit Überlaufkontrolle läßt sich einfach nicht mit wenigen Assemblerzeilen realisieren – für die wichtigsten Berechnungen im PC-Alltag dürfte RECHNE jedoch in aller Regel ausreichen.
RECHNE.DEB ist übrigens hochdiffizil, da es einen kompletten Ausdrucksinterpreter enthält, der sämtliche Prioritäten berücksichtigt. Aus Gründen der Einfachheit und Kürze ist das Programm sogar selbstmodifizierend: Die Programmzeile zum Verknüpfen zweier Werte wird je nach Operator anhand einer Tabelle in ADD, SUB, IMUL oder IDIV geändert. Die Routine zum Auswerten arbeitet rekursiv, ebenso die Anzeigeroutine für das Ergebnis. Profis werden das Programm trotz seiner Einschränkungen zu schätzen wissen, weil es relativ einfach demonstriert, wie sich ein z. B. in Basic relativ »simpler« Ausdruck auf Assemblerebene auswerten läßt, was für Basic eine der kombliziertesten Aufgaben überhaupt bedeutet.
Name: | RECHNE.DEB |
Funktion: | Einfaches Rechenprogramm für die vier Grundrechenarten. |
Übersetzung: | DEBUG <RECHNE.DEB |
Prüfsumme: | 7548 |
Anwendung: | z. B. RECHNE 2+5*(725-223/2) |
Einschränkungen: | Zahlenbereich ist auf ganze Zahlen von-32768 bis +32767 eingeschränkt. Keine Überlaufkontrolle. Fehlende Klammern werden ignoriert. |
A MOV DI,81 ;100 MOV BH,0 ;103 CALL 130 ;105 TEST AX,8000 ;108 JZ 116 ;10B PUSH AX ;10D MOV DL,2D ;10E CALL 128 ;110 POP AX ;113 NEG AX ;114 XOR DX,DX ;116 DIV Wo[1B6] ;118 AND AX,AX ;11C JZ 125 ;11E PUSH DX ;120 CALL 116 ;121 POP DX ;124 ADD DL,30 ;125 MOV AH,2 ;128 INT 21 ;12A DEC DI ;12C RET ;12D DW 9090 MOV CL,[DI] ;130 INC DI ;132 MOV SI,182 ;133 ADD SI,6 ;136 CMP CL,[SI] ;139 JZ 158 ;13B CMP SI,1B8 ;13D JB 136 ;141 SUB CL,30 ;143 JB 130 ;146 CMP CL,A ;148 JNB 130 ;14B IMUL Wo[1B6] ;14D ADD AL,CL ;151 ADC AH,0 ;153 JMP 130 ;156 JMP [SI+2] ;158 CALL 17D ;15B CMP By[DI],29 ;15E JNZ 164 ;161 INC DI ;163 JMP 130 ;164 CMP BH,[SI+1] ;166 JNB 12C ;169 PUSH AX ;16B PUSH [SI+4] ;16C CALL 17D ;16F POP [12E] ;172 MOV SI,AX ;176 POP AX ;178 XOR DX,DX ;179 JMP 12E ;17B PUSH BX ;17D MOV BH,[SI+1] ;17E XOR AX,AX ;181 CALL 130 ;183 POP BX ;186 RET ;187 DW 20,130,0,D,12C,0 DW 29,12C,0,12B,166 DW F001,12D,166,F029 DW 22F,166,FEF7,22A DW 166,EEF7,28,15B,A RCX B8 NRECHNE.COM W Q
Quelle: 200 Utilities für PC-/MS-DOS von Gerhard Schild und Thomas Jannot