Assemblerkurs Teil 3

Dieser Teil des Assemblerkurses soll Ihnen ein paar Gruppen des Befehlssatzes des 68000 mit einigen Anwendungen zeigen.

In unserem letzten Programm (Ausgabe 1/86), haben Sie ein Beispiel für die Anwendung der Arithmetik- und Programmsteuerbefehle gesehen. Außerdem konnte man die Umsetzung eines Algorithmus am Beispiel des Hornerschemas sehen.

Als Übersicht, gebe ich Ihnen an dieser Stelle, die Bezeichnungen der Gruppen, die in diesem Teil des Kurses besprochen werden.

Die arithmetischen Befehle

Die Gruppe der arithmetischen Befehle umfaßt außer den vier Grundrechenarten, die Negation und die vorzeichenrichtige Erweiterung, die virtuelle Substraktion (Vergleich). Hier nun die Tabelle der Befehle.

ADD binäre Addition
CLR löschen eines Operanden
CMP vergleichen zweier Operanden
DIV Division
EXT vorzeichenrichtige Erweiterung
MUL Multiplikation
NEG Zweierkomplement
SUB binäre Subtraktion
TST testen gegen Null

Die Addition ADD

Dieser Befehl existiert in vier Versionen. Die Unterscheidung wird durch das Anhängen eines Buchstabens kenntlich gemacht. Das hatten Sie ja schon bei dem MOVE Befehl kennengelernt. Bei dem ADD-Befehl gibt es aber noch die Variante ADDX. Er hat die Funktion wie der ADC-Befehl beim 6502 Prozessor. Das X-Flag (Extended) wird bei bestimmten Befehlen genauso gesetzt, wie das C-Flag (Carry). Andere Befehle beeinflussen jedoch nur das C-Flag, so daß es möglich ist, daß X-Flag über einige Operationen aufzuheben.

Formen des ADD Befehls

ADD normale Addition
ADDA auf Adressregister
ADDI mit Konstante
ADDQ addiere schnell
ADDX addiere mit X-Flag

Beispiel:

ZAHL1 EQU 17	
ZAHL2 EQU $0D	
	MOVEI.B	#ZAHL1,D1
	MOVEI.B	#ZAHL2,D2
	ADD.B	D2.D1
	MOVEI.B	#ZAHL1,D1
	ADDI.B	#Zahl2,D1
	MOVEA.L	(SP)+,A3
	ADDA.L	(SP)+,A3
	ADD.L	D1.D3
	ADDX.L	D2,D4

In diesen Beispielen sieht man den Umgang mit dem ADD-Befehl. Als erstes, wird den „Variablen“ ZAHLl und ZAHL2 mit der EQU-Anweisung (Equal = Gleich) die Werte 17 und $0D zugewiesen. Manche Assembler erlauben auch ein „ = “ Zeichen an dieser Stelle. Da der ADD-Befehl immer ein Datenregister als Quelle oder Ziel haben muß, speichern wir die Werte in Datenregistern. Die Operation, die bei dieser Art von Befehlen ausgeführt wird, ist immer QUELLE Operation ZIEL nach ZIEL. Somit erscheint als Ergebnis im Datenregister Dl der Wert 30 bzw. $1E. Die Flags werden entsprechend dem Ergebnis gesetzt (Alle auf NULL).

Mit dem nächsten Beispiel sparen wir uns einen Befehl und ein Datenregister. Am Ergebnis ändert sich jedoch nichts.

Als nächstes werden zwei Adressen vom Stack miteinander addiert, deren Summe sich im Adressregister A3 befindet. Die Flags werden von dieser Operation nicht berührt. Dies bedeutet, daß ein eventuell entstehender Überlauf nicht erkannt wird.

Das letzte Beispiel zeigt eine 64 Bit Addition, wobei die erste Zahl mit ihrer Bitfolge in D2,D1 steht, und die zweite Zahl in D4,D3. Als erstes werden die beiden niederwertigen Langworte addiert, und danach die zwei höherwertigen Langworte, wobei der ADDX-Befehl einen eventuellen Überlauf mit berücksichtigt. Das Ergebnis steht dann in den Registern D4,D3. Ist bei der zweiten Addition ein Überlauf aufgetreten, so ist dies wieder durch das X-Flag vermerkt.

Die Subtraktion SUB

Ganz analog zu der Addition verläuft die Subtraktion, wenn man beachtet, daß das X-Flag bei der Subtraktion eine Entlehnung (Borgen) bedeutet. Mit em ADDX und SUBX werden folgende Operationen ausgeführt:

