PlayASM

Übersicht Sonstiges Projekte

Neue Antwort erstellen

wunderkind

Betreff: PlayASM

BeitragSo, Feb 06, 2005 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Rahmen meines Studiums schreibe ich an einem kleinen Programm, welches eine Art Assembler-Code interpretiert. Momentan hält sich der Funktionsumfang noch in Grenzen. Vielleicht interessiert's jemanden. Hier die BB Version...bewusst einfach gehalten.

Akktuelle Version
playasm_v0_05.zip (470 Kb)

Zur Anwendung: Ihr schreibt einfach mit einem Editor ein kleines Programm bestehend aus den folgenden Befehlen. Das war's. Mit wachsendem Befehlssatz steigen auch die Möglichkeiten.

Label (Sprungmarken)
Label können wie folgt definiert und verwendet werden:

Code: [AUSKLAPPEN]
jmp label1 ; Änderungen an Register b überspringen

mov b, 1 ; Lade 3 in Register b
add b, a ; Addiere zu Register b den Inhalt von Register a
print b

label1:


Verfügbare Befehle
ADD x, y :: führt 'x + y' aus und speichert das Ergebnis in x.
ADD reg, const
ADD reg, reg

JMP label :: springt im Code zum label.

MOV x, y :: Kopiert den Wert y nach x.
MOV reg, const
MOV reg, reg

MUL x :: Führt 'x * Register A' aus und speichert das Ergebnis in Register A.
MUL const
MUL reg

PRINT x :: Gibt x auf dem Bildschirm aus.
PRINT reg

SUB x, y :: Führt 'x - y' aus und speichert das Ergebnis in x.
SUB reg, const
SUB reg, reg

Prozessor-Register
Davon gibt's vier. Sie heißen A, B, C, D. Obere und untere Anteile (z.B. AH & AL) werden erstmal nicht implementiert.

Das Grundgerüst steht und weitere Befehle werden hinzugefügt. Mit dem nächsten Schritt werden Labels und bedingte sowie unbedingte Sprünge hinzugefügt. Außerdem werden die entsprechenden Flags (Zero, Overflow, Carry etc.) eingeführt, ohne die die bedingten Sprünge nicht möglich wären.

Dabei denke ich gerade wieder an die Idee der Roboter + KI, die hier irgendwo im Forum herumgeistert. Vielleicht werde ich den Kram später dahingehend erweitern.
  • Zuletzt bearbeitet von wunderkind am Mi, Feb 09, 2005 13:12, insgesamt 2-mal bearbeitet
 

Kekskiller

BeitragSo, Feb 06, 2005 21:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Schon mal ganz gut für den Anfang. Auch gut ist die bei vielen Anfängen
von Scriptsprachen verpennte Leerzeichenbearbeitung -> fein.
Code: [AUSKLAPPEN]
'Kommentar

                                           mov a,                     4
  add a,      246




                                        sub a, 200
  mul a,          4

print                   a

Läuft problemlos, ohne Murren. Wenn du das noch um eine Division erweiterst,
bin ich richtig stolz auf dich Wink . Lustigerweise hab ich noch nie Asm
gesehen und freue dazu noch, wenn jemand es nachbaut Very Happy . Hach, heut
ist mir fluffig... *hüst*

BladeRunner

Moderator

BeitragMo, Feb 07, 2005 9:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Nice. Erinnert mich an eine lustige Diskussion mit ST (er gab wie immer alles) in der er behauptete Befehle wie BCC (BranchifCarryClear) und BCS (BranchifCarrySet) seien nur Makros meines Assemblers. Selbst als ich ihm erkärte dass es Standard-OpCodes des 6502 waren interessierte ihn das recht wenig. Bau die "Makros" bitte bald ein, dann könnte das lustige Erinnerungen an 198x wachrufen Smile
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

joachim_neu

BeitragDi, Feb 08, 2005 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
tja, ist aber kein ASM-Code. ich fände es besser, wenn du einen ASM-Syntax nimmst (z.B. NASM) PRINT gibbet so nicht und MUL arbeitet mit nur einem operant, der AX oder AL verwendet.
http://www.joachim-neu.de | http://www.orbitalpirates.de | http://www.middleageworld.de

wunderkind

BeitragDi, Feb 08, 2005 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
joachim_neu hat Folgendes geschrieben:
tja, ist aber kein ASM-Code. ich fände es besser, wenn du einen ASM-Syntax nimmst (z.B. NASM) PRINT gibbet so nicht und MUL arbeitet mit nur einem operant, der AX oder AL verwendet.

MUL wurde in der neuen Version korregiert (noch nicht online). Mein Fehler.

PRINT dient hier auch mehr Debug-Zwecken. Tatsächlich gibt es diesen Befehl in einem Assembler nicht. Aber bei PlayASM geht's auch nur darum, "eine Art Assembler-Code" zu interpretieren, keinen 100%igen Assembler-Code also.

BladeRunner hat Folgendes geschrieben:
Bau die "Makros" bitte bald ein, dann könnte das lustige Erinnerungen an 198x wachrufen.


Makros wird es vorerst nicht geben, dafür Prozeduren per PROC / ENDP.

BladeRunner

Moderator

BeitragDi, Feb 08, 2005 22:58
Antworten mit Zitat
Benutzer-Profile anzeigen
ich meinte schon Standardopcodes wie bedingte Sprünge und die Flags die Du erwähnt hast.
Makros schrieb ich nur in Anlehnung auf die Diskussion mit ST.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

wunderkind

BeitragMi, Feb 09, 2005 13:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hatte mal wieder ein wenig Zeit.

Neu
Der Befehl JMP ist neu. Mit ihm lassen sich Label anspringen die ebenfalls neu sind und mit "label_name:" definiert werden (ohne Anführungszeichen). Die Sprungmarke bei JMP ist unbedingt ohne den Doppelpunkt anzugeben! Der ist nur bei der Definition notwendig.

ACHTUNG: Man kann jetzt nette Endlosschleifen programmieren Wink! Z.B.

Code: [AUSKLAPPEN]
label2:

add a, 2
print a

jmp label2


Änderungen
Der Befehl MUL wurde korregiert. Er multipliziert jetzt wie erwartet immer das Register A mit einer Konstanten oder einem Register. Beschreibung siehe auch im ersten Beitrag.

Den aktuellen Download-Link findet ihr im ersten Beitrag.

[edit]
Whoops, da war ja noch eine Debug-Ausgabe drinnen Embarassed. Wurde entfernt und neu hochgeladen.
[/edit]

wunderkind

BeitragFr, Feb 11, 2005 11:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Etwas genervt wegen einiger mangelnde Funktionalitäten Blitzbasic's (z.B. lassen sich mehrere Maschinen nebeneinander nur umständlich implementieren) geht die Entwicklung jetzt unter BMAX weiter. Leider wird es deshalb keine öffentlichen Versionen mehr geben, bis BMAX offiziell für Windows erhältlich ist.
 

Kekskiller

BeitragFr, Feb 11, 2005 19:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Och verdammt, gerade jetzt wo es interessant wird! Find ich schade...

Neue Antwort erstellen


Übersicht Sonstiges Projekte

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group