Letztes Semester in der Schule lehrte mich mein Lehrer in der Computersprache-Klasse die esoterische Sprache genannt Whitespace. Im Interesse des Erlernens der Sprache besser mit einem sehr vollen Zeitplan (Midterms), schrieb ich eine interpreter und assembler in Python. Ein assembly language wurde entworfen, um das Schreiben von Programmen leicht zu erleichtern, und ein sample program wurde mit der gegebenen Baugruppe mnemonics geschrieben.Haben Sie Vorschläge für diese Montage Mnemonics?
Jetzt, da es Sommer ist, hat ein neues Projekt begonnen mit dem Ziel, den Interpreter und Assembler für Whitespace 0.3 neu zu schreiben, mit weiteren Entwicklungen, die danach kommen. Da es so viel mehr Zeit als zuvor gibt, um an seinem Design zu arbeiten, werden Sie hier mit einem Überblick vorgestellt, der eine überarbeitete Menge von Mnemotechniken für die Assembler-Sprache bereitstellt. Dieser Beitrag ist als Wiki für ihre Diskussion markiert.
Hatten Sie jemals Erfahrungen mit Assemblersprachen in der Vergangenheit? Gab es Anweisungen, von denen Sie dachten, dass sie in etwas anderes umbenannt werden sollten? Hast du dich über den Tellerrand hinaus und mit einem anderen Paradigma als in dem die Mnemotechniken benannt wurden? Wenn Sie eine dieser Fragen mit Ja beantworten können, sind Sie hier herzlich willkommen. Subjektive Antworten werden geschätzt!
Stapelmanipulations (IMP: [Leer])
Stapelmanipulations ist einer der häufigsten Operationen, daher der Kürze der IMP [Leer]. Es gibt vier Stapelanweisungen.
hold N Push the number onto the stack
copy Duplicate the top item on the stack
copy N Copy the nth item on the stack (given by the argument) onto the top of the stack
swap Swap the top two items on the stack
drop Discard the top item on the stack
drop N Slide n items off the stack, keeping the top item
Arithmetic (IMP: [TAB] [Leerzeichen])
Arithmetische Befehle operieren auf den beiden oberen Elemente auf dem Stapel, und ersetzen sie durch das Ergebnis der Operation. Der erste gedrückte Gegenstand wird als vom Bediener links betrachtet.
add Addition
sub Subtraction
mul Multiplication
div Integer Division
mod Modulo
Heap Access (IMP: [Tab] [Tab])
Heap-Zugriffsbefehle auf dem Stapel sehen die Adresse der Elemente zu finden, gespeichert oder abgerufen werden. Um ein Element zu speichern, drücken Sie die Adresse und dann den Wert und führen Sie den Speicherbefehl aus. Um ein Element abzurufen, drücken Sie auf die Adresse und führen Sie den Befehl retrieve aus. Dadurch wird der Wert an der Position oben im Stapel gespeichert.
save Store
load Retrieve
Flow Control (IMP: [LF])
Strömungssteueroperationen sind ebenfalls üblich. Subroutinen sind durch Labels gekennzeichnet, ebenso wie die Ziele von bedingten und unbedingten Sprüngen, mit denen Schleifen implementiert werden können. Programme müssen mit [LF] [LF] [LF] beendet werden, damit der Interpreter sauber beenden kann.
L: Mark a location in the program
call L Call a subroutine
goto L Jump unconditionally to a label
if=0 L Jump to a label if the top of the stack is zero
if<0 L Jump to a label if the top of the stack is negative
return End a subroutine and transfer control back to the caller
halt End the program
I/O (IMP: [Tab] [LF])
Schließlich müssen wir mit dem Benutzer interagieren zu können. Es gibt IO-Anweisungen zum Lesen und Schreiben von Zahlen und einzelnen Zeichen. Mit diesen können String-Manipulationsroutinen geschrieben werden. Die Leseanweisungen nehmen die Heap-Adresse, in der das Ergebnis von der Oberseite des Stapels gespeichert wird.
print chr Output the character at the top of the stack
print int Output the number at the top of the stack
input chr Read a character and place it in the location given by the top of the stack
input int Read a number and place it in the location given by the top of the stack
Frage: Wie würden Sie neu zu gestalten, neu zu schreiben oder die bisherigen Mnemotechnik umbenennen und aus welchen Gründen?
Heiliger Mist, ein Whitespace Assembler? Ich glaube, dein Geek-O-Meter ist einfach auf elf gestiegen! – Martin