ADD
	Quelle + Ziel + X Flag = Ziel 
	SUB
	Quelle-Ziel-X Flag=Ziel

Beim SUBX-Befehl hingegen, wird das X- Flag mit abgezogen, wenn es gesetzt ist.

Der Vergleich CMP

Will man etwas über den Zustand eines Registers oder einer Speicherstelle bezüglich einer weiteren Größe erfahren, so bietet sich der CMP-Befehl (compare = vergleichen) an. Dieser Befehl bewirkt eine virtuelle Subtraktion. Das bedeutet, er subtrahiert die eine von der anderen Größe und setzt entsprechend dem Ergebnis die Flags. Das Ergebnis wird allerdings nicht, wie beim SUB-Befehl, an das angegebene Ziel gespeichert.

Auch hier werden weitere Buchstaben angehängt, die die Anwendung deutlicher machen sollen. Bei den meisten Assemblern ist die Schreibweise redundant, das heißt, der Assembler erkennt sowohl

CMP (A1)+,(A2)+

als auch

CMPM.W (A1)+,(A2)+

als equivalente Schreibweise an. Ebenso wie der Assembler als Standardverarbeitung Wortverarbeitung wählt. Zugelassen als Schreibweisen sind:

CMP normaler Vergleich
CMPA auf Adressregister
CMPI mit Konstante
CMPM im Speicher

Beispiele:

CMPI.B	#65,D3
BEQ	GEFUNDEN
MOVEA.L	#BLOCK1, A1
MOVEA.L	#BLOCK2,A2
MOVEI.L	#ANZAHL-1,D1

LOOP CMPM.B (A1)+,(A2) + BNE UNGLEICH DBRA D1,LOOP

Da der CMP-Befehl alle Flags - außer dem X-Flag - beeinflußt, wird er fast ausschließlich mit einer bedingten Verzweigung benutzt. Das erste Beispiel verzweigt dann, wenn im ersten Byte von D3 dezimal 65 steht. Im zweiten Beispiel werden erst einmal die Anfangsadressen von zwei Blöcken festgelegt. Danach benötigt man noch die Länge der Blöcke minus eins, wegen der Funktion des DBcc-Befehls. Dann werden die Blöcke solange miteinander verglichen, bis die Anzahl (D1) gleich -1 ist, oder bis ein Fehler (Ungleichheit) festgestellt worden ist. Die Adressen der „Ungleichheit“ ist dann um eins kleiner als A1 und A2.

Löschen CLR

Dies ist ein recht einfacher Befehl, da er nur den Zieloperaden besitzt. Den Vorteil, den der CLR-Befehl hat, ist seine Geschwindigkeit gegenüber vergleichbaren Konstruktionen. Mit ihm kann man recht einfach so ziemlich alles löschen (Null setzen).

Beispiel:

CLR.L D0 
CLR.W $85000 
CLR.L (A3)

Erweitern EXT

Dieser Befehl wird benutzt um Datenregister vorzeichenrichtig zu erweitern. Dies ist manchmal nötig, wenn z. B. ein Datenregister nur ein Byte oder Wort als Adresse beinhaltet, aber als Indexregister Wort- oder Langwortlänge haben muß.

Als Verarbeitung ist nur Wort und Langwort zugelassen. Ist Wortverarbeitung gewählt, so wird ein Byte vorzeichenrichtig auf Wort erweitert. Ebenso verhält es sich mit Wort auf Langwort. Damit kann man auch durch zweimaliges Anwenden von EXT auf das Datenregister, von Byte auf Langwort erweitern. Erweitert wird, indem das höchstwertigste Bit (Bit 7 oder 15) in die restlichen Stellen (Bit 8-15 oder Bit 16-31) kopiert wird.

Beispiel:

EXT.L D0

	vorher	nachher
D0	XXXX7FD3	00007FD3
D0	XXXX8FD3	11118FD3

EXT.W D4		
	vorher	nachher
D4	12435687	1243FF87
D4	12345678	12340078

Anhand dieser Beispiele können Sie noch einmal die Wirkungsweise von Wort- und Langwortverarbeitung sehen. Die Grenze, an der sich entscheidet, ob mit Eins oder Null erweitert wird, ist die Sieben. Zahlen, die an der entsprechenden Stelle größer sieben sind, werden mit eins erweitert.

Die Negation NEG

