Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Befehlssätze von 16-Bit-Mikroprozessoren umfassen 60 bis 120 Befehle, wobei Prozessoren mit kleinen Befehlssätzen überwiegen. Kleine Befehlssätze sind überschaubarer und erleichtern dadurch die Anwendung der einzelnen Befehle. Größere Befehlssätze dagegen unterstützen spezielle Anwendungen, was zu effizienteren Programmen führt.

Bezüglich der Befehlsanzahl sind 16-Bit-Mikroprozessoren mit 8-Bit-Mikroprozessoren vergleichbar, jedoch sind ihre Befehlssätze wesentlich wirkungsvoller. Die Operationen sind komplexer, zweistellige Operationen können mit einem Befehl ausgeführt werden, es gibt zahlreiche Befehle für Byte-, Wort- und Doppelwortverarbeitung und einen umfangreichen Satz von Adressierungsarten. Bei der Festlegung eines Befehlssatzes ist man bestrebt, solche Modifikationen möglichst für alle Befehle zuzulassen. Dies läßt sich jedoch nicht immer verwirklichen, da die Befehlswortlänge und die Anzahl der Wörter pro Befehl begrenzt sind. Insofern stellt ein Befehlssatz immer einen Komprorniß zwischen den Anforderungen der Anwendungen und den technischen Möglichkeiten dar. Befehlssätze werden zur besseren Übersicht in Gruppen unterteilt, in denen Befehle mit ähnlichen Funktionen zusammengefaßt sind. Typische Befehlsgruppen sind:

  • Datentransportbefehle,
  • arithmetische Befehle,
  • logische Befehle,
  • bitverarbeitende Befehle,
  • Schiebe- und Rotationsbefehle,
  • Sprungbefehle,
  • Stringbefehle,
  • Systembefehle.

Im folgenden beschreiben wir den Befehlssatz des in Abschnitt 2.1 eingeführten Mikroprozessors in dieser Gliederung. Jeder Befehl ist als Kurzbeschreibung in Tabellendarstellung angegeben; sie wird durch Erläuterungen und zum Teil durch Beispiele ergänzt. Bezüglich von Anwendungen, die sich aus dem Zusammenwirken mehrerer Befehle ergeben, sei auf die Programmbeispiele zu den Programmierungstechniken in Kapitel 3 verwiesen.

In der Tabellendarstellung werden Befehle für Byte- und Doppelwortoperationen im mnemonischen Operationscode durch die angehängten Buchstaben B bzw. D von den Standardbefehlen für Wortoperationen unterschieden. In Fällen, wo diese Unterscheidung aus dem Mnemon nicht hervorgeht, ist das Datenformat in der Spalte Operandenlänge (OL) mit B, W oder Dangegeben. Quell- und Zielangaben im Adreßteil bezeichnen wir allgemein mit s (source) und d (destination); wenn in der Spalte Kommentar nichts angegeben ist, können sie irgendeine der acht Adressierungsarten annehmen.

Zur Angabe der Adressierungsarten verwenden wir die Symbolik aus Abschnitt 2.1.4 (R register, DA direct, IM immediate, RI register indirect, IN autoincrement, DC autodecrement, X indexed, RA relative). Ist nur eine Adressierungsart, z.B. R, zugelassen, so wird diese anstelle von s oder d in der Tabelle direkt angegeben. In der formalen Beschreibung der Befehle verwenden wir die obigen Symbole, darüber hinaus den Zuweisungsoperator : =, die Operatorzeichen der vier Grundrechenarten +, -, . und / und die logischen Operatoren and, or, exor (exc1usive or) und not. Spitze Klammern bezeichnen bestimmte Bitpositionen eines Wortes, so bezeichnet z.B. SR(7-0) die acht niedrigerwertigen Bits des Statusregisters. Die Spalte CC-Bits gibt die Wirkung der Befehle auf die einzelnen Bedingungsbits an. Dabei bedeutet:

  • v das Bit wird verändert, d.h. es ist vom Resultat der Operation abhängig;
  • o das Bit wird auf Null gesetzt;
  • 1 das Bit wird auf Eins gesetzt;
  • – das Bit wird vom Resultat nicht beeinflußt;
  • u das Bit hat einen undefinierten Zustand.

Datentransportbefehle

