Routinen zum Arbeiten mit 32-Bit Zahlen

Die hier vorgestellten Routinen sind solche für die Verabeitung von Routinen mit 32-Bit Zahlen. Einige Hinweise zum Format findet sich hier.

Modul-Entry B: Beschreibung, I: Eingabe-, O: Ausgabeparameter

ADD32.MAC
ADD32 B: Addition zweier Zahlen
  I: Registerpaar BC zeigt auf erste Zahl, Paar DE auf zweite und Paar HL auf Ergebnis
  O: Summe in Ergebnis abgelegt. Bei Überlauf ist die Carry Flag gesetzt.

SUB32.MAC
SUB32 B: Subtraktion zweier Zahlen
  I: Registerpaar BC zeigt auf erste Zahl, Paar DE auf Subtrahenden und Paar HL auf Ergebnis
  O: Differenz in Ergebnis abgelegt. Bei Überlauf ist die Carry Flag gesetzt.

MUL32.MAC
MUL32 B: Multiplikation zweier Zahlen
  I: Registerpaar BC zeigt auf erste Zahl, Paar DE auf zweite und Paar HL auf Ergebnis
  O: Produkt in Ergebnis abgelegt. Bei Überlauf ist die Carry Flag gesetzt.

DIV32.MAC
DIV32 B: Division zweier Zahlen
  I: Registerpaar BC zeigt auf Dividenden, Paar DE auf Divisor und Paar HL auf Ergebnis
  O: Quotient in Ergebnis abgelegt. Bei Überlauf oder Division durch Null ist die Carry Flag gesetzt.

MOD32.MAC
MOD32 B: Ermitteln des Restes zweier 32 Bit Zahlen
  I: Registerpaar BC zeigt auf Dividenden, Paar DE auf Divisor und Paar HL auf Ergebnis
  O: Rest in Ergebnis abgelegt. Bei Überlauf, negativem Divisor oder Division durch Null ist die Carry Flag gesetzt.

NEG32.MAC
NEG32 B: Negation einer Zahl
  I: Registerpaar HL zeigt auf die Zahl
  O: Zahl negiert

SHL32.MAC
SHL32 B: Links schieben einer Zahl
  I: Registerpaar HL zeigt auf die Zahl
  O: Zahl um eine Stelle nach links geschoben

SHR32.MAC
SHR32 B: Rechts schieben einer Zahl
  I: Registerpaar HL zeigt auf die Zahl
  O: Zahl um eine Stelle nach rechts geschoben

DIN32.MAC
DIN32 B: Umwandlung einer Zeichenkette in eine vorzeichenlose 32 Bit Zahl
  I: Registerpaar DE zeigt auf die Zeichenkette, HL zeigt auf die ganze Zahl und Register B hält das Endzeichen der Kette. Steht in Register B -1, dann wird die Wandlung beim ersten nicht-numerischen Zeichen beendet.
  O: Resultat in der ganzen Zahl abgelegt. Bei Zahlenfehler oder Überlauf ist die Carry Flag gesetzt. Das Registerpaar zeigt auf das nächste Zeichen hinter der Zahl

SIN32.MAC
SIN32 B: Umwandlung einer Zeichenkette in eine 32 Bit Zahl mit Vorzeichen
  I: Registerpaar DE zeigt auf die Zeichenkette, HL zeigt auf die ganze Zahl und Register B hält das Endzeichen der Kette. Steht in Register B -1, dann wird die Wandlung beim ersten nicht-numerischen Zeichen beendet.
  O: Resultat in der ganzen Zahl abgelegt. Bei Zahlenfehler oder Überlauf ist die Carry Flag gesetzt. Das Registerpaar zeigt auf das nächste Zeichen hinter der Zahl

DOUT32.MAC
DOUT32 B: Wandlung einer vorzeichenlosen 32 Bit Zahl in eine Zeichenkette
  I: Registerpaar DE zeigt auf die Zeichenkette, HL zeigt auf die ganze Zahl und Register B hält das Endzeichen der Kette
  O: Zeichenkette abgeschlossen mit Zeichen in Register B. Das Registerpaar HL zeigt auf den Abschluss

SOUT32.MAC
SOUT32 B: Wandlung einer 32 Bit Zahl mit Vorzeichen in eine Zeichenkette
  I: Registerpaar DE zeigt auf die Zeichenkette, HL zeigt auf die ganze Zahl und Register B hält das Endzeichen der Kette
  O: Zeichenkette abgeschlossen mit Zeichen in Register B. Das Registerpaar HL zeigt auf den Abschluss

