2016-03-19 22 views
3

Wie ich verstehe BASIC hatte Zeilennummern, weil Sie zu der Zeit einen Zeileneditor verwenden mussten, um Ihr Programm einzugeben. Es erlaubt Ihnen, so etwas zu tun:BASIC, wie Zeilen im Speicher gespeichert wurden?

20 END 
10 PRINT "HELLO WORLD" 

Dieses Programm "HELLO WORLD" drucken. Meine Frage ist, wie hat BASIC Ihnen erlaubt, Linien auf diese Weise einzugeben? Wie wurden sie gespeichert? Ich nehme an, es war eine Karte von Zeilennummern und Zeigern zu Zeilen selbst, die jedes Mal aktualisiert wurde, wenn Sie eine Zeile eingeben. Diese Karte müsste jedoch vor dem Ausführen eines Befehls LIST/RUN sortiert werden. Ist das so? Wenn nicht, wie genau speicherte BASIC Befehle im Speicher?

+2

Ich weiß es eigentlich nicht, aber ich würde annehmen, dass sie etwas wie eine BST-basierte Karte verwenden würden, die automatisch sortiert wird. Das heißt, Elemente werden so eingefügt, dass die Karte immer sortiert ist. – sepp2k

+0

@ sepp2k, danke! BST wurde in den sechziger Jahren erfunden und Microsoft BASIC wurde in 75 erstellt, also wahrscheinlich das, was sie verwendet haben. – Victor

Antwort

4

Ich denke, dass jede grundlegende Implementierung einen bestimmten Ansatz verwendet.

Das Basic, mit dem ich aufgewachsen bin, war ein Microsoft Basic, der auf dem MSX-Computer lief. Laut "The MSX Red Book", das ich zu dieser Zeit sehr aufmerksam gelesen habe, hat das MS-Basic tatsächlich eine lineare Liste verwendet.

Jede Basic-Zeile wurde als Zeiger auf die nächste Zeile gespeichert, gefolgt von der eigentlichen Zeilennummer in binärer Form, gefolgt von der Token-Version der Zeile gefolgt von einem Null-Zeichen; so etwas wie diese:

Address | Content 
    8000  | 8009 -- next line 
    8002  | 10 -- this line number 
    8004  | .... -- opcodes for each instruction in the line 
    ...  | ... 
    8007  | ... 
    8008  | Null -- terminator 
    8009  | ... -- the next line 

Trotz der Tatsache, dass die Linien, wo eine verknüpfte Liste, das Basic-Interpreter nicht das auszunutzen haben. Jede Linie wurde physikalisch in linearer Abfolge gespeichert.

Wie Sie sich vorstellen können, bedeutete das Einfügen und Löschen von Zeilen in der Mitte eines vorhandenen Programms viel Arbeit. Wenn neue Zeilen zwischen bestehende Zeilen eingefügt wurden, wurden die nachfolgenden Zeilen im Speicher nach oben verschoben, um Platz für die neuen zu schaffen. In ähnlicher Weise würde das Löschen von Zeilen in der Mitte des Programms dazu führen, dass die nachfolgenden Zeilen im Speicher nach unten bewegt werden, um den Platz zu füllen, der von den entfernten Einsen übrig geblieben ist. Das Verschieben des Speichers nach oben und unten bedeutete, dass alle diese Links für jede verschobene Zeile aktualisiert werden mussten.

+0

Vielen Dank! Ich fing an zu vermuten, dass eine Version von BASIC verknüpfte Listen verwenden sollte, da sie sehr logisch sind und (vermutlich) ziemlich effizient für die Aufgabe sind – Victor