Wie Anweisungen unterscheiden sich von Daten?
Beim Lesen der ARM-core-Dokument, habe ich diese Zweifel. Wie funktioniert der CPU unterscheiden, werden die gelesenen Daten von der Daten-bus, ob es auszuführen, wie eine Anweisung oder als Daten -, dass es funktionieren kann, auf?
Beziehen sich auf den Auszug aus dem Dokument -
"Daten eingibt, der Prozessor-core
über den Daten-bus. Die Daten können
eine Anweisung auszuführen oder eine Daten -
Punkt."
Vielen Dank im Voraus für die Aufklärung, mir!
/MS
InformationsquelleAutor der Frage MS. | 2010-01-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Jeder opcode wird aus einer Anweisung von N bytes, die dann erwartet, dass die nachfolgende M-bytes von Daten (Speicher, Zeiger, etc.). Also die CPU nutzt jeder opcode, um zu bestimmen, wie manyof die folgenden bytes sind Daten.
Sicherlich für alt Prozessoren (z.B. alte 8-bit-Typen wie 6502) gab es keine Differenzierung. Normalerweise würden Sie zeigen die Programm-counter auf den Anfang des Programms in den Speicher und das wäre Referenzdaten von irgendwo anders in Erinnerung, aber das Programm/die Daten gespeichert wurden, als einfache 8-bit-Werte. Der Prozessor selbst konnte nicht unterscheiden zwischen den beiden.
War es durchaus möglich ist, zeigen die Programm-Zähler bei der was hatte als Daten, und in der Tat, ich erinnere mich an eine alte college-tutorial, wo mein professor hat genauund wir hatten den Fehler gemacht ihm zu. Seine Antwort war: "aber das ist Daten! Es kann nicht ausgeführt werden! Kann es?", an dem Punkt, den ich aufgefüllt, unsere Daten mit gültigen opcodes zu beweisen, dass, ja, könnte es.
InformationsquelleAutor der Antwort Brian Agnew
Einfache Antwort - es funktioniert nicht. Maschinen-code Instruktionen sind nur binäre zahlen, wie Daten sind. Mehr komplizierte Antwort - Prozessor kann (oder auch nicht) sorgen für die Segmentierung von Speicher, was bedeutet, dass Sie versuchen, auszuführen, was angegeben wurde als-Daten bewirkt, dass eine Falle von einer Art sein. Dies ist einer der den Sinn von einem "segmentation fault" - der Prozessor versucht, auszuführen, etwas, das war nicht gekennzeichnet als ausführbaren code.
InformationsquelleAutor der Antwort
Jedem Lesen durch den Prozessor ist bekannt, dass ein Datenabruf bzw. eine Anweisung zu Holen. Alle Prozessoren alten und neuen wissen, dass Ihre Anweisung holt aus Daten holt. Von außen können Sie oder können nicht in der Lage sein zu sagen, in der Regel nicht, außer für die harvard-Architektur-Prozessoren natürlich, das der ARM nicht. Ich habe die Arbeit mit den mpcore (ARM11) in letzter Zeit und es gibt bits über die externe Schnittstelle, die Ihnen sagen, ein wenig darüber, welche Art von Lesen, vor allem, um hook up einen externen cache, kombinieren Sie das mit dem wissen, wenn Sie haben die mmu-und L1-cache auf und man kann sagen Daten vom Unterricht, aber das ist die Ausnahme von der Regel. Von einem Speicher-bus Perspektive ist es gerade Daten-bits, die Sie nicht wissen, Daten vom Unterricht, aber die Logik, die initiiert, dass der Speicher-Zyklus und wartet auf das Ergebnis kannte, bevor es begann der Zyklus, welche Art von holt war und was es damit zu tun, dass die Daten, wenn Sie es bekommt.
InformationsquelleAutor der Antwort old_timer
Den original-ARM-design hatte einen drei-Stufen-pipeline zum ausführen von Anweisungen:
Die CPU-interne Logik sorgt dafür, dass es weiß, ob es das abrufen von Daten in Stufe 1 (D. H. eine Anweisung fetch), oder in der Stufe 3 (d.h. ein Datenabruf durch eine "load" - Anweisung).
Modernen ARM-Prozessoren verfügen über einen separaten bus für das abholen Anweisungen (also die pipeline nicht stall beim abrufen von Daten), und eine längere pipeline (schnelleren Taktraten), aber die Allgemeine Idee ist immer noch die gleiche.
InformationsquelleAutor der Antwort Mike Seymour
Ich denke seine nach unten, wo die Daten gespeichert sind, in das Programm-und Betriebssystem-Unterstützung für die Unterrichtung der CPU, ob der code oder Daten.
Alle code befindet sich in unterschiedliche Segmente des Bildes (zusammen mit statischen Daten wie Konstante Zeichenketten) im Vergleich zu den Speicher für die Variablen. Das Betriebssystem und die memory management unit) müssen dies wissen, weil Sie es können swap-code aus dem Speicher, indem Sie einfach verwerfen und neu laden von der original-CD-Datei (zumindest das ist, wie Windows das tut).
So, ich denke, die CPU 'weiß', ob Speicher von Daten oder code. Kein Zweifel, die modernen pipeling-CPUs haben wir jetzt auch Hinweise zum Lesen dieser Speicher anders zu helfen, den CPU-Verarbeitung ist es, so schnell wie möglich (z.B. code kann nicht zwischengespeichert werden, werden die Daten stets zugegriffen werden, nach dem Zufallsprinzip, anstatt in einem stream)
Seine immer noch möglich, Ihr Programm-Zähler-Daten, aber das OS kann sagen, die CPU um dies zu verhindern - siehe NX-bit und Windows " "Data Execution Protection" - Einstellungen (system control panel)
InformationsquelleAutor der Antwort gbjbaanb
So, ich denke, die CPU 'weiß', ob Speicher von Daten oder code. Kein Zweifel, die modernen pipeling-CPUs haben wir jetzt auch Hinweise zum Lesen dieser Speicher anders zu helfen, den CPU-Verarbeitung ist es, so schnell wie möglich (z.B. code kann nicht zwischengespeichert werden, werden die Daten stets zugegriffen werden, nach dem Zufallsprinzip, anstatt in einem stream)
InformationsquelleAutor der Antwort plokjuhhtgfdrc