C1632.MAC
C1632 B: Expandieren einer 16 Bit Zahl in eine 32 Bit Zahl mit Vorzeichen
  I: Registerpaar HL hält die 16 Bit Zahl, Registerpaar DE zeigt auf die 32 Bit Zahl
  O: 32 Bit Zahl aus 16 Bit Zahl konstruiert

C3216.MAC
C3216 B: Verkürzen einer 32 Bit Zahl in eine 16 Bit Zahl
  I: Registerpaar DE zeigt auf die 32 Bit Zahl
  O: Registerpaar HL hält die 16 Bit Zahl

C32FL.MAC
C32FL B: Wandeln einer 32 Bit Zahl in eine Fließkommazahl
  I: Registerpaar DE zeigt auf die 32 Bit Zahl, HL zeigt auf die Fließkommazahl
  O: Fließkommazahl konstruiert aus ganzer Zahl

CFL32.MAC
CFL32 B: Wandeln einer Fließkommazahl in eine 32 Bit Zahl
  I: Registerpaar HL zeigt auf die 32 Bit Zahl, DE zeigt auf die Fließkommazahl
  O: Ganze Zahl konstruiert aus Fließkommazahl. Carry Flag gesetzt bei nicht möglicher Konvertierung

Die bisherigen Routinen sind die für die Programmierschnittstelle. Die folgenden Routinen sind die internen, von den obigen Routinen aufgerufenen Module.

ADDI32.MAC
$ADD32 B: Addition zweier Zahlen
  I: Register HL und BC halten die zweite Zahl. Die erste Zahl liegt auf dem Stack.
  O: Register HL und BC halten die Summe. Bei Überlauf ist die Carry Flag gesetzt.

SUBI32.MAC
$SUB32 B: Subtraktion zweier Zahlen
  I: Register HL und BC halten die zweite Zahl. Die erste Zahl liegt auf dem Stack.
  O: Register HL und BC halten die Differenz. Bei Überlauf ist die Carry Flag gesetzt.

MULI32.MAC
$MUL32 B: Multiplikation zweier Zahlen
  I: Register HL und BC halten die zweite Zahl. Die erste Zahl liegt auf dem Stack.
  O: Register HL und BC halten das Produkt. Bei Überlauf ist die Carry Flag gesetzt.

DIVI32.MAC
$DIV32 B: Division zweier Zahlen
  I: Register HL und BC halten die zweite Zahl. Die erste Zahl liegt auf dem Stack.
  O: Register HL und BC halten den Quotienten. Bei Überlauf oder Division durch Null ist die Carry Flag gesetzt.

MODI32.MAC
B: Ermitteln des Restes zweier 32 Bit Zahlen
  I: Register HL und BC halten die zweite Zahl. Die erste Zahl liegt auf dem Stack.
  O: Register HL und BC halten den Rest. Bei Überlauf, negativem Divisor oder Division durch Null ist die Carry Flag gesetzt.

SHLI32.MAC
$SHL32 B: Links schieben einer Zahl
  I: Registerpaar IX zeigt auf die Zahl
  O: Zahl um eine Stelle nach links geschoben

SHRI32.MAC
$SHR32 B: Rechts schieben einer Zahl
  I: Registerpaar IX zeigt auf die Zahl
  O: Zahl um eine Stelle nach rechts geschoben

NEGI32.MAC
$NEG32 B: Negation einer Zahl
  I: Register HL und BC halten die Zahl.
  O: Register HL und BC halten die negative Zahl.

OP32.MAC
$OP32 B: Register laden und Operation ausführen
  I: Registerpaar BC zeigt auf erste Zahl, Paar DE auf zweite Zahl und Paar HL hält die Adresse der auszuführenden Routine. Auf dem Stack liegt die Adresse des Ergebnisses
  O: Angeforderte Operation wird ausgeführt
$LOD32 B: Laden einer 32-Bit Zahl
  I: Register HL zeigt auf die Zahl
  O: Register DE und BC halten die Zahl
$STO32 B: Speichern einer 32-Bit Zahl
  I: Register DE und BC halten die Zahl, Register HL zeigt auf die Speicheradresse
  O: Zahl unter Speicheradresse abgelegt.

FIX32.MAC
$FIX32 B: Interne Routine für Division und Modulo