Der PC lernt rechnen

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