Movatterモバイル変換


[0]ホーム

URL:


Zum Inhalt springen
WikipediaDie freie Enzyklopädie
Suche

Intel 8085

aus Wikipedia, der freien Enzyklopädie
<<   Intel 8085   >>

Intel P8085
Produktion:1976 bis 1990er
Produzenten:
Prozessortakt:2 MHz bis 6 MHz
Fertigung:3 µm, NMOS oder enhanced NMOS
Befehlssatz:Intel 8 Bit
Sockel:40-pin DIP

DerIntel 8085 ist ein 1976 eingeführter8-Bit-Mikroprozessor vonIntel. Als Nachfolger desIntel 8080 war er zu diesembinär-kompatibel, integrierte jedoch Taktgenerator (8224) und Buscontroller (8228) und besaß eine leistungsfähigereInterrupt-Behandlung. Die 5 im Namen bezog sich auf den Fakt, dass der Prozessor nur eine 5-Volt-Betriebsspannung benötigte. Am Markt konkurrierte der Intel 8085 mit dem im selben Jahr erschienenenZilog Z80, der ebenfalls binärabwärtskompatibel zum Intel 8080 war. Zum Einsatz kam der Chip in verschiedenenCP/M-Computern, bei derAusbildung von Elektronikern sowie alsMikrocontroller in Büroschreibmaschinen,Oszilloskopen, aber auch im Rover der MarssondePathfinder.[1]

Technische Daten

[Bearbeiten |Quelltext bearbeiten]
Intel 8085: Funktionsblockschaltbild
  • Taktfrequenz: 5 MHz (andere Versionen mit 3 MHz oder 6 MHz)
  • Anzahl Transistoren: 6500 bei 3 µmStrukturgröße
  • Datenbus: 8 Bit
  • Adressbus: 16 Bit
  • in der AH Version 20 % weniger Stromverbrauch gegenüber dem normalen 8085
  • Direkt adressierbarer Speicher von 64 KB
  • 1,33 µs Befehlszyklus (0,80 µs beim 8085AH-2 / 0,67 µs beim 8085AH-1)
  • 4 vektorisierte Interrupt-Inputs (einer davon ist nicht maskierbar und ein anderer ist ein 8080A-kompatibler Interrupt)
  • binäre 8-Bit- und 16-Bit-Addition, Unterstützung von 8-Bit-BCD-Addition und -Subtraktion (DAA-Befehl)
  • 40-Pin-DIL-Package

Neben dem Intel-Original wird der Prozessor auch von anderen Herstellern, teilweise mit verbesserten Eigenschaften, hergestellt. Der schnellste 8085-Prozessor stammt mit 8 MHz vom US-amerikanischen UnternehmenTundra Semiconductor.

Aufbau

[Bearbeiten |Quelltext bearbeiten]

Anschlussbelegung und Funktion

[Bearbeiten |Quelltext bearbeiten]
  • Anschlussbelegung
    Anschlussbelegung
Bezeichnung
(Symbol)
Pin(E)ing.
(A)usg.
Funktion
A8...A15 (AH)21...28AAdressbus höherwertige 8 Bit der Speicher- oder Portadresse
AD0...AD7
(AL oder D0...D7)
12...19E / AGemultiplexter Adress- und Datenbus (Zeitmultiplexer)
1. Taktperiode eines Zyklus → Low-Byte einer Adresse
2. und 3. Taktperiode → Datenbus
ALE30AAdress Latch Enable, Adressenspeicher Freigabe
Signal 1: AD0–AD7 führen Adresse, ist aktiv beim ersten Taktzyklus während des ersten Maschinenzyklus. Dadurch wird der Adresszwischenspeicher freigegeben.
S0, S129, 33AMaschinenstatussignale, Anzeigen des Betriebszustandes der CPU
S1S0Betriebszustand
00Warten durch HOLD
01Operand schreiben
10Operand lesen
11Befehlscode holen

definiert so zusammen mit IO/M den laufenden Maschinenzyklus

