Downloads
Spezifikation und Funktionsübersicht
Registergröße
32-Bit Register, 32-Bit Wortgröße, 32-Bit Addressbusgröße
Zahlendarstellung
Dezimal
Philosonline
- >=2^15 => Zweierkomplement
- VZ & <2^15 => B&V
Yapjoma
- VZ & in range
[-2^15, 2^15-1]
Binär
Philosonline
- Prefix
0b
oder Suffixb
- Genau 16Bit => Zweierkomplement
- VZ & <16Bit => B&V
Yapjoma
- Prefix
0b
- Genau 16Bit, Zweierkomplement vorzeichenerweitert auf 32Bit, kein explizites VZ
Hexadezimal
Philosonline
- Prefix
0x
oder Suffixh
- Genau 16Bit => Zweierkomplement
- VZ & <16Bit => B&V
Yapjoma
- Prefix
0x
- Genau 16Bit, Zweierkomplement vorzeichenerweitert auf 32Bit, kein explizites VZ
Standard
- Wie Philosonline, weil das ein Superset von Yapjoma ist
Anweisungscodierung
- Pro Anweisung 1 Wort (32 Bit)
- 6 Bit Opcode
- 5 Bit erster Registeroperand
- 5 Bit zweiter Registeroperand
- 16 Bit immediate Operand
Speicheradressierung
- Wortbasierte Adressierung (Alle 4 Byte eine Adresse)
Speicherinitialisierung
- Normalerweise alles zufällige Daten in Speicher und Registern
Philosonline
- JSON-Datei
Yapjoma
- Eigenes format
Bezeichnerausdrücke
- Keywords sind case-insensitiv
- Vor nicht-Alias-Registerausdrücken darf ein
$
stehen. - Benutzerdefinierte Bezeichner müssen mit einem ASCII-Buchstaben beginnen
- Benutzerdefinierte Bezeichner müssen ansonsten aus ASCII-Buchstaben oder ASCII-Ziffern oder dem Unterstrich
_
bestehen
Philosonline
- Benutzerdefinierte Bezeichner sind case-sensitiv
Yapjoma
- Benutzerdefinierte Bezeichner sind case-insensitiv
- Makroargumentennamen sind eingeschränkt (siehe Makros)
- Namen, die für Makroargumente erlaubt sind, sind für keine anderen Bezeichner erlaubt.
Standard
- Benutzerdefinierte Bezeichner sind case-insensitiv
Label
label_name:
instructions
- Können vor Definition verwendet werden.
- Doppelpunkt ist notwendig
Aliasse
Philosonline
alias name = wert
- Aliasse werden aufgelöst, indem jedes Vorkommen durch den Wert ersetzt wird. Aliasse dürfen nicht mit
$
geprefixt werden, auch wenn sie auf Register verweisen.
Yapjoma
- Werden nicht unterstützt
Makros
- Label, die in Makros deklariert werden, werden nur innerhalb desselben Makros aufgelöst
- Label von außen, auf die in Makros verwiesen wird, werden unverändert aufgelöst
- Gleiches gilt für Aliasse (Philosonline)
Philosonline
macro name args:
instructions
endmacro
- Makros müssen vor ihrer Verwendung definiert werden.
- Der Programmfluss muss Makros nicht vor ihrer Verwendung erreichen (denn sie werden zur Compilezeit aufgelöst)
- Der Doppelpunkt ist optional.
- Makro-Definitionen können geschachtelt werden, Makros sind nur innerhalb ihres Elternmakros gültig.
- Makros können innerhalb von anderen Makros eingesetzt werden, solange nicht rekursiv
Yapjoma
macro name args
instructions
mend
- Makros dürfen vor ihrer Definition verwendet werden.
- Der Programmfluss muss Makros nicht vor ihrer Verwendung erreichen (denn sie werden zur Compilezeit aufgelöst)
- Nach dem letzten Argument darf kein Doppelpunkt stehen.
- Argumente müssen je nach ihrem Typ Namen der Form
regX
,constX
oderlabelX
haben, wobeiX
eine Zahl von 0 bis 99 ist. - Makro-Definitionen können nicht geschachtelt werden
- Makros können innerhalb von anderen Makros eingesetzt werden, solange nicht rekursiv
Anweisungen, die in einem Makro stehen, werden normalerweise übersprungen. Wenn aber die macro-Anwesiung in der allerersten Zeile des Programms steht, wird diese übersehen. Der erzeugte Programmspeicher wird aber korrekt angezeigt.
macro testmakro
sysout "makro"
mend
sysout "startet"
testmakro
sysout "endet"
systerm
Standard
- Doppelpunkt optional
- Makros dürfen vor ihrer Definition verwendet werden
endmacro
undmend
sind beide zulässig- Makros dürfen in Makros verwendet werden, solange nicht rekursiv
- Makrodefinitionen dürfen nicht geschachtelt werden. Auch nicht im Kompatibilitätsmodus für Philosonline!
Instruktionen
befehl arg1 arg2 arg2
; ODER
befehl arg1, arg2, arg3
Flags
Overflow-Flag
Bugs
Philosonline bgt
- Philosonline scheint für bgt die eine Zahl von der anderen abzuziehen. Wenn die Differenz der Zahlen größer als
2^31 - 1
ist, kommt es zum Overflow und Philos trifft die falsche Entscheidung.
Philosonline Doku
bgt
Verhalten (insbesondere Bug) nicht genau spezifiziert- Bytecode-Kodierung von magic instructions nicht genau definiert
bo
Instruction wird aufgeführt als ob es 2 Register und ein Label annimmt; tatsächlich ist nur ein Label korrekt.