CALMBEF.DOK CALM-Befehle BEFEHLE Ein Befehl setzt sich entweder nur aus einem Operationscode oder einem Operationscode und einem oder mehreren Operanden zusammen. Der Operationscode ist ein mnemotechnischer Name, der überlicherweise von einem englischen Tätigkeitswort abgeleitet ist und die auszuführende Operation ausdrückt. Zusätzliche Datenangaben legen eine Operation in allen Einzelheiten fest. Das Syntaxdiagramm eines Befehls ist in Fig. 25 dargestellt. Folgende Buchstaben können an einen CALM-Operationscode angehängt werden: M spezielle Operation mit mehreren Operanden P spezielle Operation für Peripherieverkehr (Ein-/Ausgabe) I nicht unterbrechbare Operation Da die Bedingungsbits in den Prozessoren nicht einheitlich verändert werden, sind sie bei den folgenden Befehlsdefinitionen nicht angegeben. Befehle, die von der Hauptphilosophie des Prozessors abweichen, sollten nicht die in CALM definierten Namen haben. Datenangaben werden im folgenden Text mit .da abgekürzt. Befehl ------------------------------- /->[ Operanden ohne Datenangaben ]-, ------ -------------- | ------------------------------- | ->[f.T.]->( Operationscode )-| |-> ------ -------------- | ------------------------------ | `->[ Operanden mit Datenangaben ]--' ------------------------------ Operanden ohne Datenangaben ------ --- ------ /-[f.T.]<-( , )<-[f.T.]<-, | ------ --- ------ | | | ---- --------- V ------------ | ->[D.]---------->---------->[ Trenn ]------->[ Operand ]--------> ---- | ^ --------- ------------ | --- ----- | `->( , )->( Bc. )-' --- ----- Operanden mit Datenangaben ------ --- ------ /-[f.T.]<-( , )<-[f.T.]<-, | ------ --- ------ | | | --------- V ------------ ---- | ---------->------------>[ Trenn ]--->[ Operand ]--->[D.]-------> | ^ | --------- ------------ | ---- ^ ^ | --- ----- | | | | | `->( , )->( Bc. )-' | `--->---' | --- ----- | | `-------------------->-------------------' Bc.: Bedingungscode D.: Datenangabe Fig. 25 CALM-Befehle Seite: 2 ACOC Add Complement, One and the Carry Beschreib.:Addiert das Einerkomplement des ersten Operanden, eine Eins und das Übertragsbit C zum zweiten Operanden. Die ausgeführte Operation entspricht dem Befehl SUBC, jedoch werden die Bedingungsbits anders gesetzt. Syntax: ACOC.da Quelle, QuelleZiel ACOC.da Quelle1, Quelle2, Ziel ACOC Quelle.da, QuelleZiel.da ACOC Quelle1.da, Quelle2.da, Ziel.da Kommentar: Dieser Befehl existiert nur noch in älteren 8 Bit Mikroprozessoren (z.B. SC/MP, 1802). Beispiel: ACO #16'4A,D ; 1802 ADD ADD Beschreib.:Addiert zwei Operanden und setzt die entsprechenden Bedingungsbits. Syntax: ADD.da Quelle, QuelleZiel ADD.da Quelle1, Quelle2, Ziel ADD Quelle.da, QuelleZiel.da ADD Quelle1.da, Quelle2.da, Ziel.da Beispiele: ADD {HL},A ; 8080, Z80 ADD.16 {A6}-2,D0 ; 68000 ADD.F64 {R0}+10,{R1}+20 ; NS32000 ADDC ADD with Carry Beschreib.:Addiert zwei Operanden und das Übertragsbit C. Syntax: ADDC.da Quelle, QuelleZiel ADDC.da Quelle1, Quelle2, Ziel ADDC Quelle.da, QuelleZiel.da ADDC Quelle1.da, Quelle2.da, Ziel.da Beispiele: ADDC {IX}+3,A ; 6800, 6801 ADDC.8 #1,[SS]+{BP} ; iAPX86 ADDX.D8 {-A0},{-A1} ; 68000, X ist hier C AND AND Beschreib.:Führt ein logisches UND der beiden Quelloperanden bitweise aus. Syntax: AND.da Quelle, QuelleZiel AND.da Quelle1, Quelle2, Ziel AND Quelle.da, QuelleZiel.da AND Quelle1.da, Quelle2.da, Ziel.da Kommentar: Dieser Befehl wird zum Maskieren von Bits benutzt. Ein ähnlicher, aber selten eingebauter Befehl ist BIC (Bit Clear). Beispiele: AND #1,A ; 8080, Z80, ... AND.32 #16'FFFF0000,D6 ; 68000 BIC.16 #7,R0 ; NS32000 (AND.16 ; #16'FFF8,R0) CALM-Befehle Seite: 3 ASL Arithmetic Shift Left ----- -------------------------- ASL [ C ]<---[ <=== ]<---0 ----- -------------------------- Beschreib.:Verschiebt den Quelloperanden um ein oder mehr Bits nach links (Richtung MSB). Die niedrigstwertigen Bits werden durch Nullen ersetzt. Operation entspricht SL, hingegen kann das Überlaufbit V anders verändert werden. Es muss gesetzt werden, wenn das Vorzeichen des Ergebnisses verschieden vom Quelloperanden ist. Syntax: ASL.da QuelleZiel ASL.da Amplitude, QuelleZiel ASL.da Amplitude, Quelle, Ziel ASL Amplitude.da, QuelleZiel.da ASL Amplitude.da, Quelle.da, Ziel.da Kommentar: Eine negative Amplitude bedeutet, dass die Verschiebung nach rechts erfolgt. ASL.16 QuelleZiel ist mit SL.A16 QuelleZiel identisch. Eine Verschiebung nach links multipliziert mit zwei. Beispiel: ASL.16 CL,BX ; iAPX86 ASR Arithmetic Shift Right /------, | | | -------------------------- ----- ASR `--->[ ===> ]--->[ C ] -------------------------- ----- Beschreib.:Verschiebt den Operanden nach rechts, aber das höchstwertige Bit (MSB, Vorzeichen) bleibt erhalten. Die Operation entspricht Division durch 2 hoch der Amplitude. Dies gilt aber nur für positive Zahlen (für negative Zahlen erfolgt die Rundung nicht in die gleiche Richtung). Syntax: ASR.da QuelleZiel ASR.da Amplitude, QuelleZiel ASR.da Amplitude, Quelle, Ziel ASR Amplitude.da, QuelleZiel.da ASR Amplitude.da, Quelle.da, Ziel.da Kommentar: Eine negative Amplitude bedeutet, dass die Verschiebung nach links erfolgt. ASR.16 QuelleZiel ist mit SR.A16 QuelleZiel identisch. Beispiele: ASR B ; 6809 (ASR #1,B) ASR.16 CL,BX ; iAPX86 CALL CALL Beschreib.:Rettet die Rückkehraddresse (Stapel) und springt zur angegebenen Adresse (Unterprogrammaufruf). Syntax: CALL Sprungadresse CALL,b Sprungadresse Kommentar: Das aufgerufene Unterprogramm ist durch einen RET-Befehl abgeschlossen. Beispiel: CALL ADRESSE CALM-Befehle Seite: 4 CHECK CHECK Beschreib.:Prüft einen Wert gegen zwei Grenzen. Syntax: CHECK.da Untergrenze, Obergrenze, Quelle Kommentar: Es wird ein zweifacher Vergleich ausgeführt. Häufig ist der eine Grenzwert Null und wird daher nicht explizit angegeben. Befindet sich der Wert nicht innerhalb der Grenzen, so wird je nach Prozessor entweder nur ein Bedingungsbit gesetzt oder eine spezielle Unterbrechung (Check Trap) erzeugt. Beispiel: CHECK.A16 #100,D4 ; 68000 (0 <= D4 <= 100) CLR CLeaR Beschreib.:Löscht den Zieloperanden (alle Bits werden auf Null gesetzt). Äquivalenter Befehl: MOVE #0,Ziel. Syntax: CLR.da Ziel Kommentar: Wird ein CLR-Befehl mit einer Verbindung verknüpft, so wird der Zieloperand nicht geändert, wenn die Bedingung falsch ist (siehe dazu SET). Beispiele: CLR {IX}+ABSTAND:#BIT_NR ; Z80 CLR.32 D1 ; 68000 CLRC COMP COMPare Beschreib.:Vergleicht den zweiten Operanden mit dem ersten. Es ist die gleiche Operation wie SUB, aber es wird kein Ergeb- nis erzeugt (nur die Bedingungsbits werden verändert. Syntax: COMP.da Quelle1, Quelle2 COMP Quelle1.da, Quelle2.da Beispiele: COMP {IX}+10,B ; 6800, ... COMP.F32 {SB}+4,F0 ; NS32000 CONV CONVert Beschreib.:Führt eine Datentypumwandlung aus. Sind Quelle und Ziel identisch, können die Datenangaben mit dem Operationscode angegeben werden. Syntax: CONV.da QuelleZiel CONV Quelle.da, Ziel.da Kommentar: Bei den Operanden müssen der Datentyp und die Datenlänge angegeben werden. Einige Datentypumwandlungsmöglich- keiten können auch vom MOVE-Befehl übernommen werden. Beispiele: CONV.A8.16 D0 ; 68000 CONV {FP}.A16,{SB}.F64 ; NS32000 DEC DECrement Beschreib.:Vermindert den Operanden um Eins. Es ist nur ein Operand erlaubt. Für Verminderungen um 2, 4, usw. muss ein SUB-Befehl benutzt werden. Syntax: DEC.da QuelleZiel Beispiele: DEC {IY}+ABSTAND ; Z80 DEC.32 D1 ; 68000 CALM-Befehle Seite: 5 DIV DIVide Beschreib.:Dividiert den zweiten Operanden durch den ersten. Das Ergebnis ist entweder der 2. oder ein 3. Operand. Der Rest kann ein weiterer, letzter Operand sein. Syntax: DIV.da Divisor, Dividend, Quotient, Rest DIV Divisor.da, Dividend.da, Quotient.da, Rest.da Kommentar: Je nach Grösse der Operanden ist ein Überlauf möglich. Dies erzeugt bei einigen Prozessoren automatisch einen speziellen Unterprogrammaufruf (Trap). Der Zieloperand ist häufig mit einem der Quelloperanden identisch und enthält manchmal auch den Rest der Division in seiner oberen Operandenhälfte. (5.DIV.2 = 2, -5.DIV.2 = -2, 5.DIV.-2 = -2, -5.DIV.-2 = 2; A = (A.DIV.B)*B + (A.MOD.B), wobei .MOD. = Rest der Division). Beispiele: DIV.16 CX,DXAX,AX,DX ; iAPX86 DIV.A16 D1,D0 ; 68000 (Rest: ; D0:#31..#16) DJ Decrement and Jump Beschreib.:Vermindert den ersten Operanden um Eins und springt zur Adresse, die durch den zweiten Operanden angegeben ist. Syntax: DJ.da,b QuelleZiel, Sprungadresse Kommentar: Der am häufigsten vorkommende Schlaufenbefehl vermindert einen Zähler um Eins und springt zur angegebenen Adresse, wenn eine Bedingung erfüllt ist. Beispiele: DJ,NE B,ADRESSE ; Z80 DJ.16,NMO D0,ADRESSE ; 68000 (NMO: nicht ; minus Eins) EX EXchange Beschreib.:Tauscht zwei Operanden aus. Die Reihenfolge der Operanden spielt keine Rolle. Syntax: EX.da Operand1, Operand2 Kommentar: Der EX-Befehl führt einen gleichzeitigen, doppelten MOVE-Befehl aus. Beispiele: EX {SP},HL ; 8080, Z80 EX.16 AX,[DS]+SEMA ; iAPX86 EX.32 A6,D0 ; 68000 HALT HALT Beschreib.:Hält den Prozessor an, bis ein externes Signal ihn wieder startet. Syntax: HALT Kommentar: Der Prozessor gibt nach diesem Befehl den Bus frei und reagiert auch auf keine Unterbrechungsanforderungen mehr. Der Prozessor kann nur noch durch ein externes Rücksetzsignal reaktiviert werden. Dieser Befehl ist selten. Jedoch kommt der HALT-Zustand bei modernen Mikroprozessor vor (z.B. doppelter Busfehler). Beispiel: HALT ; PDP-11 INC INCrement Beschreib.:Erhöht den Operanden um Eins. Es ist nur ein Operand erlaubt. Für Erhöhungen um 2, 4, usw. muss ein ADD-Befehl benutzt werden. Syntax: INC.da QuelleZiel Beispiele: INC {IY}+ABSTAND ; Z80 INC.32 D1 ; 68000 CALM-Befehle Seite: 6 IOFF Interrupt OFF Beschreib.:Sperrt Unterbrechungen. Syntax: IOFF Kommentar: Auch wenn Unterbrechungen gesperrt sind, sind spezielle, nicht maskierbare Unterbrechungen (NMI) immer möglich. Beispiele: IOFF ; 8080, Z80, 6800, ... IOFF ; 68000 (OR.16 #16'0700,SF) ION Interrupt ON Beschreib.:Erlaubt Unterbrechungen. Syntax: ION Beispiele: ION ; 8080, Z80, 6800, ... ION ; 68000 (AND.16 #16'F8FF,SF) JUMP JUMP Beschreib.:Springt zur angegebenen Adresse. Syntax: JUMP Sprungadresse JUMP,b Sprungadresse Kommentar: Der Befehl JUMP ADRESSE ist gleichbedeutend mit MOVE #ADRESSE,PC. Beispiele: JUMP,VS ADRESSE ; Z80, 6800, ... JUMP R16^ADRESSE ; 6809, iAPX86, ... JUMP {{FP}+ABSTAND1}+ABSTAND2 ; NS32000 MOVE MOVE Beschreib.:Transferiert den Quelloperanden in den Zieloperanden. Syntax: MOVE.da Quelle, Ziel MOVE Quelle.da, Ziel.da Beispiele: MOVE HL,SP ; 8080, Z80 MOVE.8 #2,BL ; iAPX86 MOVE.32 #{A6}+ABSTAND,A0 ; 68000 MOVE.F64 {SB}+ABSTAND,F2 ; NS32000 MUL MULtiply Beschreib.:Multipliziert die beiden Quelloperanden. Ist der Zieloperand nicht explizit mit seiner Datenlänge angegeben, ist unklar, ob die Länge des Zieloperanden einfach oder doppelt ist. Syntax: MUL.da Quelle, QuelleZiel MUL.da Quelle1, Quelle2, Ziel MUL Quelle.da, QuelleZiel.da MUL Quelle1.da, Quelle2.da, Ziel.da Beispiele: MUL A,B,AB ; 6801 MUL.16 D1,D0 ; 68000 (MUL ; D1.16,D0.16,D0.32) MUL.F64 {R0}+10,F2 ; NS32000 NEG NEGate Beschreib.:Negiert (Zweierkomplement oder Subtraktion von Null) den Quelloperanden. Syntax: NEG.da QuelleZiel NEG.da Quelle, Ziel NEG Quelle.da, Ziel.da Beispiele: NEG A ; Z80, ... NEG.16 {A6+} ; 68000 NEG.F64 {R0}+10,{R1}+20 ; NS32000 CALM-Befehle Seite: 7 NEGC NEGate with Carry Beschreib.:Negiert mit Übertragsbit C, d.h. subtrahiert den Operanden und das Übertragsbit C von Null. Syntax: NEGC.da QuelleZiel NEGC.da Quelle, Ziel NEGC Quelle.da, Ziel.da Kommentar: Das Resultat einer NEGC-Operation ist mit dem einer NOT- Operation identisch, wenn das Übertragsbit C vor der Operation gesetzt wurde. Der Endwert des Übertragsbits C kann hingegen verschieden sein. Beispiel: NEGX.D8 D0 ; 68000 (X ist hier C) NOP No OPeration Beschreib.:Nulloperation. Syntax: NOP Kommentar: Der Mikroprozessor holt den Befehl aus dem Speicher, führt aber keine Operation aus. Beispiel: NOP NOT NOT Beschreib.:Invertiert jedes Bit des Quelloperanden (Einerkomplement). Syntax: NOT.da QuelleZiel NOT.da Quelle, Ziel NOT Quelle.da, Ziel.da Beispiele: NOT A ; 8080, Z80, ... NOT.16 {A6+} ; 68000 NOT.32 {R0}+10,{R1}+20 ; NS32000 OR OR Beschreib.:Führt ein logisches ODER der beiden Quelloperanden bitweise aus. Syntax: OR.da Quelle, QuelleZiel OR.da Quelle1, Quelle2, Ziel OR Quelle.da, QuelleZiel.da OR Quelle1.da, Quelle2.da, Ziel.da Kommentar: Dieser Befehl wird zum Setzen von Bits benutzt. OR wird manchmal BIS (bit set) genannt, speziell wenn der Befehl BIC (bit clear) verfügbar ist. Beispiele: OR #1,A ; 8080, Z80, ... OR.32 #16'FFFF0000,D6 ; 68000 BIS.8 #3,F ; NS32000 (OR.8 #16'3,F) POP POP Beschreib.:Entstapeln. Für die meisten Prozessoren gilt: POP Ziel ist äquivalent zu MOVE {SP+},Ziel. Syntax: POP.da Ziel Kommentar: Normalerweise erhält nur ein Stapel die Rückkehradresse eines Unterprogramms (CALL). Der Befehl POP bezieht sich auf diesen Stapel. Beispiele: POP DE ; 8080, Z80 POPU AB ; 6809 (von Stapel US) POP.16 F ; 68010, 68020 CALM-Befehle Seite: 8 PUSH PUSH Beschreib.:Stapeln. Für die meisten Prozessoren gilt: PUSH Quelle ist äquivalent zu MOVE Quelle,{-SP}. Syntax: PUSH.da Quelle Kommentar: Normalerweise erhält nur ein Stapel die Rückkehradresse eines Unterprogramms (CALL). Der Befehl PUSH bezieht sich auf diesen Stapel. Beispiele: PUSH DE ; 8080, Z80 PUSHU AB ; 6809 (von Stapel US) PUSH.16 F ; 68010, 68020 RESET RESET Beschreib.:Aktiviert spezielles Rücksetzsignal (für Ein-/Ausgabebausteine). Syntax: RESET Kommentar: Der Befehl RESET simuliert das eigentliche Rücksetzsignal per Programmierung (der RESET-Anschluss ist bidirektional). Der Prozessor selber wird jedoch nicht zurückgesetzt. Beispiel: RESET ; 68000 RET RETurn Beschreib.:Springt zu der vom Stapel geholten Adresse (Unterprogrammrückkehr). Syntax: RET RET,b RET Ausdruck Kommentar: Der RET-Befehl schliesst ein Unterprogramm ab (von CALL aufgerufen). In Unterbrechungs- und TRAP-Unterprogrammen signalisieren unterschiedliche RET-Befehle, dass noch andere Informationen als nur der Befehlszähler PC gerettet worden sind. Beispiele: RET,EQ ; 8080, Z80 RETI ; Z80 (Unterbrechung) RETSF ; 68000 (PC + Register SF) RET #10 ; NS32000 RL Rotate Left -------------------------- ----- RL /---[ <=== ]<------->[ C ] | -------------------------- | ----- | | `----------------->---------------' Beschreib.:Verschiebt den Operanden um ein oder mehr Bits nach links wobei das LSB bei jeder Verschiebung durch das MSB ersetzt wird. Syntax: RL.da QuelleZiel RL.da Amplitude, QuelleZiel RL.da Amplitude, Quelle, Ziel RL Amplitude.da, QuelleZiel.da RL Amplitude.da, Quelle.da, Ziel.da Kommentar: Eine negative Amplitude bedeutet, dass die Verschiebung nach rechts erfolgt. Beispiele: RL B ; 6809 (RL #1,B), ... RL.16 CL,BX ; iAPX86 (RL CL.8,BX.16) CALM-Befehle Seite: 9 RLC Rotate Left with Carry -------------------------- ----- RLC /---[ <=== ]<---[ C ]<---, | -------------------------- ----- | | | `-------------------->---------------------' Beschreib.:Verschiebt den Operanden um ein oder mehr Bits nach links wobei bei jeder Verschiebung das LSB durch das Übertragsbit C und C durch das MSB ersetzt wird. Syntax: RLC.da QuelleZiel RLC.da Amplitude, QuelleZiel RLC.da Amplitude, Quelle, Ziel RLC Amplitude.da, QuelleZiel.da RLC Amplitude.da, Quelle.da, Ziel.da Kommentar: Eine negative Amplitude bedeutet, dass die Verschiebung nach rechts erfolgt. Beispiele: RLC B ; 6809 (RLC #1,B), ... RLC.16 CL,BX ; iAPX86 (RLC CL.8,BX.16) RR Rotate Right -------------------------- ----- RR /--->[ ===> ]------->[ C ] | -------------------------- | ----- | | `-----------------<---------------' Beschreib.:Verschiebt den Operanden um ein oder mehr Bits nach rechts wobei das MSB bei jeder Verschiebung durch das LSB ersetzt wird. Syntax: RR.da QuelleZiel RR.da Amplitude, QuelleZiel RR.da Amplitude, Quelle, Ziel RR Amplitude.da, QuelleZiel.da RR Amplitude.da, Quelle.da, Ziel.da Kommentar: Eine negative Amplitude bedeutet, dass die Verschiebung nach links erfolgt. Beispiele: RR B ; 6809 (RR #1,B), ... RR.16 CL,BX ; iAPX86 (RR CL.8,BX.16) RRC Rotate Right with Carry -------------------------- ----- RRC /-->[ ===> ]--->[ C ]----, | -------------------------- ----- | | | `--------------------<---------------------' Beschreib.:Verschiebt den Operanden um ein oder mehr Bits nach rechts wobei bei jeder Verschiebung das MSB durch das Übertragsbit C und C durch das LSB ersetzt wird. Syntax: RRC.da QuelleZiel RRC.da Amplitude, QuelleZiel RRC.da Amplitude, Quelle, Ziel RRC Amplitude.da, QuelleZiel.da RRC Amplitude.da, Quelle.da, Ziel.da Kommentar: Eine negative Amplitude bedeutet, dass die Verschiebung nach links erfolgt. Beispiele: RRC B ; 6809 (RRC #1,B), ... RRC.16 CL,BX ; iAPX86 (RRC CL.8,BX.16) CALM-Befehle Seite: 10 SET SET Beschreib.:Setzt den Zieloperanden (alle Bits werden auf Eins gesetzt). Äquivalenter Befehl: MOVE #-1,Ziel. Syntax: SET.da Ziel Kommentar: Wird ein SET-Befehl mit einer Bedingung verknüpft, so wird der Zieloperand gesetzt (alle Bits auf Eins), wenn die Bedingung wahr, und zurückgesetzt (alle Bits auf Null), wenn die Bedingung falsch ist (siehe auch CLR). Beispiele: SET.8,EQ {A0} ; 68000 SET {HL}:#4 ; Z80 SETC ; 8080, Z80, ... SKIP SKIP Beschreib.:Überspringt den nächsten Befehl. Syntax: SKIP,b Kommentar: Der SKIP-Befehl wird fast immer mit einer Bedingung verknüpft. Beispiel: SKIP,EQ DJ.16,NMO D0,ADRESSE ; 68000 SL Shift Left ----- -------------------------- SL [ C ]<---[ <=== ]<---0 ----- -------------------------- Beschreib.:Verschiebt den Operanden um ein oder mehr Bits nach links, wobei das LSB bei jeder Verschiebung durch Null ersetzt wird. Syntax: SL.da QuelleZiel SL.da Amplitude, QuelleZiel SL.da Amplitude, Quelle, Ziel SL Amplitude.da, QuelleZiel.da SL Amplitude.da, Quelle.da, Ziel.da Kommentar: Eine negative Amplitude bedeutet, dass die Verschiebung nach rechts erfolgt. Eine Verschiebung nach links multipliziert mit zwei. Beispiele: SL B ; 6809 (SL #1,B), ... SL.16 CL,BX ; iAPX86 (SL CL.8,BX.16) SR Shift Right -------------------------- ----- SR 0--->[ ===> ]--->[ C ] -------------------------- ----- Beschreib.:Verschiebt den Operanden um ein oder mehr Bits nach rechts wobei das MSB bei jeder Verschiebung durch Null ersetzt wird. Syntax: SR.da QuelleZiel SR.da Amplitude, QuelleZiel SR.da Amplitude, Quelle, Ziel SR Amplitude.da, QuelleZiel.da SR Amplitude.da, Quelle.da, Ziel.da Kommentar: Eine negative Amplitude bedeutet, dass die Verschiebung nach links erfolgt. Eine Verschiebung nach rechts dividiert durch zwei. Beispiele: SR B ; 6809 (SR #1,B), ... SR.16 CL,BX ; iAPX86 (SR CL.8,BX.16) CALM-Befehle Seite: 11 SUB SUBtract Beschreib.:Subtrahiert den ersten Operanden vom zweiten Operanden. Syntax: SUB.da Quelle, QuelleZiel SUB.da Quelle1, Quelle2, Ziel SUB Quelle.da, QuelleZiel.da SUB Quelle1.da, Quelle2.da, Ziel.da Beispiele: SUB #2'1010,A ; 8080, Z80, ... SUB.32 {A6}+400,D6 ; 68000 SUB.F64 F0,{SB}+10 ; NS32000 SUBC SUBtract with Carry Beschreib.:Subtrahiert den ersten Operanden und das Übertragsbit C vom zweiten Operanden. Syntax: SUBC.da Quelle, QuelleZiel SUBC.da Quelle1, Quelle2, Ziel SUBC Quelle.da, QuelleZiel.da SUBC Quelle1.da, Quelle2.da, Ziel.da Beispiele: SUBC #2'1010,A ; 8080, Z80, ... SUBX.32 {-A4},{-A3} ; 68000 (X ist hier C) SUBC.32 R0,{SB}+10 ; NS32000 SWAP SWAP Beschreib.:Tauscht die beiden Hälften des Operanden aus. Die zugehörige Länge bezieht sich auf die volle Länge des Operanden. Syntax: SWAP.da QuelleZiel Kommentar: Der SWAP-Befehl ist notwendig, wenn auf die einzelnen Untereinheiten eines Operanden nicht unabhängig zugegriffen werden kann. Beispiel: SWAP.32 D4 ; 68000 TCLR Test and CLeaR Beschreib.:Testet und löscht das (die) Operandenbit(s). Syntax: TCLR.da QuelleZiel (:Bitadresse(.da)) TCLR QuelleZiel.da (:Bitadresse(.da)) Kommentar: Das Nullbit Z enthält vielfach den ursprünglichen Bitwert. Der zusätzliche Buchstabe I gibt an, dass der Befehl nicht unterbrechbar ist. Die Datenangabe beim Operationscode oder beim Byteadressenoperanden zeigt die Grenzen der Bitadressierungsmöglichkeiten auf. Beispiele: TCLR.32 D5:#31 ; 68000 (Bit: 0..31) TCLR.8 {A6}+BEDINGUNG:#2 ; 68000 (Bit: 0..7) TCLRI {SB}:{FP}.A8 ; NS32000 (Bit: -128..+127) TEST TEST Beschreib.:Testet das Vorzeichen und den Wert (ob Null) des Operanden. Syntax: TEST.da Quelle (:Bitadresse(.da)) TEST Quelle.da (:Bitadresse(.da)) TEST.da Quelle1, Quelle2 Kommentar: TEST Operand ist gleichbedeutend mit COMP #0,Operand. Das Nullbit Z wird gesetzt, wenn der Wert des Operanden Null ist. Das MSB wird in das Vorzeichen N kopiert. Bei zwei Operanden wird vor dem Test eine AND Operation ausgeführt. Beispiele: TEST B ; 6800, ... TEST.32 D5:#31 ; 68000 (Bit: 0..31) TEST.8 {A6}+BEDINGUNG:#2 ; 68000 (Bit: 0..7) TEST {SB}:{FP}.A8 ; NS32000 (Bit: -128..+127) TEST.16 [DS]+{SI},AX ; iAPX86 CALM-Befehle Seite: 12 TNOT Test and NOT Beschreib.:Testet und invertiert das (die) Operandenbit(s). Syntax: TNOT.da QuelleZiel (:Bitadresse(.da)) TNOT QuelleZiel.da (:Bitadresse(.da)) Kommentar: Das Nullbit Z enthält vielfach den ursprünglichen Bitwert. Die Datenangabe beim Operationscode oder beim Byteadressenoperanden zeigt die Grenzen der Bitadressierungsmöglichkeiten auf. Beispiele: TNOT.32 D5:#31 ; 68000 (Bit: 0..31) TNOT.8 {A6}+BEDINGUNG:#2 ; 68000 (Bit: 0..7) TNOT {SB}:{FP}.A8 ; NS32000 (Bit: -128..+127) TRAP TRAP Beschreib.:Spezieller Unterprogrammaufruf. Syntax: TRAP Ausdruck TRAP,b Ausdruck Kommentar: TRAP-Befehle können durch Programmierung oder durch Hardware (z.B. Division durch Null) ausgelöst werden. Beispiele: TRAP ; 6800, ... TRAP #15 ; 68000 TRAP,VS ; 68000 TSET Test and SET Beschreib.:Testet und setzt das (die) Operandenbit(s). Syntax: TSET.da QuelleZiel (:Bitadresse(.da)) TSET QuelleZiel.da (:Bitadresse(.da)) Kommentar: Das Nullbit Z enthält vielfach den ursprünglichen Bitwert. Der Buchstabe I gibt an, dass der Befehl nicht unterbrechbar ist. Die Datenangabe beim Operationscode oder beim Byteadressenoperanden zeigt die Grenzen der Bitadressierungsmöglichkeiten auf. Beispiele: TSET.32 D5:#31 ; 68000 (Bit: 0..31) TSET.8 {A6}+BEDINGUNG:#2 ; 68000 (Bit: 0..7) TSETI {SB}:{FP}.A8 ; NS32000 (Bit: -128..+127) WAIT WAIT Beschreib.:Wartet auf Unterbrechung. Syntax: WAIT Kommentar: Der WAIT-Befehl minimisiert die Antwortzeit auf eine Unterbrechungsanforderung. Nach einer Unterbrechung und nachdem der Prozessor das Unterbrechungsprogramm ausgeführt hat, führt er den nächsten Befehl nach dem WAIT-Befehl aus. Vier WAIT-Varianten gibt es: WAIT (CPU wartet aktiv), SLEEP (E/A-Bausteine werden abgeschaltet), STOP (interner Oszillator wird abgeschaltet) und HALT (CPU gibt sich auf). Beispiel: WAIT XOR XOR Beschreib.:Führt ein logisches, ausschliessendes ODER der beiden Quelloperanden bitweise aus. Syntax: XOR.da Quelle, QuelleZiel XOR.da Quelle1, Quelle2, Ziel XOR Quelle.da, QuelleZiel.da XOR Quelle1.da, Quelle2.da, Ziel.da Kommentar: Dieser Befehl wird zum Invertieren von Bits benutzt. Beispiele: XOR #1,A ; 8080, Z80, ... XOR.32 #16'FFFF0000,D6 ; 68000