Frage

Im letzten Semester in der Schule, mein Lehrer in der Klasse Computersprachen hat uns gelehrt, die esoterische Sprache namens Leerzeichen . Im Interesse der die Sprache besser mit einem sehr vollen Terminkalendern Lernen (Mittelklausuren) schrieb ich ein Dolmetscher und Assembler in Python . Eine Assemblersprache Programme wurde entwickelt, um zu erleichtern leicht zu schreiben und ein Beispielprogramm mit dem angegebenen Assembly Mnemotechnik .

Nun, da es Sommer ist, ein neues Projekt mit dem Ziel, damit begonnen, den Interpreter und Assembler für Leer 0,3, mit weiteren Entwicklungen kommen danach neu zu schreiben. Da gibt es so viel mehr Zeit als bisher die Arbeit an seinem Design, Sie präsentiert hier mit einem Umriss, der einen überarbeiteten Satz von Mnemotechnik für die Assemblersprache zur Verfügung stellt. Dieser Beitrag ist als Wiki für ihre Diskussion markiert.

Haben Sie schon einmal in der Vergangenheit keine Erfahrung mit Assemblersprachen haben? Gab es einige Hinweise, die auf etwas anderes umbenannt wurde gedacht haben? Haben Sie gefunden, sich außerhalb der Box zu denken und mit einem anderen Paradigma als in dem die Mnemotechnik genannt wurden? Wenn Sie ja auf eine dieser Fragen beantworten können, sind Sie am meisten hier begrüßen zu können. Subjektive Antworten werden geschätzt!


Stack-Manipulation (IMP: [Leerzeichen])

ist Stack-Manipulation eine der häufigsten Operationen, daher der Kürze der IMP [Leertaste]. Es gibt vier Stapel Anweisungen.

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])

arbeiten Arithmetische Befehle auf den oberen beiden Elemente auf dem Stapel, und ersetzen Sie sie mit dem Ergebnis der Operation. Der erste Punkt gedrückt wird, betrachtet der Bediener gelassen werden.

add          Addition
sub          Subtraction
mul          Multiplication
div          Integer Division
mod          Modulo

Heap Access (IMP: [Tab] [Tab])

Heap-Zugriffsbefehle Blick auf den Stapel die Adresse der Elemente zu finden, gespeichert oder abgerufen werden. Um ein Element zu speichern, drücken Sie die Adresse dann den Wert und führen Sie den Speicherbefehl. Um ein Element abzurufen, drücken Sie die Adresse und führen Sie den Befehl abrufen, die den Wert in der Lage an der Spitze des Stapels gespeichert wird statt.

save         Store
load         Retrieve

Flow Control (IMP: [LF])

Flusskontrolle Operationen sind ebenfalls üblich. Subroutinen werden durch Etiketten markiert sowie die Ziele der bedingten und unbedingten Sprünge, durch die Schlaufen durchgeführt werden kann. Die Programme müssen mittels [LF] [LF] [LF] so beendet werden, dass der Dolmetscher sauber verlassen 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 Zahlen und einzelne Zeichen zu schreiben. Mit diesen können Routinen String-Manipulation geschrieben werden. Die Lesebefehle nehmen die Heap-Adresse, in dem von der Oberseite des Stapels das Ergebnis zu speichern.

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

War es hilfreich?

Lösung

  • Push #n, dafür, dass n deutlich zu machen ist eine sofortige.
  • "swap" ist manchmal "EXC" oder "multifunktional", denke ich.
  • "Speicher" ist in der Regel "st" (Speicher)
  • "Last" ist in der Regel "ld"
  • "call" könnte auch "JSR" oder "bl".
  • "goto" ist in der Regel "jmp" oder "BH"
  • "if = 0" in der Regel "beq"
  • "wenn <0" ist in der Regel "BLT"
  • "return" ist in der Regel "ret" oder "blr"
  • "exit" ist in der Regel "halt" / "hlt" im Zusammenhang mit einer CPU.
  • "print chr" und "print int" könnte "print.c" und "print.i" sein. Es gibt viele Möglichkeiten Anweisung angeben Varianten, aber in der Regel ist es nicht in den Operanden.

EDIT:

Wenn Sie nichts dagegen nicht Opcodes conflating und Adressierungsarten, mit CISCy Syntax,

  • "push (sp)" anstelle von "Kopie"
  • "Push N (sp)" statt "kopieren N" (Modulo durch die Wortgröße multipliziert)
  • "push * (sp)" anstelle von "load" (außer es macht einen Knall, bevor die geladenen Werte drücken)
  • "Pop * 1 (sp)" anstelle von "Push" (außer es zweimal tatsächlich erscheint)

Auf der anderen Seite, Stack-basierten Code in der Regel behandelt schieben und als implizite Pop. In diesem Fall "imm n" (sofort) anstelle von "push". Dann werden alle Stapeloperationen sind rein Stapeloperationen, die schön und konsistent ist.

Ich bin sicher nicht, wie ich schreiben würde „Drop N“ - die Beschreibung macht es klingen wie „Drop 1“ ist nicht gleichbedeutend mit „Tropfen“, die merkwürdig erscheint

.

Andere Tipps

Ich denke, die erste Änderung, die ich vorschlagen würde, ist Umgreifstelle und fällt jeweils drücken und Pop.

Dann würde ich vielleicht Kopie umbenannt, um zu dup (ich glaube, das ist der häufigste Name für diese Operation in Stapelorientierten Sprachen).

Ich bin ein wenig verwirrt, warum oft haben Sie kurz ein Wort Erklärungen, die andere auf die mnemonic. Zum Beispiel mnemonic Speicher sind, ist Erklärung Store. Mnemonic ist Last, Erklärung ist Abrufen. Übrigens, das sind die beiden Mnemotechnik, die mir nicht ausreichend erklärt werden. Speichern, was, wo? Laden, was von wo? ( Bearbeiten die Frage wurde nachträglich bearbeitet, um diese Bedeutungen deutlich zu machen)

Danke für den interessanten Beitrag.

Ich bin sicher, dass nicht ich Ihre Frage vollständig verstehen, also wenn ich Basis bin weg, vergib mir.

Zusätzlich zu Ihrem Stapel, würde ich wahrscheinlich ein „Statusregister“ hinzufügen, die eine Vielzahl von verschiedenen Flaggen enthalten (wie Trag, Überlauf und Null), die durch die arithmatic Betreiber festgelegt werden.

Ich würde dann hinzufügen „wenn“ -Formen, dass die Probe, die Fahnen.

würde ich Bitverschiebung und drehen hinzufügen (links und rechts) Anweisungen, sowie UND / ODER / XOR / NICHT Operationen, die auf Bits arbeiten.

Sie werden wahrscheinlich wollen eine Art von Speicherzugriff haben, wenn Sie die E / A-Anweisungen zu behandeln Speicher als Strom von Werten für diese gute Absicht ol‘fashioned Turing-Maschine fühlen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top