IO/M34AInput-Output/Memory, I/O-Port-Zugriff/Speicher-Zugriff
Unterscheidet zwischen Speicher- und I/O-Port-Zugriff
0 → Speicher-Zugriff
1 → I/O-Port-Zugriff
RD32ARead, Lesen (Low-aktiv)
0 → CPU hat den Datenbus freigegeben und erwartet Daten vom Speicher oder Eingabeport
0 ↑ 1 (steigende Flanke) → CPU übernimmt die Daten vom Datenbus
WR31AWrite, Schreiben (Low-aktiv)
0 → CPU zeigt an, dass gültige Daten auf dem Datenbus liegen
READY35EReady, Bereitschaft
1 → Speicher- oder Portbausteine sind bereit zum Datentransfer
0 → CPU wartet mit Schreib- oder Lesezyklus
HOLD39EHold, Anhalten
1 → eine andere Einheit fordert die Busse an, CPU gibt den Bus frei, sobald die laufende Busoperation beendet ist.
HLDA38AHold Acknowledge, Bestätigung des HOLD-Zustandes
HLDA ← 0 wenn HOLD-Aufforderung == 0
Eine halbe Taktperiode später übernimmt die CPU den Bus wieder.
INTR10EInterrupt Request, Unterbrechungsanforderung
allgemeiner Interrupt-Eingang zum Auslösen von Programmunterbrechungen von externen Signalen, wird per Software gesperrt oder freigegeben
INTA11AInterrupt Acknowledge, Unterbrechungsannahme
wird nach Annahme eines INTR anstelle von RD verwendet → Aktivierung eines Interruptbausteines
RST5.5
RST6.5
RST7.5
9
8
7
ERestart-Interrupts, Neustartunterbrechungen
die durch die Befehle SIM und DI maskierbar sind. Alarmmeldung bei 0-1-Übergang. Hier wird nach 3Ch verzweigt. RST7.5 höchste Priorität der RSTs, RST5.5 die niedrigste.
TRAP6ENicht maskierbarer Restart-Interrupt-Eingang
RESIN36EReset Input, Rücksetz-Eingang
Durch einen Reset wird der Programmzähler auf Null gesetzt. Außerdem werden die HLDA und HOLD Flip-Flops zurückgesetzt. Während des Resets sind Daten-, Adress- und Meldeleitungen hochohmig geschaltet. Da es sich hierbei um eine asynchrone Leitung handelt, können die internen Register in einen undefinierten Zustand gelangen.
RESOUT3AReset Output, System-Rücksetz-Signal
Kann als Systemreset benutzt werden. Dieses Signal ist mit dem Prozessortakt synchronisiert.
X1, X21, 2ETakteingang
CLK37AClock, Taktausgang zur Verwendung als Systemtakt. Dieser ist halb so hoch als der an X1, X2 eingestellte
SID5ESerial Input Data, Eingang für serielle Datenübertragung
durch Ausführung des RIM-Befehls wird der Wert in den Akkumulator übernommen.
SOD4ASerial Output Data, Ausgang für serielle Daten-Übertragung
serieller Datenausgang, wird gesetzt oder zurückgesetzt durch einen SIM Befehl.
VCC +5 V40Versorgungsspannung (+5 V)
VSS GND20Masse (0 V)

Register

[Bearbeiten |Quelltext bearbeiten]

Die 8-Bit-Register können für 16-Bit-Befehle zu Registerpaaren zusammengenommen werden, dies sindA/FLAG,B/C,D/E undH/L. Die Bildung der Registerpaare ist bei den StackbefehlenPUSH undPOP und bei Adressierungs- und Adressrechnungsbefehlen bedeutsam.

Register
RegFunktion / Bedeutung
A Akkumulator (8 Bit)
B allg. Register (8 Bit)
C allg. Register (8 Bit)
D allg. Register (8 Bit)
E allg. Register (8 Bit)
H allg. Register (8 Bit)
L allg. Register (8 Bit)
FLAG Zustandsregister (8 Bit)
INT Interruptregister (8 Bit)
IC Befehlszähler (16 Bit)
SP Stackpointer (16 Bit)

Die allgemeinen RegisterB,C,D undE dienen im Wesentlichen den logischen und arithmetischen 8-Bit-Operationen, die auch mit den RegisternH undL möglich sind, aber vermieden werden sollten. Die letztgenannten Register spielen bei den 16-Bit-Operationen eine gewisse Sonderrolle. Die Ergebnisse der meisten Operationen stehen im AkkumulatorA.

Registerpaare

[Bearbeiten |Quelltext bearbeiten]

Den Registerpaaren kommen dabei besondere Aufgaben zu, je nach der Art der Adressierung. So können die RegisterpaareBC,DE und 'HL' benutzt werden, um inindizierter Adressierung Daten vom Arbeitsspeicher in den Akkumulator A zu lesen oder dorthin zu schreiben. Das PaarHL erlaubt neben dem Akkumulator den Einsatz aller 8 bit-Register A, B, C, D, H oder L als Quelle oder Ziel. Weitere Befehle erlauben den direkten Austausch der Inhalte der RegisterpaareDE undHL, den Austausch des Inhalts der aktuellen Stapelspitze(SP+1)(SP) mitHL, den Inhalt vonHL in den Stackpointer und auch den Inhalt vonHL in den Befehlszähler zu kopieren. Die Registerpaare könneninkrementiert,dekrementiert und zum RegisterpaarHL addiert werden.

