Runtime (Routinen-Sammlung)

Dieser Text gilt für alle Seiten aus dieser Rubrik (Runtime).

Dies hier ist die harte Basis für eine Runtime die in möglichst hochoptimiertem Assembler geschrieben sein muß.
Alle Hochsprachen-Routinen basieren letztendlich auf einer solchen Laufzeit-Basis.

Durch Vollständige Umsetzung in ASM werden diese Funktionen schneller sein als solche, die in Hochsprachen geschrieben werden.
Die Basis Operationen wie + - * / usw. können nur in ASM realisiert werden, da dies die niedrigste Hierarchiestufe ist und jede Hochsprache diese Funktionen in ASM umsetzen muß.
Andere wie z.B. komplexe Zahlen können in einer Hochsprache geschrieben sein (hier VisualBasic), da sie auf den Grundfunktionen aufbauen. Sie können zum Teil über ASM optimiert werden, sollten aber dennoch auch zur späteren Funktionsprüfung auch in der Hochsprache geschrieben werden.

Jede Zeile in ASM sollte kommentiert werden, damit sofort ersichtlich ist, was in der Zeile geschieht. Einerseits dient dies sehr der Lesbarkeit, andererseits hilft das Anfängern gleichzeitig auch beim Erlernen von ASM.
Die Codes sind so einfach wir nur möglich organisiert und konzentrieren sich auf das Wesentlichste, damit mit möglichst wenig Zeitaufwand die Codes und die Strukturen verstanden werden können.

Alle ASM Codes werden für 32Bit Prozessoren im Flat-Memory Model realisiert.

Einige Bereiche richten sich auch an Profis mit tieferen Kenntnissen in Mathematik und dessen optimaler Umsetzung in ASM. Andere können Anfängern helfen ASM zu erlernen.

Alle Codes sollen im gleichen Format geschrieben werden.


Runtime Informationen :!:

Mathe-Integer Basis-Mathematik +-*/\^Sqr usw für Ganzzahl-Mathe
Mathe-Integer-Extra Weitere Rutinen
Mathe-Float Basis-Mathematik +-*/\^Sqr Log usw für Fliespunkt-Mathe
Mathe-Float-Extra Weitere Rutinen
Mathe-Integer8 Lange Integer mit 8 Byte, in 32Bit Umgebung berechnen 64Bit Long Long Integer
Mathe-Currency Lange Integer mit 8 Byte und Fix-Kommastelle, in 32Bit Umgebung berechnen 64Bit Currency
Mathe-BitBoolean Bit und Bolsche Operationen
Mathe-Konvert Zahlen Konvertierung

Mathe-Trigonometrie Sinus Cosinus Tangens usw
Mathe-Geometrie Triangulation, Phytagoras usw
Mathe-2D 2D Berechnungen, Vektoren Matrizen usw
Mathe-3D 3D Berechnungen, Vektoren Matrizen usw
Mathe-Complex 2D Komplexe-Zahlen
Mathe-Quaternion 4D Komplexe-Zahlen

String String-Management
Array Array-Management, Dimensionieren Suchen Sortieren
Variant Variant-Management, für flexible Datensstrunturen
Klassen Klassen-Management und Objektorientiertes-Programmieren
Speicher Direkte Speicher-Manipulationen
Random Zufallszahlen generieren
DatumZeit Datumzeit-Management für Serial und System

Main-Routinen Routinen für die Hauptstruktur, und das Initialisieren und Beenden eines Programms
BetriebsSystem-Windows Windows-Funktionen, Kommunikation und Formularelemente
EXE-Strukturen Strukturen einer EXE-PE Datei

Beispiele

Mathe-Integer für CPU-ASM
Mathe-Trigonometrie für FPU-ASM
Mathe-Complex für VisualBasic

Test-Projekte um erstellte Proceduren zu testen im Download.

ASM-Codes

Die ASM-Codes sind alle absichtlich sehr kompakt. Sie enthalten nur die Variablen-Übergabe und den Berechnungsteil, wobei die Variabeln mit Namen bezeichnet werden. Zusätzlich können Markierungen eingefügt werden, die z.B. die Position einer Overflow-Prüfung markieren. Die ASM-Codes besitzen so ein Format, das direkt in MASM kompilierbar ist.
Alle Codes werden nur für CPU-32Bit oder FPU-80Bit Register geschrieben.

