PlayASM
Übersicht

![]() |
wunderkindBetreff: PlayASM |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() gesehen und freue dazu noch, wenn jemand es nachbaut ![]() ist mir fluffig... *hüst* |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 ![]() [/edit] |
||
![]() |
wunderkind |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Och verdammt, gerade jetzt wo es interessant wird! Find ich schade... | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group