Die Technik mit den Registerpaaren wurde im Nachfolgemodell8086 wesentlich erweitert.

Zustandsregister

[Bearbeiten |Quelltext bearbeiten]

Im Zustandsregister sind fünf der acht Bits belegt. Diese haben bei bedingten Sprüngen und Aufrufen die Aufgabe, zu entscheiden, ob eine Sprung- oder Aufrufbedingung erfüllt ist. Dies sind im EinzelnenN (negativ) bzw.S (sign),Z (zero – Null),H (half carry – Halbübertrag) bzw.AC (Auxiliary Carry – Hilfsübertrag),P (parity – Parität) undC (Carry – Übertrag).

Zustandsregister
76543210
N/SZH/ACPC

Gesetzt werden die Bits bei allen logischen und arithmetischen 8-Bit-Operationen, nicht jedoch bei Kopier- und Austauschbefehlen. Von den 16-Bit-Befehlen setzt nur die Addition eines Registerpaares zum PaarH/L das Carry-Bit. Wichtig bei Increment- und Decrement-Befehlen ist das Fehlen des C-Bits (Carry), bei 8-Bit-Operationen kann ein Überlauf nur mit dem Z-Bit (Zero) überprüft werden, bei 16-Bit-Operationen nur durch nachgeschaltete OR-Befehle.

Interruptregister

[Bearbeiten |Quelltext bearbeiten]
Interruptregister (Schreiben und Lesen)
76543210
0R7.5MSEM7.5M6.5M5.5
I7.5I6.5I5.5INTEM7.5M6.5M5.5

Die Belegung des Interruptregisters ist abhängig von Schreib- oder Lesezugriff und Betriebsart unterschiedlich. Das Register dient im Wesentlichen zur Abfrage und Überprüfung von Interruptzuständen und derMaskierung (Sperrung) einzelner Interrupts. Beim Schreiben (SIM-Befehl) in das Register muss Bit 6 immer0 sein, um das Register zu verändern, darüber hinaus muss Bit 3 (MSE) auf1 gesetzt sein, um die Interruptmaskierung in den Bits 0 bis 2 zu übernehmen.

Interrupts und Reset

[Bearbeiten |Quelltext bearbeiten]
Hardwareinterrupts
Int.Funktion / Bedeutung
TRAP (Pin 6) – positiv flankengetriggert
RST 5.5 (Pin 9) – positiv pegelgetriggert
RST 6.5 (Pin 8) – positiv pegelgetriggert
RST 7.5 (Pin 7) – positiv flankengetriggert
/RESIN (Pin 36) – negativ pegelgetriggert
Interruptvektoren
AdresseAuslösung
0000h RESIN / RST 0
0008h RST 1
0010h RST 2
0018h RST 3
0020h RST 4
0024h TRAP
0028h RST 5
002Ch RST 5.5
0030h RST 6
0034h RST 6.5
0038h RST 7
003Ch RST 7.5
kursiv = Softwareinterrupt

Gegenüber dem Vorgänger 8080 wurde die Interruptsteuerung deutlich erweitert. Neben dem ursprünglichen Interrupt (durch Interrupt-Controller gesteuert) verfügt der 8085 über vier weitere Interrupteingänge. Die vektorisierten Interrupts und der Reset steuern im 8085 feste Adressen an, ein Konzept, das bei den Nachfolgertypen aufgegeben wurde. Ab dem8086 werden die Interruptadressen in einer Tabelle in den ersten 1024 Bytes gespeichert.

Adressierung

[Bearbeiten |Quelltext bearbeiten]

Der 8085 verfügt über einen Adressraum von 64 KBytes für Speicherzugriffe und 256 Adressen für Portzugriffe. Die Unterscheidung zwischen Speicher- und Portzugriff wird durch einen AusgangIO/M geregelt, bei Portzugriffen liegt hier einH an, bei Speicherzugriffen einL. Als Besonderheit gilt, dass bei Portzugriffen die Portadresse sowohl anAD0 bisAD7 als auch anA8 bisA15 anliegen. Die niederwertigen 8 Bits der Adresse sind gemeinsam mit den Datenbus gemultiplext, das bedeutet, sie teilen sich die gleichen AnschlüsseAD0 bisAD7. Die höherwertigen 8 Bits haben eigene AnschlüsseA8 bisA15. Um anzuzeigen, dass eine gültige Adresse am Bus anliegt, gibt der Prozessor am AusgangALE (AddressLatchEnable) einH aus. Die Adresse kann dann in einem externen Speicher zwischengespeichert werden, dabei übernimmt einnegativ flankengetriggerter oderpositiv pulsgetriggerter externer Speicherbaustein (meist ein D-Flipflop) den Inhalt vonAD0 bisAD7 und gibt dies an die niederwertigen acht Bits des reinen Adressbusses aus. In manchen Schaltungen wird zur Verbesserung des Zeitverhaltens auch das höherwertige AdressbyteA8 bisA15 ebenfalls zwischengespeichert, auch wenn dies für den 8085 eigentlich nicht zwingend erforderlich ist.