Wenn möglich sollten die Variabeln-Übergaben ganz oben stehen.

Standard Rückgabe-Register sind
EAXbei CPU(und EDX) alle anderen Register gelten als flüchtig
ST(0)bei FPU(und ST(1)) der Stack darüber muß leer sein
EDX, ST(1)Bei bestimmten Operationen manchmal auch EDX oder ST(1)


Mehr Informationen im Schnell-Kurs

WICHTIG

FIXME Es müssen alle Funktionen auf Korrektheit geprüft und möglicherweise ein Fehler-Handling eingefügt werden.
FIXME Die Codes sind alle noch in einem sehr frühem Entwicklungsstadium!
FIXME Statt es auf einen Fehler ankommen zu lassen ist es manchmal möglich, Grenzbereiche zu prüfen um schon am Eingang zu prüfen ob das Resultat berechenbar ist.

ASM-Schreibweise

Alle Assembler Codes werden in einem entsprechenden Codeblock eingegeben, der immer dem gleichen Format entsprechen sollte.

ASM-CPU Integer

Test_NAME PROC Public Val1:DWORD, Val2:DWORD
;=== Beschreibung
;=== Formel
  MOV EAX, Val1
 
    FUNKTION    PARAMETER        ; Kommentar
;@CheckOverflow
 
  RET
Test_NAME ENDP


Beispiel

Test_Add PROC Public Val1:DWORD, Val2:DWORD
;=== +, Addition
;=== EAX = Val1 + Val2
  MOV EAX, Val1
 
    ADD EAX, Val2
;@CheckOverflow
 
  RET
Test_Add ENDP

ASM-FPU Float

Test_Fpu_NAME PROC Public Val1:TBYTE, Val2:TBYTE
;=== Beschreibung
;=== Formel
  FLD       Val2               ; -> ST0 = Val2
  FLD       Val1               ; -> ST0 = Val1 , ST1=Val2
 
    FUNKTION    PARAMETER        ; Stack-Zustand  [Kommentar]
;@CheckOverflow
 
  FWAIT
  RET
Test_Fpu_NAME ENDP


Beispiel

Test_Fpu_Add PROC Public Val1:TBYTE, Val2:TBYTE
;=== +, Addition
;=== ST0 = Val1 + Val2
  FLD       Val2               ; -> ST0 = Val2
  FLD       Val1               ; -> ST0 = Val1 , ST1=Val2
 
    FADDP ST(1), ST            ; <- ST0 = ST0 + ST1
;@CheckOverflow
 
  FWAIT
  RET
Test_Fpu_Add ENDP

ASM-FPU Float Register

Stack-Register/Parameter sollten immer angegeben werden auch wenn nicht zwingend notwendig, um die Register eindeutig zu bezeichnen und den Code lesbarer zu machen. Und auch um Funktionen erkennen zu können, die keine Parameter besitzen und dadurch nur auf ST0 anwendbar sind.

? --> 0-7 Platzhalter für 8 FPU-Register

Parameter
ST(?)Ist die korrekte Schreibweise für die Parameter. Ist nichts angegeben ist ST(0) meistens der Standard.
STBedeutet, dass es ST0 sein muß, da nur dieses erlaubt ist.
ST?Wird für die Stack-Beschreibung der Einfachheit halber verwendet (also zB. ST(0) statt ST0).


ASM FPU Kommentar-Format
--Keine FPU-Stack Bewegung
->PUSH auf FPU-Stack
<-POP vom FPU-Stack
ST? = Val1Es wurde eine Berechnung durchgeführt und gespeichert
ST?=Val1Es wurde ein Resultat unverändert beibehalten und vielleicht auf ein anderes Register verschoben


Spezielle Operationen im Kommentar
<?>Vergleichen
<=>Vertauschen

Mehr Informationen im Schnell-Kurs

Markierungen, Schlüsselwörter für Automatisierung

Um bestimmte Operationen zu automatisieren werden Schlüsselwörter verwendet.

TextKurzBeschreibung
;@CheckOverflowÜberlauf PrüfungJe nach VarTyp wird Overflow oder Cary Flag geprüft, ist es gesetzt wird zu Fehler gesprungen
Jump_End:EndeMarkiert die Standard-Sprungmarke für das Ende des Codes (wenn notwendig)

Runtime/Runtime.txt · Zuletzt geändert: 2009/03/28 07:20 (Externe Bearbeitung)