MOVE (Tabelle 2.2) führt den allgemeinen Datentransport zwischen einer Quelle s und einem Ziel d durch, wobei die Quelle und das Ziel sowohl im Registerspeicher als auch im Arbeitsspeicher liegen können. Für sund d sind bis auf d = IM alle in Abschnitt 2.1.4 beschriebenen Adressierungsarten zugelassen. Der Datentransport ist mit Bytes, Wörtern und Doppelwörtern durchführbar. Dazu drei Beispiele, in denen LOC3 als ungerade und LOCl und LOC2 als gerade Byteadressen vorgegeben sind (s. auch Beispiel 2.1). MOVEM ermöglicht das Speichern bzw. Laden mehrerer Registerinhalte für n aufeinanderfolgende allgemeine Register, beginnend mit Register R. Die Basisadresse des betroffenen Speicherbereichs kann durch die Adressierungsarten DA, RI, X und RA vorgegeben werden. Sie wird mit jedem Datentransport vom Prozessor automatisch um Zwei erhöht. (Der Inhalt des bei der registerindirekten Adressierung bzw. des zur lndizierung benutzten Registers wird davon nicht beeinflußt.)

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Um den Datentransport auch mit Stack-Speicherbereichen zu ermöglichen, sind darüber hinaus die Adressierungsarten DC für die Zieladressierung und IN für die Quelladressierung zugelassen. MOVEM kann zum Retten und Wiederherstellen des Registerstatus bei Unterprogrammanschlüssen (s. Abschnitt 3.3.1) und bei Programmunterbrechungen benutzt werden. MOVEM ist nach jedem Transport eines Datenworts unterbrechbar, um eine schnelle Reaktion des Prozessors auf Unterbrechungsanforderungen zu gewährleisten. Das folgende Beispiel zeigt das Speichern der Registerinhalte R2, R3 und R4; LOC ist dabei eine gerade Byteadresse.

CLR, EXC und SW AP stellen Spezialfalle des Datentransports dar. CLR lädt ein Register oder eine Speicherzelle mit Null. EXC vertauscht zwei Operanden, wobei einer der Operanden im Registerspeicher stehen muß. SW AP vertauscht die bei den Bytes des adressierten Registers und ermöglicht damit bei Byteoperationen auch den Zugriff auf das höherwertige Registerbyte. Dazu drei Beispiele, bei denen LOC eine gerade Byteadresse ist.

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

PUSH (Tabelle 2.3) führt einen Schreibzugriff und POP einen Lesezugriff auf den Normal- oder den Systemstack aus. Die Zugriffe erfolgen wort- oder doppelwortweise. Als Stackpointerregister SPR wird im Normalmodus R 7 und im Systemmodus R 7′ benutzt. Beide Stacks werden zu niedrigeren Adressen hin gefüllt. Der Stackpointer SP zeigt jeweils auf den letzten Eintrag. Dazu folgendes Beispiel, bei dem LOC eine gerade Byteadresse ist.

Mit dem MOVE-Befehl und den Adressierungsarten Autodekrement und Autoinkrement können weitere Stacks mit RO bis R6 als Stackpointerregister gebildet werden. Je nach Adressierung werden die Stacks zu niedrigeren oder höheren Adressen hin gefüllt. Im ersten Fall zeigt der Stackpointer auf den letzten Eintrag (dies entspricht der Wirkung der Befehle PUSH und POP), im zweiten Fall zeigt er auf die erste freie Zelle. Dazu je ein Beispiel, wobei die Abbildungen die Füllrichtung und den aktuellen Stackpointer zeigen. PEA ermittelt die durch s angegebene effektive Adresse und schreibt diese auf den Stack. LEA lädt die durch s angegebene effektive Adresse in das Register R. Die im Stack oder im Register stehende Adresse kann z.B. zur registerindirekten Adressierung eines Operanden verwendet werden. Beide Befehle werden zur Parameterubergabe bei Unterprogrammanschlüssen benutzt (s. Abschnitt 3.3.2). Dazu ein Beispiel, bei dem die effektive Adresse durch indizierte Adressierung gebildet wird.

Arithmetische Befehle

Registerspeicher

ADD, SUB, MUL und DIV (Tabelle 2.4) beschreiben die vier Grundrechenarten. ADD und SUB können auf Dualzahlen (unsigned numbers) und auf Zweikomplementzahlen (signed numbers) angewendet werden. Durch die Möglichkeit, bei ADDC und SUBC das Übertragsbit C in die Operation mit einzubeziehen, lassen sich auf einfache Weise arithmetische Operationen mit Operanden mehrfacher Wortlänge programmieren. MULU und DIVU beziehen sich auf Dualzahlen, während MULS und DIVS Zweikomplementzahlen verarbeiten. Bei MULU und MULS haben der Multiplikator und der Multiplikand jeweils einfache und das Produkt doppelte Wortlänge.

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Bei DIVU und DIVS haben der Divisor und der Quotient einfache und der Dividend doppelte Wortlänge. Produkt und Dividend werden in einem Doppelregister gespeichert, wobei der höherwertige Anteil in einem Register mit gerader Registeradresse Rn (n = 0,2,4,6) und der niedrigerwertige Anteil im darauf folgenden Register Rn + 1 untergebracht sind. Bei der Division wird der Quotient nach Rn+l und der Rest nach Rn gespeichert. Zu DIVU ein Beispiel, wobei LOC eine gerade Byteadresse ist.