Über die AusgängeS0 undS1 wird darüber hinaus der Status des laufenden Maschinenzyklus ausgegeben (siehe Tabelle oben). Durch externe Bausteine kann hiermit eine Adresserweiterung aufgebaut werden, die aber nicht an dieSegmentsteuerung der Nachfolgemodelle heranreicht.

Maschinenbefehle

[Bearbeiten |Quelltext bearbeiten]
Schematischer Aufbau eines Maschinenbefehls

Befehlsaufbau

[Bearbeiten |Quelltext bearbeiten]

EinAssembler-Programm besteht aus einer Folge von 8-Bit-Befehlen, in Ausnahmefällen auch Befehlen, die aus 2 aufeinanderfolgenden Bytes bestehen. Die Abarbeitung erfolgt stets sequentiell. Bei einer Wortbreite von 8 Bit sind maximal 256 verschiedene Befehle möglich, von denen beim 8085 aber nur 246 implementiert sind. Bei jedem Befehl enthält das erste Byte den Operationscode (Op-Code), ist also der Operator. Oft ist der Operand, also z. B. der Akkumulator, schon implizit enthalten, dann ist der ganze Befehl nur ein Byte lang. Der Befehl insgesamt kann aber auch 2 oder 3 Byte lang sein:

  • 1-Byte-Befehl: Nur Operationscode
  • 2-Byte-Befehl: Operationscode + Operand (8-Bit-Konstante oder 8-Bit-Portadresse)
  • 3-Byte-Befehl: Operationscode + Operand (16-Bit-Konstante oder 16-Bit-Adresse).

Der Befehlsablauf im Mikroprozessor entspricht dem Von-Neumann-Schema. Zunächst wird der Befehl, auf den der Inhalt des Befehlszählregisters (Program Counter, PC, IC) zeigt, geholt und in den Befehlsdekoder gespeichert. Dort wird er dann dekodiert.

Abarbeitungsschritte eines Maschinenbefehls des 8085

Ein Befehl benötigt 1 bis 5 Maschinenzyklen (Maschine Cycle, Operationszyklen) M1 – M5Ein Maschinenzyklus besteht aus 3 bis 6 Taktzyklen (States, Operationschritte) T1 – T6.

Je nach Befehl wird eine unterschiedliche Anzahl von Maschinenzyklen abgearbeitet. Dies wird im ersten Maschinenzyklus (Befehlsaufruf, FETCH-Zyklus) erkannt.

Befehlszyklen, Maschinenzyklen, Taktzyklen

[Bearbeiten |Quelltext bearbeiten]

Die Zeitspanne für einen Maschinenzyklus beträgt etwa 3–6 Takte bei „alten“ Mikroprozessoren. Typische Maschinenzyklen, die innerhalb eines Befehlszyklus auftreten können, sind:

  1. Befehlsaufruf (OPCODE-Fetch)
  2. Speicher lesen (Memory Read)
  3. Speicher schreiben (Memory Write)
  4. Stapelspeicher lesen (Stack pop)= zweimal Speicher lesen
  5. Stapelspeicher einschreiben (Stack push) = zweimal Speicher schreiben
  6. Eingabe (Input)
  7. Ausgabe (Output)

Befehlssatz

