2011-01-03 9 views
0

Ich möchte einen IBM-PC-kompatiblen Emulator mit C++ als ein Bildungsprojekt schreiben, und um den 8086-Prozessor richtig zu emulieren, benötigen Informationen darüber, wie es funktioniert.x86 Architekturspezifikationen

Einige Beispiele für die Informationen, würde ich brauche:

  • Wie wird der Code (Größe der einzelnen Anweisungen, wie sie ausgepackt werden, etc.) strukturiert

  • Genaue Funktionsweise der Register

  • Detaillierte Informationen zu den einzelnen Anweisungen (Zum Beispiel ist die Standardbeschreibung für den CMP-Befehl "Vergleicht ... und ... und setzt die Flags" nicht genug für mich)

Ich habe schon gesucht um für ein paar Stunden, aber die Informationen, die ich mehr bekam, war an Menschen, versuchen x86-Assembler, und wurde nicht detailliert genug

Vielleicht können Sie mir helfen, lernen?

Antwort

0

Sie auf die Intel-Architektur Handbücher aussehen könnte: http://www.intel.com/products/processor/manuals/ (Anmerkung: Otavio der Link ist besser, da es zu einer älteren Handbuch geht)

Natürlich enthalten diese Spezifikationen für viele Anweisungen und Funktionen, die nicht in der 8086 existierten, aber Sie sollten in der Lage sein, über die neuen Sachen zu überspringen.

Sie können auch auf Bochs schauen, um die Dinge zu überprüfen oder ein paar Ideen zu bekommen.

Schließlich, es sei denn, Sie sind bereits ziemlich zuversichtlich, würde ich empfehlen, mit einem einfacheren (RISC) Befehlssatz, wie einer der MIPS-Architekturen zu beginnen. Befehlsdecodierungs- und Adressierungsmodi sind in einer typischen RISC-Architektur wesentlich weniger komplex als in einer typischen CISC-Architektur.

1

sandpile.org ist ein schöner Ort, wenn Sie Informationen über das Kodierungsformat von x86-Opcodes benötigen. Alle Informationen sind in Tabellen zur einfachen Suche organisiert.

0

Die Kunst der Assemblersprache, von Randall Hyde. Es hat ein paar Abschnitte, wie der Prozessor arbeitet, zum Beispiel:

Kapitel Drei: Systemorganisation

  • 3,0 Kapitelübersicht
  • 3.1 Die Basis-Systemkomponenten
  • 3.1.1 Systembus
  • 3.1.1.1 Der Datenbus
  • 3.1.1.2 Die Adresse Bus
  • 3.1.1.3 Der Steuerbus
  • 3.1.2 Das Speichersubsystem
  • 3.1.3 Das I/O-Subsystem
  • 3.2 System-Timing
  • 3.2.1 Die Systemuhr
  • 3.2.2 Speicherzugriff und die Systemuhr
  • 3.2.3 Wait States
  • 3.2.4 Cache-Speicher
  • 3.3 886, 8286, 8486 und 8686 „Hypothetische“ Prozessoren
  • 3.3.1 CPU-Register
  • 3.3.2 Die Arithmetik & Logical Unit
  • 3.3.3 Die Busschnittstelleneinheit
  • 3.3.4 Die Kontrolleinheit und Befehlssätze
  • 3.3.5 Die x86-Instruktion
  • 3.3.6 Modi Adressierung auf die x86
  • 3.3.7 Encoding x86-Befehle
  • 3.3.8 Schritt-für-Schritt-Anleitung Execution
  • 3.3.9 Die Unterschiede zwischen den x86-Prozessoren
  • 3.3.10 Der Prozessor 886
  • 3.3.11 Der Prozessor 8286
  • 3.3.12 Die 8486 Processor
  • 3.3.12.1 Die Pipeline 8486
  • 3.3.12.2 Stalls in einer Pipeline
  • 3.3.12.3 Cache, der Prefetch-Warteschlange, und die 8486
  • 3.3.12.4 Gefahren auf dem 8486
  • 3.3.13 der Prozessor 8686
  • 3.4 I/O (Input/Output)
  • 3.5 Interrupts und Polled I/O