Einführung Datenverarbeitungssysteme


von Prof. Jürgen Plate

5. Befehle (Maschinensprache)

5.1. Befehlsaufbau und Befehlsformate

Die Befehle, die der Computer versteht und ausführen kann sind Bitfolgen Maschinensprache, für jede CPU unterschiedlich. Der Befehl muss zwei Angaben enthalten (v. Neumann-Rechner):

Manchmal enthält der OP-Teil noch ein Indikator-Feld für spezielle Angaben (z.B. Adressierungsmode); häufig gehen diese Angaben auch direkt in den Op-Code ein. Nach der Anzahl der Operanden im Adressteil unterscheidet man:

Die Einadress-CPU hat ein spezielles Register, in dem die Datenmanipulations-Operationen durchgeführt werden, den Akkumulator (Akku, Accu). Der erste Operand muss immer bereits im Akku stehen ( "Lade"-Befehl) und nach der Operation befindet sich das Ergebnis wieder im Akku. Das Maschinenprogramm eines Rechners läuft in der Regel nicht auf einem Rechner mit anderer CPU. Ausnahme: (aufwärts-)kompatible Rechnerfamilien.

Vereinfachung der binären Darstellung

Die binäre Darstellung ist (für Menschen) unübersichtlich. Für die Darstellung der Maschinenbefehle haben sich daher Vereinfachungen entwickelt: Es existiert ein Dienstprogramm, das den Quelltext in Assemblersprache in die maschineninterne Darstellung übersetzt (der "Assembler"). Eine Zeile im (Assembler-) Quellprogramm wird in einen Maschinenbefehl übersetzt.

5.2 Befehlsklassen, Befehlslisten

Der Aufbau der Befehle sowie Art und Umfang des Befehlsvorrates sind (neben technologischen Unterschieden) die wichtigsten Kennzeichen eines Prozessors. Die Befehlsliste legt die Menge der ausführbaren Operationen fest und bestimmt damit die Leistungsfähigkeit der CPU. Der Befehlsvorrat typischer Universalrechner umfasst zwischen 50 und 500 Befehlen. Hierzu kommen noch Modifikationen infolge unterschiedlicher Adressierungsarten.

Typische Befehlsklassen

Folgende Befehlsklassen sind repräsentativ f&uumL;r viele CPUs:

  1. Transportbefehle
      Lade Register A aus m            Load           LDA m 
      Speichere Register A in m        Store          STA m 
      Transportiere von m2 nach m1     Move           MOV m1,m2 
      Lade 0 in Register A             Clear          CLRA 
    
  2. Ein-/Ausgabebefehle
      Lade A vom Kanal (Port) n        Input          IN A,n 
      Gib A aus auf Kanal (Port) n     Output         OUT A,n 
    
  3. Arithmetische Befehle
      Addiere Speicherinhalt zu A      Add            ADDA m 
      Subtrahiere Speicherinhalt von A Subtract       SUBA m 
      Multipliziere A mit m            Multiply       MULA m 
      Erhöhe A um 1                    Increment      INCA 
      Vermindere A um 1                Decrement      DECA 
    
  4. Logische Befehle
      A UND Speicherinhalt             And            ANDA m 
      A ODER Speicherinhalt            Or             ORA m 
      Komplementierung von A           Complement     COMA 
    
  5. Verschiebe-Befehle
       
      Rechtsschieben, arithmetisch     A. shift right ASRA 
      Rechtsschieben, logisch          L. shift right LSRA 
      Linksrotieren                    Rotate left    ROLA 
    
  6. Bitmanipulationsbefehle
      Setze Bit Nr. n                  Bit set        BSET n,m 
      Teste Bit n auf 1                Bit test       BIT n,m 
    
  7. Vergleichsbefehle
      Vergleiche A mit m               Compare        CMPA m 
      Teste auf "0" oder "Minus"       Test           TST m 
    
  8. Sprungbefehle
      Unbedingter Sprung               Jump           JMP adr 
      Sprung bei Gleichheit            Jump if equal  JE adr 
      Sprung bei Ungleichheit          J. if not eq.  JNE adr 
      Sprung ins Unterprogramm         Jump to Subr.  JSR adr 
      Rückkehr vom Unterprogramm       Return from S. RET 
      Software-Interrupt               Software int.  SWI 
      Rückkehr vom Interrupt           Return from I. IRET 
    
  9. Befehle zur Beeinflussung des Systemzustandes
      Interrupts verbieten             Disable Int.   CLI 
      Interrupts zulassen              Enable Int.    STI 
      Keine Operation                  No Operation   NOP 
      Anhalten (und Warten auf Int.)   Halt           HLT 
    

    5.3 Adressierungsarten

    Der Befehl muss zwei Angaben enthalten (v. Neumann-Rechner):
    1. durchzuführende Operation (Was!) Operations-Code
    2. verwendeter Operand (Womit!) Adresse
    Bisher wurde davon ausgegangen, daß bei der Adressangabe eine bestimmte Speicheradresse angesprochen wird, in welcher der gewünschte Operand zu finden ist. Häufig enthält der Adressteil nur eine Teil-Information, mit deren Hilfe sich die tatsächliche, die effektive Adresse, ermitteln läßt Adressmodifikation.

    Die Adresse muss sich nicht unbedingt auf den Arbeitsspeicher beziehen, sie kann sich auch auf ein Register (Zwischenspeicher in der CPU) oder das E/A-Werk (Memory Mapped I/O) beziehen. Weiterhin ist eine verkürzte Adressangabe möglich kürzere Befehle. Die Adresse kann während des Programmablaufs in Abhängigkeit von gewissen Bedingungen verändert werden ( flexible und effektive Programmierung.

    Vor allem bei CPUs mit größeren Wortbreiten enthält der Befehl einen eigenen Modifikatorteil (dem Adressteil zugeordnet). Bei kleineren Rechnern mit Einadreß-Befehlen (z.B. 8-Bit-Mikrocomputern) wird dagegen häufig (nicht immer) kein Modifikatorteil verwendet, sondern die Adressmodifikation implizit durch den OP-Code gegeben OP-Code legt Operation und Adressierungsart fest.

    Im Folgenden werden die wesentlichen Adressierungsarten vorgestellt. Die Bezeichnung durch die einzelnen Hersteller ist nicht einheitlich. Auch nicht jede CPU besitzt alle Adressierungsarten und häufig sind nicht alle Adressierungsarten mit jedem Befehl oder jedem Register möglich.

    Programmiermodell

    Bedingt durch die komplexe Struktur der Hardware einer CPU betrachtet man bei der Programmierung nicht mehr den realen Aufbau aus Leitwerk, Rechenwerk, E/A-Werk und Speicher. Die CPU wird nur noch als Programmiermodell betrachtet, das aus den "von außen sichtbaren" Teilen von Leit- und Rechenwerk, der Registerstruktur und der Befehlsliste besteht. Speicher und E/A-Werk werden auf die gleiche Weise betrachtet (z.B. Programmiermodell für komplexe E/A-Bausteine).

    Absolute Adressierung

    Der Adressteil (AD) des Befehls stellt die effektive Adresse (EA) dar. Die EA enthält den Operanden des Befehls, sie kann Speicher- oder Registeradresse sein.

    Seitenbezogene Adressierung

    Der Speicher wird in einzelne Seiten (Pages) eingeteilt. Die EA setzt sich aus zwei Teilen zusammen: Durch den Adressteil des Befehls wird nur die Wortadresse festgelegt (AD kann daher kurz sein). Die Seitenadresse kann:

    Vorteil:
    Trotz verkürzter Adressangaben kann der gesamte Adressraum erreicht werden. Adressbestimmung schnell (ohne Addition), solange die aktuelle Seite nicht verlassen wird.

    Anwendungen:

    Indizierte Adressierung

    Die EA wird durch Addition einer Distanz D zum Inhalt eines Bezugsregisters (Adreßregister, Indexregister, etc.) ermittelt. Die Distanz (Offset, Displacement) kann sein:

    Die indizierte Adressierung wird nach verwendetem Bezugsregister und Ermittlung der Distanz unterschieden:

    Indirekte Adressierung

    Alle Adressierungsarten, bei denen die Adressierung über zwei oder mehr Referenzstufen erfolgt Zum Lesen/Schreiben des tatsächlichen Operanden sind zwei oder mehr Speicherzugriffe erforderlich. Im Befehl wird nicht der Operand direkt adressiert, sondern die Speicherzelle, in der sich die Adresse des Operanden befindet. In Mikrocomputer meist nur Adressierung über zwei Referenzstufen, bei Großrechnern oft mehr als zwei Stufen.

    Die indirekte Adressierung kann mit den o. g. Adressierungsarten kombiniert werden, sofern der Aufbau der CPU dies zulässt.

    Unmittelbare Adressierung (Immediate Addressing)

    Der Adressteil stellt unmittelbar den Operanden dar (der Operand folgt unmittelbar dem OP-Code). Der Wert des Operanden wird bereits zum Zeitpunkt der Programmierung festgelegt und kann zusammen mit dem Programm gespeichert werden.

    Implizite Adressierung (Inherent Addressing)

    Alle Adressangaben sind implizit im OP-Code enthalten (meist Register). Zusätzliche Adressangabe nicht erforderlich, z.B. "Setze Akkumulator auf Null".

    Zum vorhergehenden Abschnitt Zum Inhaltsverzeichnis Zum nächsten Abschnitt


    Die HTML-Fassung entstand unter Mitwirkung von Volker Arndt
    Copyright © FH München, FB 04, Prof. Jürgen Plate