[Bearbeiten |Quelltext bearbeiten]
MnemonicBytesTakteFunktion des Befehls
Transferbefehle
Register nach Register
MOV r1,r2104r1,r2 = A,B,C,D,E,H,L:Lade Register r1 mit dem Inhalt von Register r2.
XCHG104Vertausche Inhalt der Registerpaare (D,E) und (H,L)
XTHL116Vertausche den Inhalt des Registerpaares (H,L) und den Inhalt des Wortes, das durch den Stackpointer adressiert ist.
SPHL106Lade Stackpointer mit dem Inhalt des Registerpaares (H,L).
Speicher, Peripherie nach Register
MOV r1,M107Lade Register r1 mit dem Inhalt des Speicherbytes das durch den Inhalt des Registerpaares (H,L) adressiert ist.
LDA adr313Akkumulator laden mit dem Inhalt der Adresse adr.
LDAX rp107rp= B,D Akkumulator laden mit dem Inhalt der Speicherzelle die durch den Inhalt des Registerpaares rp adressiert ist.
LHLD adr316Lade Registerpaar (H,L) mit dem Inhalt der Adresse adr und (adr+1)
POP rp110rp= B,D,H,PSW: Registerpaar rp wird mit dem Wort geladen, das durch den Stackpointer adressiert ist
IN nr210Akkumulator wird mit dem Inhalt des Eingabekanal (Nummer nr < 256) geladen
Konstante nach Registerpaar
LXI rp, adr310rp=B,D,H,SPLade Registerpaar rp mit Wert adr.
Register nach Speicher, Peripherie
MOV M,r1107r1 =A;B;C;D;E;H oder L:Inhalt von Register r1 auf den Speicherplatz abspeichern, der durch den Inhalt des Registerpaares (H,L) adressiert ist.
STA adr313Akkumulator-Inhalt unter Adresse adr abspeichern
STAX rp107rp=B,D: Akkumulator in dem Byte abspeichern, das durch den Inhalt des Registerpaares rp adressiert ist.
SHLD adr316Registerpaar(H,L) unter Adresse adr und (adr +1) speichern.
PUSH rp112rp=B,D,H,PSWInhalt des Registerpaares rp wird in das Wort übertragen, das durch den Stackpointer adressiert ist.
OUT nr210Akkumulator wird auf Ausgabekanal (Nummer nr < 256) ausgegeben.
Konstante nach Register, Speicher
MVI M,konst210Lade den Speicherplatz, der durch den Inhalt des Registerpaares (H,L) adressiert ist, mit der Konstanten (konst= Konstante < 256)
MVI r1,konst207r1=A,B,C,D,E,G,H oder L: Lade Register r1 mit der Konstanten (konst < 256)
Arithmetische Befehle
INR r1104r1=A,B,C,D,E,F,H oder L: Zum Inhalt der Registers r1 wird 1 addiert.
INR M110Zum Inhalt des durch Registerpaar (H,L) adressierten Bytes wird 1 addiert.
DCR r1104r1=A,B,C,D,E,F,H oder L: Vom Inhalt des Registers r1 wird 1 subtrahiert.
DCR M110Vom Inhalt des durch Registerpaar (H,L) adressierten Bytes wird 1 subtrahiert.
INX rp106rp=B,D,H,SP: Der Inhalt des Registerpaares wird um 1 erhöht.
DCX rp106rp=B,D,H,SP: Der Inhalt des Registerpaares rp wird um 1 erniedrigt.
ADD r1104r1=A,B,C,D,E,F,H oder L: Inhalt von r1 wird zum Inhalt des Akkumulators addiert.
ADD M107Inhalt des Speicherbytes, das durch den Inhalt des Registerpaares (H,L) adressiert ist, wird zum Akkumulator addiert.
ADC r1104r1=A,B,C,D,E,F,H oder L: Inhalt von Register r1 und Inhalt des Carry-Bits werden zum Akkumulator addiert
ADC M107Inhalt des Speicherbytes, das durch den Inhalt des Registerpaares (H,L) adressiert ist und der Inhalt des Carry-Bits werden zum Inhalt des Akkumulators addiert.
DAD rp110rp=B,D,H,SP: Inhalt des Registerpaares rp und der Inhalt des Registerpaares (H,L) werden addiert. Das Ergebnis steht in (H,L).
SUB r1104r1=A,B,C,D,E,H oder L: Inhalt des Registerpaares wird vom Akkumulator subtrahiert.
SUB M107Inhalt des Speicherbytes, das durch den Inhalt des Registerpaares (H,L) adressiert ist, wird vom Akkumulator subtrahiert.
SBB r1104r1=A,B,C,D,E,H oder L: Inhalt von Register r1 und Inhalt des Carry -Bits werden vom Akkumulator-Inhalt subtrahiert.
SBB M107Inhalt des Speicherbytes, das durch das Registerpaar (H,L) adressiert ist und Inhalt des Carry-Bits werden vom Akkumulator subtrahiert
ADI konst207Konstante (konst < 256) wird zum Inhalt des Akkumulators addiert.
ACI konst207Zum Akkumulator-Inhalt werden die Konstante (konst < 256) und das Carry-Bit addiert.
SUI konst207Konstante (konst < 256) wird vom Inhalt des Akkumulators subtrahiert.
SBI konst207Vom Akkumulator-Inhalt werden die Konstante (konst < 256) und das Carry-Bit subtrahiert.
DAA107Akkumulatorinhalt wird in eine zweistellige Zahl umgewandelt.
Logische Operationen
CMA104Akkumulatorinhalt wird negiert.
ANA r1104r1=A,B,C,D,E,H oder L: Akkumulator und der Inhalt des Registers r1 werden UND verknüpft.
ANA M107Der Inhalt des durch Registerpaar (H,L) adressierten Bytes werden mit dem Akkumulator UND verknüpft.
ANI konst207Der Akkumulator wird mit der konstanten (konst < 256) UND verknüpft.
ORA r1104r1=A,B,C,D,E,H oder L:Akkumulatorinhalt wird mit dem Inhalt des Registers r1 ODER verknüpft.
ORA M107Inhalt des über Registerpaar (H,L) adressierten Bytes wird mit dem Inhalt des Akkumulators ODER verknüpft.
ORI konst207Akkumulator-Inhalt wird mit der Konstanten (konst < 256) ODER verknüpft.
XRA r1104Akkumulator wird mit dem Inhalt des Registers r1 EXCLUSIV-ODER verknüpft.
XRA M107Das über Register (H,L) adressierte Byte wird mit dem Akkumulator-Inhalt EXCLUSIV-ODER verknüpft.
XRI konst207Der Akkumulator wird mit der Konstanten (konst < 256) EXCLUSIV-ODER verknüpft.
CMP r1104Akkumulator wird mit dem Inhalt des Registers verglichen. Sind die Werte gleich wird das Zeroflag gesetzt.
CMP M107Akkumulator wird mit dem Inhalt des durch Registerpaar (H,L) adressierten Bytes verglichen.
CPI konst207Akkumulator wird mit der Konstanten (konst < 256) verglichen.
Registeranweisungen
Akkumulator rotieren
RLC104Akkumulatorinhalt wird zyklisch um 1 Bit nach links verschoben. Bit 2^7 wird in das Carry-Bit geschrieben. Bit 2^0 = Bit 2^7
RRC104Akkumulatorinhalt wird zyklisch um 1 Bit nach rechts verschoben. Bit 2^0 wird in das Carry-Bit geschrieben. Bit 2^7 = Bit 2^0
RAL104Akkumulatorinhalt wird zyklisch um 1 Bit nach links verschoben. Bit 2^7 wird in das Carry-Bit und das Carry-Bit in das Bit 2^0 geschrieben.
RAR104Akkumulatorinhalt wird zyklisch um 1 Bit nach rechts verschoben. Bit 2^0 wird in das Carry-Bit und das Carry-Bit in das Bit 2^7 geschrieben.
Übertragsbit-Anweisungen
CMC104Carry-Bit wird negiert.
STC104Carry-Bit wird gesetzt.
Sprungbefehle
Unbedingte Sprünge
PCHL106Programm wird an der Adresse fortgesetzt die im Registerpaar (H,L) steht.
JMP adr310Programm wird an der Adresse adr fortgesetzt
Bedingte Sprünge
JC adr307 / 10Bei Carry-Bit = 1 wird das Programm bei der Adresse adr fortgesetzt.
JNC adr307 / 10Bei Carry-Bit = 0 wird das Programm bei der Adresse adr fortgesetzt
JZ adr307 / 10Bei Zero-Bit = 1 wird das Programm bei der Adresse adr fortgesetzt
JNZ adr307 / 10Bei Zero-Bit = 0 wird das Programm bei der Adresse adr fortgesetzt
JM adr307 / 10Bei Sign-Bit = 1 wird das Programm bei der Adresse adr fortgesetzt
JP adr307 / 10Bei Sign-Bit = 0 wird das Programm bei der Adresse adr fortgesetzt
JPE adr307 / 10Bei Parity-Bit = 1 wird das Programm bei der Adresse adr fortgesetzt
JPO adr307 / 10Bei Parity-Bit = 0 wird das Programm bei der Adresse adr fortgesetzt
Unterprogrammbehandlung
Unterprogrammaufrufe
CALL adr318Programm wird bei der Adresse adr fortgesetzt
CC adr309 / 18Bei Carry-Bit = 1 wird das Programm bei der Adresse adr fortgesetzt
CNC adr309 / 18Bei Carry-Bit = 0 wird das Programm bei der Adresse adr fortgesetzt
CZ adr309 / 18Bei Zero -Bit = 1 wird das Programm bei der Adresse adr fortgesetzt
CNZ adr309 / 18Bei Zero -Bit = 0 wird das Programm bei der Adresse adr fortgesetzt
CM adr309 / 18Bei Sign -Bit = 1 wird das Programm bei der Adresse adr fortgesetzt
CP adr309 / 18Bei Sign -Bit = 0 wird das Programm bei der Adresse adr fortgesetzt
CPE adr309 / 18Bei Parity-Bit = 1 wird das Programm bei der Adresse adr fortgesetzt
CPO adr309 / 18Bei Parity-Bit = 0 wird das Programm bei der Adresse adr fortgesetzt
RST konst112Programm wird auf der Adresse 8x konst fortgesetzt (konst = 0–7)
Rücksprungbefehle
RET110Programm wird an der Adresse fortgesetzt, die in dem Wort steht, das über den Stackpointer adressiert ist.
RC106 / 12Carry-Bit = 1 wird das Programm an der Adresse fortgesetzt, die in dem über den Stackpointer adressierten Wort steht.
RNC106 / 12Carry-Bit = 0 wird das Programm an der Adresse fortgesetzt, die in dem über den Stackpointer adressierten Wort steht.
RZ106 / 12Zero -Bit = 1 wird das Programm an der Adresse fortgesetzt, die in dem über den Stackpointer adressierten Wort steht.
RNZ106 / 12Zero -Bit = 0 wird das Programm an der Adresse fortgesetzt, die in dem über den Stackpointer adressierten Wort steht.
RM106 / 12Sign -Bit = 1 wird das Programm an der Adresse fortgesetzt, die in dem über den Stackpointer adressierten Wort steht.
RP106 / 12Sign -Bit = 0 wird das Programm an der Adresse fortgesetzt, die in dem über den Stackpointer adressierten Wort steht.
RPE106 / 12Parity-Bit = 1 wird das Programm an der Adresse fortgesetzt, die in dem über den Stackpointer adressierten Wort steht.
RPO106 / 12Parity-Bit = 0 wird das Programm an der Adresse fortgesetzt, die in dem über den Stackpointer adressierten Wort steht.
Programmunterbrechung
EI104Interrupt-Flipflop wird gesetzt; Der Mikroprozessor kann eine Unterbrechungsanforderung annehmen
DI104Interrupt-Flipflop wird rückgesetzt. Der Mikroprozessor ignoriert Unterbrechungsanforderungen.
Maskenbit-Befehle
RIM104Lies Unterbrechungsmaske und seriellen Eingang in Akkumulator ein.
SIM104Setze Unterbrechungsmaske und seriellen Ausgang.
Sonstiger Befehl
HLT105Programm hält an bis eine Unterbrechungsanforderung eintritt.
NOP104Leerbefehl (No operation)
MnemonicBytesTakteFunktion des Befehls

