ADD.A #5, +1 Addiere 5 zur 3Verwendet man den Modifier .B, dann passiert etwas seltsames:
DAT #3, #4
ADD.B #5, +1 Addiere 1 zur 4Nach der Ausführung:
DAT #3, #4
ADD.B #5, +1 Addiere 1 zur 4Der A-Operand #5 bewirkt, daß als Quelle die selbe Zelle verwendet wird (A-Pointer = 0, siehe Adressierungsarten), jedoch der Wert des B-Feldes zum jeweiligen Feld des Zieles addiert wird. Im Ziel wird hier ebenfalls das B-Feld angesprochen.
DAT #3, #5
ADD.F #5, +1Das Ergebnis ist ein DAT #8, #5, weil als Quelle mit #5 die Speicherzelle mit dem ADD-Befehl adressiert wurde. Als nächstes kommt der Modifier .BA:
DAT #3, #4
ADD.BA #5, +1 1 zur 3 hinzuaddierenDann wäre noch der Modifier .X, er funktioniert wie .F, jedoch werden die Felder verkreuzt, als wäre es .AB und .BA zugleich. Versuche vorherzusagen, was folgender ADD bewirkt:
DAT #3, #4
ADD.X +1, #1Wenn du glaubst, das Ergebnis sei eine Änderung im DAT, dann hast du übersehen, daß die Adress-Modi in diesem Beispiel anders angeschrieben sind, als in den vorigen. Das Ergebnis ist ADD.X +5, #4, denn als Quelle wurde +1 angegeben, als Ziel eine immediate-Adresse (b-Pointer = 0), wodurch 3 und 4 kreuzweise zu den Werten des ADD addiert wurden.
DAT #3, #4
Opcode | A-Mode | B-Mode | Default |
---|---|---|---|
DAT,NOP | #$@<>*{}& | #$@<>*{}& | F |
MOV,CMP,SEQ,SNE | # | #$@<>*{}& | AB |
MOV,CMP,SEQ,SNE | $@<>*{}& | # | B |
MOV,CMP,SEQ,SNE | $@<>*{}& | $@<>*{}& | I |
ADD,SUB,MUL,DIV,MOD | # | #$@<>*{}& | AB |
ADD,SUB,MUL,DIV,MOD | $@<>*{}& | # | B |
ADD,SUB,MUL,DIV,MOD | $@<>*{}& | $@<>*{}& | F |
SLT,LDP,STP,PSH | # | #$@<>*{}& | AB |
SLT,LDP,STP,PSH | $@<>*{}& | #$@<>*{}& | B |
JMP,JSR,SPL,JMZ,JMN,DJN | #$@<>*{}& | #$@<>*{}& | B |
BRK,RET,POP | #$@<>*{}& | #$@<>*{}& | B |