ABCD und SBCD erlauben die Addition bzw. Subtraktion von binärcodierten Dezimalzahlen (BCD-Zahlen). Jeweils zwei Dezimalziffern werden zu einem Byte zusammengefaßt verarbeitet. Auch hier können unter Einbeziehung des Übertragsbits C Operanden mit mehr als zwei Dezimalstellen verarbeitet werden. EXTS und EXTSD (Tabelle 2.5) erweitern Byte- bzw. Wortoperanden auf doppelte Länge, ohne daß sich ihre Werte als Zweikomplementzahlen ändern. Dazu wird das Vorzeichen bit des ursprünglichen Operanden in die höherwertige Hälfte des resultierenden Operanden vervielfacht kopiert. NEO, INC und DEC sind Spezial befehle für arithmetische Operationen. NEO bildet das Zweikomplement einer Zahl (Multiplikation mit -1), INC und DEC sind Kurzbefehle zur Addition bzw.

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Subtraktion mit den Dualzahlen 1 bis 16; sie lassen sich für Zählvorgänge benutzen. Das folgende Beispiel zeigt die Wirkung von EXTS. CMP und TAS (Tabelle 2.6) sind Vergleichsbefehle, deren Resultate sich in den Bedingungsbits niederschlagen. CMP vergleicht zwei Operanden d und s durch Subtraktion, ohne die Operanden zu verändern. T AS vergleicht einen Byteoperanden mit Null, beeinflußt damit die Bedingungsbits und setzt anschließend das Vorzeichenbit des Operanden auf 1. Mit beiden Befehlen können Verzweigungen programmiert werden, indem die Bedingungsbits nach der Vergleichsoperation durch einen bedingten Sprungbefehl ausgewertet werden (s. Abschnitt 3.2.2). Der T AS-Befehl wird insbesondere zur Bildung von Semaphoren eingesetzt (s. Abschnitt 6.2.2). Das folgende Beispiel zeigt die Wirkung von CMPB.

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Logische Befehle

AND, OR und EXOR (Tabelle 2.7) bilden mit den korrespondierenden Bits zweier Operanden die logischen Verknüpfungen and, or und exor. NOT inver tiert die Bits eines Operanden (Bilden des Einskomplements, logische Operation not). Dazu zwei Beispiele mit den Befehlen ANDB und OR.

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Bitverarbeitende Befehle

Bei den bitverarbeitenden Befehlen (Tabelle 2.8) werden die von der Operation betroffenen Operandenbits durch die in einer Maske mit dem Wert 1 besetzten Bitpositionen adressiert. Die Maske kann als Direktoperand (konstant) oder als Registerinhalt (variabel) vorgegeben werden. BTST ist ein Vergleichsbefehl, er testet die maskierten Operandenbits auf die Wertigkeiten 0 und 1 und beeinflußt entsprechend dem Vergleichsergebnis das Bedingungsbit Z. BSET und BCLR setzen darüber hinaus die maskierten Operanden bits auf 1 bzw. O. Das folgende Beispiel zeigt die Wirkung von BCLRB.

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Schiebe- und Rotationsbefehle

Die Schiebebefehle (Tabelle 2.9) erlauben das Verschieben eines Operanden um die im Befehl angegebene Anzahl n an Bitpositionen (n=1,2, … ,16). Man unterscheidet hinsichtlich des Nachziehens und des Hinausschiebens von Bits an den Datenformatgrenzen drei Arten von Schiebebefehlen : die arithmetischen und die logischen Schiebe be fehle sowie die Rotationsbefehle. Bei den arithmetischen Schiebebefehlen ASL und ASR entspricht das Linksschieben um n Stellen einer Multiplikation mit 2R (Nachziehen von Nullen) und das Rechtsschieben einer Division durch 2R (Nachziehen des Vorzeichenbits). Bei den logischen Schiebe befehlen LSL und LSR werden jeweils Nullen nachgezogen. Die Befehle ASL und LSL sind zwar in ihren Wirkungen identisch, sie werden jedoch in ihren Mnemonen unterschieden, um die beabsichtigte Operation im Assemblerprogramm zu dokumentieren. Bei den Rotationsbefehlen ROL, ROR, ROLC und RORC werden diejenigen Bits nachgezogen, die am anderen Ende hinausgeschoben werden, so daß kein Bit verlorengeht. Bei ROLC und RORC wird darüber hinaus das Übertragsbit C in die Rotation einbezogen. Bei allen Schiebe- und Rotationsbefehlen wird das zuletzt hinausgeschobene Bit als C-Bit gespeichert. Dazu ein Beispiel mit dem Befehl ASLB.