Beispielprogramm

[Bearbeiten |Quelltext bearbeiten]

Einfaches Programm mit Ein- und Ausgabe

; Ein Kommentar wird mit einem Semikolon bzw. Strichpunkt eingeleitet, der Text dahinter wird vom Assembler ignoriertmark:; eine Marke wird mit einem Doppelpunkt gekennzeichnetstar:IN01;Einlesen des Ports 01OUT02;Ausgabe am Port 02JMPstar;Ruecksprung zum Programmanfang

Komplexeres Programm

Dieses Programm stellt ein kleines Lauflicht dar. Es lässt sich mit Bit D7 an der Eingabebaugruppe AN und AUS schalten. Mit Bit D6 wird die Rotationsrichtung festgelegt (rechts oder links) und mit Bit D0 kann man zwischen 2 Laufgeschwindigkeiten wählen. Pause sollte auf 0 und Bit D7 auf 1 gesetzt werden.

;HauptprogrammMVIB,01;Anfangswert für Rotationmei:IN01;Ein? (Bit D7=1?)ANI80;Bitmaske für D7JZmei;-->MEI, wenn nicht "EIN"MOVA,B;Lauflicht ansteuernOUT02IN01;Linksrotation? (Bit D6=1?)ANI40;Bitmaske für D6JZrr;-->RR, wenn keine LinksrotationMOVA,BRLC;nächste LinksrotationMOVB,Amv:IN01;schnelle Rotation? (Bit D0=1?)ANI01;Bitmaske für Bit D0JZze2;-->ZE2, wenn langsamCALLze1;sonst Unterprogramm ZE1 aufrufenJMPmei;Rechtsrotationrr:MOVA,BRRC;nächste RechtsrotationMOVB,AJMPmv;Zeitschleife 1ze1:LXID,0001;Z ladenmz1:DCXD;Z:=Z-1MOVA,D;Z=0?ORAEJNZmz1;-->MZ1, wenn nicht 0RET;Rücksprung…;Zeitschleife 2ze2:LXID,0006;Z ladenmz2:DCRD;Z:=Z-1MOVA,D;Z=0?ORAEJNZmz2;-->MZ2, wenn nicht 0JMPmei