Die Negation (Zweierkomplement) dient zum Vorzeichenwechsel von Binärzahlen. Dies erreicht der Befehl durch eine Subtraktion, indem er die Zahl von Null abzieht. Die Flags werden bei dieser Operation entsprechend dem Ergebnis gesetzt.

Um Zahlen, die größer als 32 Bit lang sind, benötigt man den NEGX-Befehl, da dann die Entlehnung der Subtraktion mit berücksichtigt wird. In dem Beispiel sieht man die Wirkung des X-Flags auf die Negation. Das X-Flag wird einfach ebenfalls von Null abgezogen.

Beispiel:

NEG.W DO

vorher	nachher
DO	XXXX4321	XXXXBCDF
NEGX.W (A3)

vorher	nachher
A3 00006000	00006000

X=0
S6000	1AC2	E53E

X=1
S6000	1AC2	E53D

Die Multiplikation MUL

Eine der Stärken des 680OC ist die Multiplikation und Division. Diese beiden Befehle erlauben die Verarbeitung von vorzeichenbehafteten (signed) und vorzeichenlosen (unsigned) Zahlen. Die Schreibweisen dafür sind MULS und MULU. Die Operandengröße ist auf 16 Bit festgelegt. Als Ergebnis erscheint eine 32 Bit Zahl. Die Flags zeigen nach der Operation an, ob das Ergebnis negativ oder null ist.

Beispiel:

MULI #10,D3

	   vorher     nachher
D3     XXXX2525   00074040

MULS (A3),D2
	   vorher     nachher
A3     00001450   00001450
D2     XXXX2837   FFFFE7D9
$1450      FFFF       FFFF

Im ersten Teil erfolgt eine vorzeichenlose Multiplikation mit einer Konstanten. Da diese im dezimalen Zahlensystem angegeben ist, findet man diese auf den ersten Blick im Ergebnis nicht wieder. Das nächste Beispiel ist eine vorzeichenbehaftete Multiplikation mit der Adressierung Adressregister indirekt (ARI). Das Adressregister zeigt auf die Adresse des Multiplikanten. Der Multiplikant hat den Wert -1, da er vorzeichenbehaftet ist. Dies entspricht einer Negation.

Die Division DIV

Auch hier existieren die zwei Versionen vorzeichenlos und -behaftet. Die Division entspricht dem MOD-Befehl in Pascal. Es ist eine ganzzahlige Division mit Rest. Die Operation, die der Befehl ausführt, ist eine Division einer 32 Bit Zahl durch eine 16 Bit Zahl. Das Ergebnis im Datenregister besteht aus 16 Bit (0—15) Divisor und dem Rest (16-31). Bei der Division können zwei außergewöhnliche Fälle auftre-ten. Erstens, es wird versucht durch Null zu teilen, dann wird sofort in eine Exception verzweigt. Zweitens, der Quotient würde größer als 16 Bit werden, dann wird die Operation nicht ausgeführt. Der Divisor und der Dividend bleiben unverändert. Die fehlerhafte Operation wird im V-Flag (Overflow) kenntlich gemacht.

Beispiel:

DIVU #3,03	

     vorher     nachher
D3   0000000E   00020004

Anhand des Beispiels kann man die ganzzahlige Division erkennen. In D3 steht $0E. Dies entspricht Dezimal 14. Teilt man die Zahl durch 3, so ergibt dies vier Rest zwei.

Als letzten Befehl dieser Gruppe haben wir den TST-Befehl.

Testen TST

Dieser Befehl dient zum Prüfen eines Operanden. Der Zieloperand wird mit null verglichen, und danach werden die Flags entsprechend gesetzt. Durch diesen Test kann man eine Aussage bezüglich null machen. Die Wirkungsweise entspricht dem CMPI #0, wobei aber der TST-Befehl schneller ist.

Nun haben wir die Gruppe der arithmetischen Befehle geschafft. Hier ist jetzt die Tabelle mit den Adressierungsarten und den Flags.

In der letzten Ausgabe ist eine Kleinigkeit verloren gegangen. Diese Kleinigkeit ist der Umgang mit der Tabelle. In der Tabelle befindet sich der Syntax nach dem Motorola Standard. Diese Schreibweise ist eine Art „Norm“, der von den meisten Assemblern verstanden wird. In der Beschreibung der Adressierungsarten bedeutet der Schrägstrich / „ohne, außer“. Z. B. bedeutet Alle/An/PCR, daß alle Adressierungsarten, außer Adressregister direkt und Programmzähler relativ zugelassen sind. Ein Komma hingegen bedeutet „und“.

Syntax Flags XNZVC .X Quelle Ziel
ADD.x (ea),Dn ***** B,W,L Alle Dn
ADD.x Dn,(ea) ***** B,W,L Dn Alle/An/PCR
ADDA.x (ea),An ----- W,L Alle An
ADDI.x #Konst,(ea) ***** B,W,L # Alle/An/PCR
ADDQ.x #Konst,(ea) ***** B,W,L # Alle/PCR
ADDX.x Dy, Dx ***** B,W,L Dn Dn
ADDX.x -(Ax),-(Ay) ***** B,W,L -(An) -(An)
CLR.x (ea) XOOOO B,W,L Alle/An/PCR
CMP.x (ea),Dn X**** B,W,L Alle Dn
CMPA.x (ea),An X**** W,L Alle An
CMPI.X #Konst,(ea) X**** B,W,L # Alle/An/PCR
CMPM.x (Ay)+,(Ax)+ X**** B,W,L (An) + (An) +
DIV (ea),Dn X***O Alle/An Dn
EXT.x Dn X**OO W,L Dn
MUL (ea),Dn X***O Alle/Dn Dn
NEG.x (ea) ***** B,W,L Alle/An/PCR
NEGX.x (ea) ***** B,W,L Alle/An/PCR
TST.x (ea) ***OO B,W,L Alle/An/PCR

Bei der Schreibweise der erlaubten Adressierungsarten bedeutet:

ARI alle Adressregister indirekt
abs Absolut kurz und lang
PCR alle Programmcounter relativ
SR Statusregister
CCR Condition Code Register
USP User Stack Pointer

Um alle Adressierungsarten zu ermitteln, kann man jede Quelle mit jedem Ziel verknüpfen.

Der SUB-Befehl hat die gleichen Adressierungsarten wie der ADD-Befehl.

Die nächste Gruppe könnte man auch zu den arithmetischen Befehlen zählen. Da mit ihnen aber keine Binärzahlen bearbeitet werden, hat man sie in eine eigene Gruppe zusammengefaßt.

Die BCD Befehle

BCD bedeutet Binary Coded Dezimal. Dabei wird jede Ziffer Dual, mit der Wertigkeit 8-4-2-1, kodiert. Diese Darstellung der Zahlen findet seine Anwendung hauptsächlich in der Speicherung und Verarbeitung von Gleitkommazahlen.

Beispiel:

      2     5
   %0010 0101

Der Aufbau von Gleitkommazahlen

Es gibt eine ganze Reihe Darstellungsmöglichkeiten der Gleitkommazahlen.

Ich will Ihnen hier aber nur eine vorstellen. Eine Gleitkommazahl besteht aus einem Exponenten und einer Mantisse, (z. B. 1.5E3 = 1500), wobei E (Exponent) gleichbedeutend mit „zehn hoch“ ist. Außerdem werden noch zwei Vorzeichen benötigt, und zwar für Exponent und Mantisse. Als einfachste Lösung könnte man den Exponent als Zahl im Zweierkomplement betrachten, und ein Extrabit für das Vorzeichen der Mantisse reservieren.

Da die Rechengenauigkeit von der Mantisse abhängt, speichert man diese ab der ersten von Null verschiedenen Stelle ab. Den Exponenten muß man dann entsprechend der Anzahl, um die man das Komma verschoben hat, angleichen.

15.345E4 = 1.5345E5

oder

15.345E4 = 0.15345E6

Diese Darstellung nennt man die Normalform, wobei entweder die eine oder andere Darstellung verwendet wird. Benutzt man die zweite Normalform, so wird man die Null nicht mit abspeichern, sondern wie gesagt, die erste von Null verschiedene. So sieht nun das Ergebnis der Zahl 1.5E3 im Speicher aus, wenn der Exponent 7-Bit, das Vorzeichen 1-Bit und die Mantisse 4-Byte (8 Stellen Rechengenauigkeit) hat:

%0000011 1 0001 0101 0000 0000
Exponent VZ Mantisse

Nun wieder zurück zu den BCD-Befehlen. Diese Gruppe besteht aus den drei Befehlen:

ABCD Addition
NBCD Negation 
SBCD Subtraktion

BCD-Addition ABCD

Bei dem Umgang mit diesen Befehlen sollte man folgendes berücksichtigen. Die Verarbeitung erfolgt nur mit Byteverarbeitung, also zwei BCD-Zahlen (= gepackte BCD-Zahlen). Es wird stets das X-Flag mitverarbeitet, und es sollte darauf geachtet werden, daß nur BCD-Zahlen mit dieser Gruppe verarbeitet werden. Eine weitere Besonderheit ist das Z-Bit (Zero), da es nur gelöscht wird, wenn das Ergebnis ungleich null ist. Dies bedeutet, daß man das Z-Flag vor der Operation auf eins setzen muß! Eine BCD-Zahl besteht aus vier Bits, wobei aber nur die Zahlen von 0 bis 9 Dual kodiert werden. Die restlichen Kombinationen werden nicht benötigt. Man nennt sie Pseudotetraden.

Beispiel

	MOVE.B #%01000101,D1 ;45 
	MOVE.B #%00110110,D2 ;36 
	ABCD D2,D1

D1 = %10000001 (81)

Die Addition erfolgt zuerst mit den niederwertigsten vier Bits. Dies ergibt 5 + 6 gleich 11. Da aber bei 10 schon ein Übertrag stattfindet, bleibt eins übrig. Bei der Addition der nächsten BCD-Zahl wird dieser Zwischenübertrag berücksichtigt. Somit ergibt die nächste Teilrechnung: 4+3 + 1 gleich 8. Da sich hier kein Übertrag ergab, wird das C- und X-Flag gelöscht. Das Z-Flag wird nur dann gelöscht, wenn es gesetzt war.

BCD-Subtraktion SBCD

Ebenso wie beim ABCD-Befehl gelten hier die Besonderheiten in Bezug auf die Verarbeitung und der Flags. Nur bedeutet ein gesetztes X-Flag kein Übertrag, sondern ein Borgen. Das hatten wir ja schon beim SUB-Befehl.

Hier ist ein Beispiel für die Verarbeitung von mehr als zwei BCD-Zahlen. Da dies einfacher im Speicher als in den Registern zu lösen ist, nehmen wir einmal an, sie stünden an den entsprechenden Adressen. Als erstes werden zwei Adressregister mit der Adresse des Zahlenendes plus eins geladen, danach löschen wir das X-Flag und setzen das Z-Bit im CCR. Dadurch wird ein vorhandener Übertrag nicht mit subtrahiert und die Null als Ergebnis abfragbar. Nach der Operation befindet sich an der Speicherstelle $1000 das Ergebnis. Außerdem ist das X-Flag gesetzt worden, was bedeutet, daß ein Borgen stattgefunden hat. Dies wiederum bedeutet, das die Zahl negativ ist. Nun gibt es aber keine negativen BCD-Zahlen. Das endgültige Ergebnis wäre somit um diesen Betrag kleiner als die größte mit sechs Ziffern nicht mehr darstellbare Zahl. Subtrahieren sie von dem Ergebnis einfach 1000 000 mit dem Taschenrechner, und sie erhalten das gleiche Ergebnis, als wenn sie es nur mit dem Taschenrechner gerechnet hätten.

Beispiel:

Zahl1: 123456
Zahl2:835933

Im Speicher:

1000	12
1001	34
1002	56

2000	83
2001	59
2002	33

		MOVEA #$1003,A1 
		MOVEA #$2003,A2

		MOVE #4,CCR

		SBCD -(A2),-(A1) 
		SBCD -(A2),-(A1) 
		SBCD -(A2),-(A1)

Nach der Operation

1000	28
1001	75
1002	23

BCD-Negation NBCD

Mit diesem Befehl können Sie das Neuner- bzw. Zehnerkomplement bilden. Ist das X-Flag vor der Operation gesetzt, so wird das Neunerkomplement erzeugt. Auch hier gelten wieder die Besonderheiten der BCD-Befehle.

Mit diesem Befehl kann man negative Zahlen in BCD-Darstellung erzeugen. Wendet man dies auf das Ergebnis des SBCB-Beispiels an, so nimmt das Zehnerkomplement, da die Zahl negiert werden soll.

Beispiel:

		MOVEA #51003,A1 
		MOVE #4,CCR

		NBCD -(A1)
		NBCD -(A1)
		NBCD -(A1)

1000	71
1001	24
1002	77

Da an der Zahl nicht zu erkennen ist, ob es sich um eine negative Zahl handelt, sollte man dies noch irgendwo vermerken.

Die logischen Befehle

Mit dieser Gruppe von Befehlen können Sie logische Verknüpfungen bewerkstelligen; sei es, daß Sie diese nur zum Setzen oder Ausblenden von Bits benutzen oder um Boolsche Ergebnisse berechnen zu wollen. Zu den Bool-schen Operationen gehören:

Das Und (AND)

Mit dem AND-Befehl kann man zwei Operanden miteinander „verunden“. Dieses Verunden findet bitweise statt. Die Flags werden nach der Operation dem Ergebnis entsprechend gesetzt oder gelöscht. Das bitweise verunden stellt man mit einer Wahrheitstabelle dar. Eines der wichtigsten Befehle ist das verunden einer Konstanten mit dem CCR, bzw. dem SR. Bei der BCD-Subtraktion hatten wir den Befehl MOVE #4,CCR. Dadurch wurden alle Flags gelöscht und das Z-Flag gesetzt. Will man aber nur ein oder mehrere Flags gezielt löschen und den Rest unbeeinflußt lassen, so kann man dies mit der AND-Verknüpfung machen.

Syntax Flags XNZVC .X Quelle Ziel
ABCD Dy,Dx UU* Dn
ABCD -(Ay),-(Ax) UU* -(An)
SBCD Dy,Dx UU* Dn
SBCD -(Ay),-(Ax) UU* -(An)
NBCD (ea) UU*
AND.x (ea),Dn -**OO B,W,L Alle/An
AND.x Dn,(ea) -**OO B,W,L Dn
ANDI.x #Kons, (ea) -**OO B, W,L #
NOT.x (ea) -**OO B,W, L

Wahrheitstabelle

B A Q 
0 0 0 
0 1 0 
1 0 0 
1 1 1

Formen von AND

AND
Zwei Operanden

ANDI
Konstante mit Operand

ANDI to CCR
Konstante mit CCR

ANDI to SR
Konstante mit SR (PRIV)

Beispiel:

    D1 %01100101 
ANDI.B #%11001001,D1 
    D1 = %01000001

Immer nur dann, wenn zwei Einsen verundet werden, erscheint eine Eins im Ergebnis. Mit dem AND-Befehl können Sie bestimmte Bits ausblenden (löschen) oder andere Bits abfragen. Alle Operationen, die das oberste Byte des SR verändern können, sind Privilegierte Befehle (Priv), die im Usermode nicht benutzt werden dürfen.

Das Oder (OR)

Ebenso wie mit dem AND-Befehl funktioniert dies mit allen anderen logischen Operationen. Das OR bildet das Gegenstück zum AND. Mit ihm werden bestimmte Bits gesetzt, wobei die restlichen Bits erhalten bleiben. Der OR-Befehl hat die gleichen Formen, wie der AND-Befehl.

Wahrheitstabelle

	B A Q 
	0 0 0 
	0 1 1 
	1 0 1 
	1 1 1

Beispiel:

D1 = %01100101 
ORI.B #%11001001,D1
D1 = %11101101

Das Exclusiv Oder (EOR)

Das Exclusiv Oder wird auch Antivalenz genannt, weil im Ergebnis dann eine Eins erscheint, wenn die zu verknüpfenden Bits ungleich sind. Man kann es auch so interpretieren, daß die Aussage dann wahr (1) ist, wenn nur die eine oder die andere Bedingung wahr ist. Dieser Befehl wird in Zeichenprogrammen benutzt. Dadurch, daß man zwei Speicherbereiche mit EOR verknüpft, werden zwei überlappende Objekte auf dem Bildschirm sichtbar. Auch hier existieren die gleichen Formen wie vorausgegangen.

Wahrheitstabelle

	B A Q 
	0 0 0 
	0 1 1 
	1 0 1 
	1 1 0

Beispiel:

D1 = %01100101 
EORI.B #%11001001, D1 
D1 = %10101100

Das Nicht (NOT)

Der NOT-Befehl bildet einfach das Einerkomplement. Dies macht er, indem er aus einer Eins eine Null und umgekehrt macht.

Wahrheitstabelle

	A Q
	0 1 
	1 0

Beispiel:

D1 = %01100101 
NOT.B D1
D1 = %10011010

Die Tabelle für AND gilt ebenfalls für OR und EOR.

Für diese Ausgabe ist es wohl erst einmal genug. In der nächsten Ausgabe wird wieder ein Programm für Sie dabei sein. Ich hoffe Sie haben jetzt schon einiges gelernt und sich daraus etwas erarbeiten können.


Sven Schüler
Aus: ST-Computer 02 / 1987, Seite 68

Links

Copyright-Bestimmungen: siehe Über diese Seite