Sprungbefehle

Der unbedingte Sprungbefehl JMP (Tabelle 2.10) lädt den Befehlszähler mit der im Befehl angegebenen effektiven Adresse von d, d.h. das Programm wird mit dem unter dieser Adresse gespeicherten Befehl fortgesetzt (unbedingter Sprung). Bei den bedingten Sprungbefehlen Bcond wird ein Sprung zu der im Befehl angegebenen Adresse nur dann ausgeführt, wenn die im Mnemon angegebene Sprungbedingung co nd erfüllt ist (bedingter Sprung); ist sie nicht erfüllt, so wird das Programm mit dem auf Bcond folgenden Befehl fortgesetzt (Verzwei – gung). Die Sprungbedingungen beziehen sich auf den Zustand der Bedingungsbits CC im Statusregister, wie in Tabelle 2.10 angegeben. Programmverzweigungen werden dadurch programmiert, daß ein dem bedingten Sprungbefehl vorangestellter Befehl, im allgemeinen der Vergleichsbefehl CMP, durch das Resultat seiner Operation die CC-Bits für die Abfrage gezielt beeinflußt. In Verbindung mit dem Vergleichsbefehl erklärt sich auch die Mnemonik für die Sprungbedingungen.

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Die Befehle BGT, BGE, BLE und BLT sind für Vergleiche mit Zweikomplementzahlen vorgesehen (Overflowbit V!), BHI und BLS für Vergleiche mit Dualzahlen (Carrybit C !). BPL, BMI, BEQ und BNE sind von der Zahlendarstellung unabhängig. BPL und BMI beziehen sich auf das höchstwertige Resultatbit, BEQ und BNE auf den Resultatwert Null bzw. ungleich Null. BVC, BVS, BCC und BCS dienen zur Abfrage des Overflow- bzw. des Carrybits. Zu den bedingten Sprungbefehlen folgendes Beispiel: Zwei Programmverzweigungen, die auf den Vergleich zweier Registerinhalte (Subtraktion) zurückge führt werden, interpretieren die Registerinhalte 1. als Zweikomplementzahlen und 2. als Dualzahlen. Die Tabelle in der folgenden Darstellung zeigt das Ergebnis beider Verzweigungen für jeweils zwei Datenpaare a und b.

Die bedingten Sprungbefehle sehen ausschließlich die befehlszählerrelative Adressierung vor, beim unbedingten Sprungbefehl ist sie eine von 6 möglichen Adressierungsarten. Werden sämtliche Sprungbefehle innerhalb eines Programms mit befehlszählerrelativen Adressen versehen, so läßt sich das Programm im Speicher verschieben, ohne daß die Sprungadressen im Adreßteil der Sprungbefehle verändert werden müssen (dynamisch verschiebbarer Programmcode; s. auch die Abschnitte 3.1.3 und 3.1.4). Die Relativadresse (Sprungdistanz) wird vom Assembler entweder als Zweikomplementzahl mit 8 Bits (Einwortbefehl, Sprungbereich : -128 bis + 127 Bytes) oder, wenn dieser Sprungbereich nicht ausreicht, als Zweikomplementzahl mit 16 Bits (Zweiwortbefehl, Sprungbereich : – 32768 bis + 32767 Bytes) ermittelt.

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Bezugspunkt ist der Befehlszählerstand, der auf das Befehlswort zeigt, das auf die Relativadresse folgt. JSR (Tabelle 2.11) dient als Unterprogrammsprung. Wie bei JMP erfolgt der Sprung unbedingt, jedoch wird zuvor der aktuelle Befehlszählerstand (Adresse des nächsten Befehls) als Rücksprungadresse in den Normal- bzw. Systemstack geladen. Der Rücksprung vom Unterprogramm zu dem auf JSR folgenden Befehl erfolgt mit RTS, der dazu den letzten Stackeintrag in den Befehlszähler lädt. RTS dient dementsprechend als Abschluß eines Unterprogramms (s. Abschnitt 3.3.1). Das folgende Beispiel zeigt den Aufruf eines Unterprogramms, dessen erster Befehl die symbolische Adresse UP hat.

