...that a particular program just tells the CPU to fetch the info from a specific address and the program defines how to treat it.
Exactly. But RAM is not read "sequentially", and it stands for Random Access Memory which is exactly the opposite.
Neben dem Wissen, was ein Byte ist , wissen Sie nicht einmal, ob es sich um ein Byte oder ein Fragment eines größeren Elements wie einer Gleitkommazahl handelt.
Ich möchte andere Antworten mit einigen konkreten Beispielen ergänzen.
Überlegen Sie 01000001
. Das Programm kopiert es möglicherweise als Teil eines großen Datenpakets von einem Ort an einen anderen, ohne Rücksicht auf seine Bedeutung. Wenn Sie dies jedoch an die vom Videopuffer im Textmodus verwendete Adresse kopieren, wird der Buchstabe A
an einer bestimmten Position auf dem Bildschirm angezeigt. Die exakt gleiche Aktion, wenn sich die Karte in einem CGA-Grafikmodus befindet, zeigt ein rotes Pixel und ein blaues Pixel an.
In einem Register könnte es sich bei der Zahl 65 um eine Ganzzahl handeln. Rechnen, um das 32er-Bit zu setzen, kann alles bedeuten ohne Kontext , es kann jedoch insbesondere sein, dass ein Buchstabe in Kleinbuchstaben geändert wird.
Die 8086-CPU verfügt (noch) über spezielle Anweisungen namens DAA ※ , die verwendet werden, wenn das Register zwei Dezimalstellen enthält. Wenn Sie diese Anweisung also nur verwendet haben, interpretieren Sie sie als zwei Stellen 41
.
Programme stürzen ab, weil ein Speicherwort gelesen wird und denkt, es sei ein Zeiger, wenn etwas anderes dort gespeichert wurde.
Verwenden eines Debuggers, Überprüfen des Speichers, einer Karte verwendet, um die Interpretation für die Anzeige zu steuern. Ohne diese Symbolinformationen können Sie in einem Low-Level-Debugger Folgendes angeben: Diese Adresse als 16-Bit-Wörter anzeigen, diese Adresse als langen Gleitkommawert als Zeichenfolgen anzeigen ... wie auch immer. Bei einem Netzwerk-Packet-Dump oder einem unbekannten Dateiformat ist es eine Herausforderung, das Rätsel zu lösen.
Dies ist eine wichtige Quelle für Leistung und Flexibilität in der modernen Computerarchitektur: Eine Speicherzelle kann alles , Daten oder Befehle, bedeuten , die nur implizieren, was sie für das Programm bedeutet, was sie mit dem Wert tut und wie sich dies auf nachfolgende Operationen auswirkt. bedeutung ist tiefer als ganzzahlige breite: sind diese zeichen ... zeichen in ascii oder ebcdic? Bilden Sie Wörter in Englisch oder SQU-Produktcodes? Die zu sendende Adresse oder die Absenderadresse? Die Interpretation der untersten Ebene (logische Bits; ganzzahlig, vorzeichenbehaftet oder vorzeichenlos; float; bcd; pointer) ist auf Befehlssatzebene kontextbezogen, aber Sie sehen, dass auf einer bestimmten Ebene alles Kontext ist: das to Adresse aufgrund der Position auf dem Umschlag so ist, wie sie ist. Es steht im Zusammenhang mit den Regeln des Postboten, nicht der CPU. Der Kontext ist ein großes Kontinuum, an dessen einem Ende sich Teile befinden.
※ Footnote: The DAA instruction is encoded as a byte 00100111
. So that byte is the aforenamed instruction if read in the instruction stream, and the digits 27
if interpreted as bcd digits, and 0x27 = 39 as an integer, which is the numeral 9 in ASCII, and part of the interrupt table (half of INT 13 2-byte address, used for BIOS service routines).