Programm zum Speicher ausgeben

;Tabellen:;tab1ORA0e100;TabellenadresseDB01,02,04,08,10,20,40,80,00;tab2:ORG0e200;TabellenadresseDB01,03,07,0F,1F,3F,7F,0FF,00;HauptprogrammORA0e000;StartadresseLXISP,0fc32;Stackpointer mit der Adresse fc32 laden;eine Null muss bei Hex-Buchstaben vorangestellt werdenLC;Labeltabelle löschen;Programmfunktion:;Marken bzw. Labels werden mit einem Doppelpunkt initialisiertstar:IN01;Der Hex-Wert vom Eingabe Port mit der;Adresse 01 wird in den Akkumulator geladenANI01;UND-Verknüpfung des Hex-Wertes 01 mit dem AkkuJZsch1;Wenn das Zero-Flag gesetzt ist, springe zur Marke "sch1"JNZsch2;Wenn das Zero-Flag nicht gesetzt ist, springe zur Marke "sch2";1. Unterprogrammsch1:LXIH,0e100;Lädt das Registerpaar HL mit der Adresse e100loo1:MOVA,M;Der Wert der in der Speicherzelle steht, welche durch das Registerpaar;HL adressiert ist in den AkkuORAA;ODER-Verknüpfung des Akkus mit sich selbstJZstar;Wenn das Zero-Flag gesetzt ist, springe zur Marke "star"OUT02;Der Inhalt des Akkus wird an den Ausgabeport übergebenINXH;Die Tabellenadresse in HL wird um den Wert 1 erhöhtCALL0895;UP-Aufruf;UP für eine Zeitschleife von 0,2 SekundenJMPloo1;Programmbereich wiederholen, springe nach "loo1";2. Unterprogrammsch2:LXIH,0e200;Lädt das Registerpaar HL mit der Adresse E200loo2:MOVA,M;Der Wert der in der Speicherzelle steht, welche durch das Registerpaar;HL adressiert ist in den AkkuORAA;ODER-Verknüpfung des Akkus mit sich selbstJZstar;Wenn das Zero-Flag gesetzt ist, springe zur Marke "star"OUT02;Der Inhalt des Akkus wird an den Ausgabeport übergebenINXH;Die Tabellenadresse in HL wird um den Wert 1 erhöhtCALL0895;UP-Aufruf;UP für eine Zeitschleife von 0,2 SekundenJMPloo2;Programmbereich wiederholen, springe nach "loo2"stop:JMPstop;Endlosschleife, um bei einem Fehler das weiterlaufen des;Programmes zu verhindern.

Simulation

[Bearbeiten |Quelltext bearbeiten]

Für die BetriebssystemeWindows undLinux gibt es unter anderem den kostenlosen und quelloffenen SimulatorGNUSim8085, der unter derGNU General Public License steht.

Peripheriebausteine (Auswahl)

[Bearbeiten |Quelltext bearbeiten]

Weblinks

[Bearbeiten |Quelltext bearbeiten]
Commons: Intel 8085 – Sammlung von Bildern, Videos und Audiodateien

Einzelnachweise

[Bearbeiten |Quelltext bearbeiten]
  1. JPL Robotics: Project: Pathfinder. In: www-robotics.jpl.nasa.gov. Archiviert vom Original (nicht mehr online verfügbar) am 11. Juli 2016; abgerufen am 11. Juli 2016.  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäßAnleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/www-robotics.jpl.nasa.gov 
Intel-Prozessoren
Vor-x86-Prozessoren
Desktop

4004 •4040 •8008 •8080 •8085

iAPX-86 bis zur 4. Generation
Pentium-Serie
Celeron-Serie
Core-Serie
Xeon-Serie
Atom-Serie
Desktop

Atom

x86-kompatibleSoCs
Desktop

Quark •Edison

Nicht-x86-Prozessoren
Desktop

iAPX 432 •i860 •i960 •Itanium •Itanium 2 •XScale

Weitere Listen: Celeron • Pentium • Core 2 • Core i
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Intel_8085&oldid=261599166
Kategorie:
Versteckte Kategorie:

[8]ページ先頭

©2009-2026 Movatter.jp