Trap- und Interruptprogramme werden mit dem Rücksprungbefehl R TE abgeschlossen. R TE lädt die letzten bei den Stackeintragungen des Systemstacks in das Statusregister und den Befehlszähler und stellt somit den Prozessorstatus, wie er vor der Programmunterbrechung war, wieder her. RTE ist ein privilegierter Befehl und deshalb nur im Systemmodus ausführbar. R TS und R TE führen den Rücksprung nur dann korrekt aus, wenn der verwendete Stackpointer (NSP oder SSP) bei der Befehlsausführung den gleichen Stand wie direkt nach Eintritt in das Unterprogramm bzw. das Trap- oder Interruptprogramm aufweist.

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Stringbefehle

MOVES (Tabelle 2.12) transportiert einen zusammenhängenden Datenblock (Bytekette, Wortkette) mit der Anfangsadresse s in einen zusammenhängenden Speicher bereich mit der Anfangsadresse d. Die Blocklänge wird in einem allgemeinen Register Ri vorgegeben und wird mit jedem Datentransport automatisch um Eins vermindert. Ist der Registerinhalt gleich Null, so wird der Datentransport beendet. Quelle des Transports kann auch ein einziger Operand sein, z.B. Null als Direktoperand, um einen Speicherbereich zu löschen. CMPS vergleicht die korrespondierenden Operanden zweier Blöcke paarweise und beeinflußt mit jedem Vergleichs ergebnis die Bedingungsbits. Als Endekriterium gilt der Wert Null im Register Ri oder die Erfüllung der im Adreßteil angegebenen Bedingung cond. Die möglichen Bedingungen sind mit denen der bedingten Sprung befehle identisch. MOVES und CMPS sind wie MOVEM zwischen zwei Einzeloperationen unterbrechbar.

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

Zu CMPS folgendes Beispiel: In einem im Speicher stehenden String von ASCIIZeichen, dessen Anfangsadresse in RO und dessen Byteanzahl in R1 vorgegeben sind, soll das erste Leerzeichen ($20) gesucht werden. Beim Auffinden dieses Zeichens soll eine Programmverzweigung nach FOUND erfolgen.

Systembefehle

Die Systembefehle sind Befehle zur Steuerung des Systemzustands. Hinsichtlich ihrer Wirkungsweise werden sie unterteilt in die privilegierten Befehle, die nur im Systemmodus ausführbar sind, und die Trap-Befehle, die den programmierten (kontrollierten) Übergang vom Normal- in den Systemmodus ermöglichen. MOVSR (Tabelle 2.13) ist ein privilegierter Befehl. Er ermöglicht den Leseund Schreibzugriff auf das Statusregister, womit der Prozessorstatus verändert werden kann. MOVCC erlaubt dies nur eingeschränkt für die Bedingungsbits, und darf deshalb auch im Normalmodus verwendet werden. Mit MOVNSP ist imSystemmodus der Zugriff auf das Normal-Stackpointerregister R7 möglich.

Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle Befehlssatz: Datentransportbefehle, Arithmetische Befehle, Logische Befehle

NOP (Tabelle 2.14) führt keine Operation aus; er benötigt lediglich die Zeit für den Befehlsabrufund die Befehlsinterpretation. Mit NOP können z.B. Lükken im Programm gefüllt oder Zeitbedingungen in Zeitschleifen vorgegeben werden. STOP ist ein privilegierter Befehl, der die Programmausführung stoppt. Sie kann nur durch eine externe Unterbrechungsanforderung wieder aufgenommen werden (Reset-Signal oder Interruptsignal). RESET ist ein privilegierter Befehl. Er setzt für einige Maschinenzyklen den RE SET-Aus gang auf Null, womit Systemkomponenten, wie z.B. Interface-Einheiten, über ihre RESETEingänge initialisiert werden können.

TRAPV und TRAP (Tabelle 2.15) bewirken eine Programmunterbrechung und verzweigen auf die zugehörigen Trap-Programme, deren Startadressen in der Vektortabelle im Speicher stehen (s. Abschnitt 2.3.1). Bei TRAPV ist die Unterbrechung vom Zustand des Overflowbits V abhängig, bei TRAP erfolgt sie unbedingt. Der TRAP-Befehl ermöglicht durch die Angabe von n eine Auswahl unter 16 Trap-Programmen; n wird vom Prozessor zur Bildung der Trap-Vektornummer herangezogen.

Like this post? Please share to your friends:
Schreibe einen Kommentar

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: