|
Opis instrukcji procesora MC68000 |
1. ABCD (.b) | 21. BLT.s,l | 41. DBGE (.l) | 61. LEA (.l) | 81. ROL.b,w,l | 101. SPL (.b) |
2. ADD.b,w,l | 22. BMI.s,l | 42. DBGT (.l) | 62. LINK (.w) | 82. ROR.b,w,l | 102. ST (.b) |
3. ADDA.w,l | 23. BNE.s,l | 43. DBHI (.l) | 63. LSL.b,w,l | 83. ROXL.b,w,l | 103. STOP |
4. ADDI.b,w,l | 24. BPL.s,l | 44. DBLE (.l) | 64. LSR.b,w,l | 84. ROXR.b,w,l | 104. SUB.b,w,l |
5. ADDQ.b,w,l | 25. BRA.s,l | 45. DBLS (.l) | 65. MOVE.b,w,l | 85. RTE | 105. SUBA.w,l |
6. ADDX.b,w,l | 26. BSET (.b,l) | 46. DBLT (.l) | 66. MOVEA.w,l | 86. RTR | 106. SUBI.b,w,l |
7. AND.b,w,l | 27. BSR.s,l | 47. DBMI (.l) | 67. MOVEM.w,l | 87. RTS | 107. SUBQ.b,w,l |
8. ANDI.b,w,l | 28. BTST (.b,l) | 48. DBNE (.l) | 68. MOVEP.w,l | 88. SBCD (.b) | 108. SUBX.b,w,l |
9. ASL.b,w,l | 29. BVC.s,l | 49. DBPL (.l) | 69. MOVEQ (.l) | 89. SCC (.b) | 109. SVC (.b) |
10. ASR.b,w,l | 30. BVS.s,l | 50. DBT (.l) | 70. MULS (.w) | 90. SCS (.b) | 110. SVS (.b) |
11. BCC.s,l | 31. CHK (.w) | 51. DBVC (.l) | 71. MULU (.w) | 91. SEQ (.b) | 111. SWAP (.w) |
12. BCHG (.b,l) | 32. CLR.b,w,l | 52. DBVS (.l) | 72. NBCD (.b) | 92. SF (.b) | 112. TAS (.b) |
13. BCLR (.b,l) | 33. CMP.b,w,l | 53. DIVS (.w) | 73. NEG.b,w,l | 93. SGE (.b) | 113. TRAP |
14. BCS.s,l | 34. CMPA.w,l | 54. DIVU (.w) | 74. NEGX.b,w,l | 94. SGT (.b) | 114. TRAPV |
15. BEQ.s,l | 35. CMPI.b,w,l | 55. EOR.b,w,l | 75. NOP | 95. SHI (.b) | 115. TST.b,w,l |
16. BGE.s,l | 36. CMPM.b,w,l | 56. EORI.b,w,l | 76. NOT.b,w,l | 96. SLE (.b) | 116. UNLK |
17. BGT.s,l | 37. DBCC (.l) | 57. EXG (.l) | 77. OR.b,w,l | 97. SLS (.b) | |
18. BHI.s,l | 38. DBCS (.l) | 58. EXT.w,l | 78. ORI.b,w,l | 98. SLT (.b) | |
19. BLE.s,l | 39. DBEQ (.l) | 59. JMP | 79. PEA (.l) | 99. SMI (.b) | |
20. BLS.s,l | 40. DBF (.l) | 60. JSR | 80. RESET | 100. SNE (.b) | 117. ILLEGAL |
Rozmiar instrukcji podany w nawiasie jest tylko pomocniczy i nie musi być zapisywany.
Instrukcje skoków bezwarunkowych: BRA.s,l (nr 25) i JMP (nr 59).
Instrukcje rozgałęzień: BSR.s,l (nr 27) i JSR (nr 60).
Instrukcje skoków warunkowych: Bcc (nr 11, 14-24, 29-30) i DBcc (nr 37-52).
Instrukcje RESET (nr 80), RTE (nr 85) i STOP (nr 103) stają się dostępne
tylko wtedy, gdy procesor pracuje w trybie "nadzorcy" (Supervisor mode).
Ponadto wyróżnia się następujące instrukcje:
ANDI to CCR, ANDI to SR, EORI to CCR, EORI to SR, MOVE to CCR,
MOVE to SR, MOVE from SR, MOVE USP, ORI to CCR, ORI to SR.
Instrukcje operujące na rejestrze SR i USP, są dostępne tylko w trybie "nadzorcy". Nie dotyczy
to instrukcji MOVE from SR, która jest dostępna również w trybie "użytkownika" (User mode).
Nie można operować na słowie (.W) lub długim słowie (.L), jeśli argumentem instrukcji jest
nieparzysty adres. Dotyczy to np. takich instrukcji, jak: ADD, ADDQ, CLR, CMP, DIVU,
JMP, MOVE, MULU, NOT, SUB, SUBQ, TST.
Założenie: |
e, f, g, h, x = 0-7
v = 1-8
d, n = 0-9, A-F
Re, Rf = rejestr Dx lub Ax |
ADD
ADD.b ARG1,ARG - |
dodaje wartość najmłodszego bajtu z ARG1, do najmłodszego bajtu
w ARG. Wynik dodawania znajdzie się w najmłodszym bajcie ARG. |
beq.s X - skok do X, jeśli wynik =$00.
bne.s X - skok do X, jeśli wynik >$00.
bpl.s X - skok do X, jeśli najstarszy bit w wyniku jest zerem.
bmi.s X - skok do X, jeśli najstarszy bit w wyniku jest jedynką.
SEQ Dx - Dx=$nnnnnnFF, jeśli wynik =$00; w przeciwnym razie Dx=$nnnnnn00.
SNE Dx - Dx=$nnnnnnFF, jeśli wynik >$00; w przeciwnym razie Dx=$nnnnnn00.
SPL Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w wyniku jest zerem;
w przeciwnym razie Dx=$nnnnnn00.
SMI Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w wyniku jest jedynką;
w przeciwnym razie Dx=$nnnnnn00.
Przykłady: |
Dx: nnnnnn01 => ADD.b #$15,Dx => Dx: nnnnnn16
Dx: nnnn0001 => ADD.w #$FFF3,Dx => Dx: nnnnFFF4
Dx: 00000001 => ADD.l #$12345678,Dx => Dx: 12345679 |
ADD Quick
ADDQ.b #v,ARG - |
dodaje wartość #v do najmłodszego bajtu w ARG.
Wynik dodawania znajdzie się w najmłodszym bajcie ARG. |
Instrukcje warunkowe takie same, jak za instrukcją ADD.
Przykłady: |
Dx: nnnnnn01 => ADDQ.b #5,Dx => Dx: nnnnnn06
Dx: nnnn0001 => ADDQ.w #8,Dx => Dx: nnnn0009
Dx: FFFFFFFF => ADDQ.l #3,Dx => Dx: 00000002 |
test Bit and CHanGe
BCHG ARG1,ARG2 - |
sprawdza bit w ARG2, którego numer znajduje się w ARG1. Następnie
bit ten jest zmieniany na przeciwny. Jeśli ARG2 jest rejestrem Dx, to na
każdym jego bicie można wykonać tą operację, podając jako ARG1 wartość
modulo32 ($nnnnnn00-1F/20-3F/40-5F... - bit najmłodszy-najstarszy).
Natomiast, jeśli ARG2 jest komórką pamięci, to operacja może dotyczyć
tylko jej 8-bitów; jako ARG1, należy podać wartość modulo8 ($nnnnnn00-07
/08-0F/10-17... - bit najmłodszy-najstarszy). |
beq.s X - skok do X, jeśli sprawdzany bit był zerem.
bne.s X - skok do X, jeśli sprawdzany bit był jedynką.
SEQ Dx - Dx=$nnnnnnFF, jeśli sprawdzany bit był zerem; w przeciwnym razie Dx=$nnnnnn00.
SNE Dx - Dx=$nnnnnnFF, jeśli sprawdzany bit był jedynką; w przeciwnym razie Dx=$nnnnnn00.
Przykłady: |
Dx: nnnnnnn0 => BCHG #$00,Dx => Dx: nnnnnnn1
Dx: nnnn0nnn => BCHG #$0F,Dx => Dx: nnnn8nnn
Dx: Fnnnnnnn => BCHG #$1F,Dx => Dx: 7nnnnnnn |
test Bit and CLeaR
BCLR ARG1,ARG2 - |
sprawdza bit w ARG2, którego numer znajduje się w ARG1. Następnie
bit ten jest zerowany. Jeśli ARG2 jest rejestrem Dx, to na każdym jego
bicie można wykonać tą operację, podając jako ARG1 wartość modulo32
($nnnnnn00-1F/20-3F/40-5F... - bit najmłodszy-najstarszy).
Natomiast, jeśli ARG2 jest komórką pamięci, to operacja może dotyczyć
tylko jej 8-bitów; jako ARG1, należy podać wartość modulo8 ($nnnnnn00-07
/08-0F/10-17... - bit najmłodszy-najstarszy). |
Instrukcje warunkowe takie same, jak za instrukcją BCHG.
Przykłady: |
Dx: nnnnnnnF => BCLR #$00,Dx => Dx: nnnnnnnE
Dx: nnnn8nnn => BCLR #$0F,Dx => Dx: nnnn0nnn
Dx: Annnnnnn => BCLR #$1F,Dx => Dx: 2nnnnnnn |
BRAnch always
BRA.s,l X - bezwarunkowy skok do etykiety X, znajdującej się w programie głównym.
test Bit and SET
BSET ARG1,ARG2 - |
sprawdza bit w ARG2, którego numer znajduje się w ARG1. Następnie
bit ten jest ustawiany. Jeśli ARG2 jest rejestrem Dx, to na każdym jego
bicie można wykonać tą operację, podając jako ARG1 wartość modulo32
($nnnnnn00-1F/20-3F/40-5F... - bit najmłodszy-najstarszy).
Natomiast, jeśli ARG2 jest komórką pamięci, to operacja może dotyczyć
tylko jej 8-bitów; jako ARG1, należy podać wartość modulo8 ($nnnnnn00-07
/08-0F/10-17... - bit najmłodszy-najstarszy). |
Instrukcje warunkowe takie same, jak za instrukcją BCHG.
Przykłady: |
Dx: nnnnnnn0 => BSET #$00,Dx => Dx: nnnnnnn1
Dx: nnnn0nnn => BSET #$0F,Dx => Dx: nnnn8nnn
Dx: 2nnnnnnn => BSET #$1F,Dx => Dx: Annnnnnn |
Branch to SubRoutine
BSR.s,l X - |
rozgałęzienie do etykiety X, znajdującej się w programie głównym.
Powrót z rozgałęzienia następuje po wykonaniu instrukcji RTS. |
Bit TeST
BTST ARG1,ARG2 - |
sprawdza bit w ARG2, którego numer znajduje się w ARG1. Jeśli ARG2
jest rejestrem Dx, to na każdym jego bicie można wykonać tą operację,
podając jako ARG1 wartość modulo32 ($nnnnnn00-1F/20-3F/40-5F...
- bit najmłodszy-najstarszy). Natomiast, jeśli ARG2 jest komórką pamięci,
to operacja może dotyczyć tylko jej 8-bitów; jako ARG1, należy podać war-
tość modulo8 ($nnnnnn00-07/08-0F/10-17... - bit najmłodszy-najstarszy). |
beq.s X - skok do X, jeśli sprawdzany bit jest zerem.
bne.s X - skok do X, jeśli sprawdzany bit jest jedynką.
SEQ Dx - Dx=$nnnnnnFF, jeśli sprawdzany bit jest zerem; w przeciwnym razie Dx=$nnnnnn00.
SNE Dx - Dx=$nnnnnnFF, jeśli sprawdzany bit jest jedynką; w przeciwnym razie Dx=$nnnnnn00.
CLeaR
CLR.b ARG - zeruje najmłodszy bajt w ARG.
Przykłady: |
Dx: nnnnnnnn => CLR.b Dx => Dx: nnnnnn00
Dx: nnnnnnnn => CLR.w Dx => Dx: nnnn0000
Dx: nnnnnnnn => CLR.l Dx => Dx: 00000000 |
CoMPare
CMP.b ARG1,ARG2 - |
porównuje wartość najmłodszych bajtów z ARG1 i ARG2. Jest to realizo-
wane następująco: najmłodszy bajt z ARG2 jest przenoszony do najmło-
dszego bajtu wirtualnego rejestru Vx. Następnie wartość najmłodszego
bajtu z ARG1 jest odejmowana od najmłodszego bajtu w rejestrze Vx.
Wynik odejmowania znajdzie się w najmłodszym bajcie rejestru Vx. Na
podstawie tego wyniku, są ustawiane odpowiednie kody warunkowe (CC).
Wartość ARG2 nie zmienia się. |
beq.s X - skok do X, jeśli ARG1=ARG2.
bne.s X - skok do X, jeśli ARG1<>ARG2.
bcs.s X lub blt.s X - skok do X, jeśli ARG1>ARG2.
bls.s X lub ble.s X - skok do X, jeśli ARG1>=ARG2.
bhi.s X lub bgt.s X - skok do X, jeśli ARG1<ARG2.
bcc.s X lub bge.s X - skok do X, jeśli ARG1<=ARG2.
bpl.s X - skok do X, jeśli najstarszy bit w wyniku jest zerem.
bmi.s X - skok do X, jeśli najstarszy bit w wyniku jest jedynką.
SEQ Dx - Dx=$nnnnnnFF, jeśli ARG1=ARG2; w przeciwnym razie Dx=$nnnnnn00.
SNE Dx - Dx=$nnnnnnFF, jeśli ARG1<>ARG2; w przeciwnym razie Dx=$nnnnnn00.
SCS Dx lub SLT Dx - Dx=$nnnnnnFF, jeśli ARG1>ARG2; w przeciwnym razie Dx=$nnnnnn00.
SLS Dx lub SLE Dx - Dx=$nnnnnnFF, jeśli ARG1>=ARG2; w przeciwnym razie Dx=$nnnnnn00.
SHI Dx lub SGT Dx - Dx=$nnnnnnFF, jeśli ARG1<ARG2; w przeciwnym razie Dx=$nnnnnn00.
SCC Dx lub SGE Dx - Dx=$nnnnnnFF, jeśli ARG1<=ARG2; w przeciwnym razie Dx=$nnnnnn00.
SPL Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w wyniku jest zerem;
w przeciwnym razie Dx=$nnnnnn00.
SMI Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w wyniku jest jedynką;
w przeciwnym razie Dx=$nnnnnn00.
CoMPare Memory to memory
CMPM.b (Ae)+,(Af)+ - |
porównuje wartość dwóch komórek pamięci, których adresy
znajdują się w rejestrach Ae i Af. Następnie wartość tych
rejestrów jest zwiększana o 1. |
Instrukcje warunkowe takie same, jak za instrukcją CMP,
przyjmując że: ARG1=(Ae)+, ARG2=(Af)+.
DBF - Decrement and Branch until False
(DBRA - Decrement and BRanch Always)
DBF Dx,X - |
odejmuje 1 od dwóch najmłodszych bajtów w rejestrze Dx i sprawdza ich wartość.
Jeśli po odejmowaniu Dx<$nnnnFFFF, to skok do etykiety X jest wykonywany.
W przeciwnym razie jest wykonywana instrukcja następna po DBF, a wartość
rejestru Dx=$nnnnFFFF. Za pomocą instrukcji DBF można tworzyć pętle,
wykonywane od 1 (Dx: nnnn0000) do 65536 (Dx: nnnnFFFF) razy. |
W poniższym przykładzie, instrukcja ta służy do wykonania pętli 8 razy:
moveq #$07,Dx
X: inst1
inst2
.....
DBF Dx,X |
Zawartość pętli pomiędzy etykietą X,
a instrukcją DBF zostanie wykonana 8 razy.
Po wykonaniu pętli 2 najmłodsze bajty w reje-
strze Dx, będą miały wartość $FFFF. |
DBMI - Decrement and Branch until MInus
DBMI Dx,X - działa tak samo, jak instrukcja DBF.
DIVide Unsigned
DIVU ARG1,ARG2 - |
dzieli 32-bitową wartość w ARG2 przez wartość 16-bitową z ARG1 (dwa
starsze bajty w ARG1, są ignorowane). Wynik dzielenia znajdzie się
w 2 najmłodszych, a reszta z dzielenia w 2 najstarszych bajtach ARG2
(argumenty i wynik zapisane w systemie Unsigned). Jeśli wynik prze-
kracza wartość 65535 ($FFFF), to dzielenie nie zostanie wykonane,
a zawartość ARG2 nie zmieni się. Jeśli ARG1=$0000, to pojawi się
systemowy komunikat o błędzie (Software Failure). |
beq.s X - skok do X, jeśli wynik =$0000.
bne.s X - skok do X, jeśli wynik >$0000.
bpl.s X - skok do X, jeśli najstarszy bit w wyniku jest zerem.
bmi.s X - skok do X, jeśli najstarszy bit w wyniku jest jedynką.
bvc.s X - skok do X, jeśli wynik nie jest większy niż 65535 ($FFFF).
bvs.s X - skok do X, jeśli wynik przekracza wartość 65535 ($FFFF).
SEQ Dx - Dx=$nnnnnnFF, jeśli wynik =$0000; w przeciwnym razie Dx=$nnnnnn00.
SNE Dx - Dx=$nnnnnnFF, jeśli wynik >$0000; w przeciwnym razie Dx=$nnnnnn00.
SPL Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w wyniku jest zerem;
w przeciwnym razie Dx=$nnnnnn00.
SMI Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w wyniku jest jedynką;
w przeciwnym razie Dx=$nnnnnn00.
SVC Dx - Dx=$nnnnnnFF, jeśli wynik nie jest większy niż
65535 ($FFFF); w przeciwnym razie Dx=$nnnnnn00.
SVS Dx - Dx=$nnnnnnFF, jeśli wynik przekracza wartość
65535 ($FFFF); w przeciwnym razie Dx=$nnnnnn00.
Przykłady: |
Dx: 000003E8 => DIVU #$0064,Dx => Dx: 0000000A
Dx: 000186A0 => DIVU #$0005,Dx => Dx: 00004E20
Dx: 80000000 => DIVU #$9000,Dx => Dx: 2000E38E |
EXchanGe registers
EXG Re,Rf - |
zamienia zawartością rejestry Re i Rf. Zawartość reje-
stru Re jest przenoszona do rejestru Rf i odwrotnie. |
Przykłady: |
De: 01234567, Df: 98765432 => EXG De,Df => De: 98765432, Df: 01234567
Dx: 01234567, Ax: 98765432 => EXG Dx,Ax => Dx: 98765432, Ax: 01234567
Ae: 01234567, Af: 98765432 => EXG Ae,Af => Ae: 98765432, Af: 01234567 |
sign EXTend
EXT.w De - |
zeruje 8 starszych bitów w 2 najmłodszych bajtach rejestru De, jeśli najmłodszy
bajt w rejestrze De, ma wartość mniejszą od $80. Zapełnia 8 starszych bitów
w 2 najmłodszych bajtach rejestru De, jeśli najmłodszy bajt w rejestrze De,
ma wartość większą od $7F. |
beq.s X - skok do X, jeśli 2 najmłodsze bajty w rejestrze De=$0000 po wykonaniu instrukcji.
bne.s X - skok do X, jeśli 2 najmłodsze bajty w rejestrze De>$0000 po wykonaniu instrukcji.
bpl.s X - skok do X, jeśli najstarszy bit w 2 najmłodszych bajtach
rejestru De, jest zerem po wykonaniu instrukcji.
bmi.s X - skok do X, jeśli najstarszy bit w 2 najmłodszych bajtach
rejestru De, jest jedynką po wykonaniu instrukcji.
SEQ Dx - Dx=$nnnnnnFF, jeśli 2 najmłodsze bajty w rejestrze De=$0000
po wykonaniu instrukcji; w przeciwnym razie Dx=$nnnnnn00.
SNE Dx - Dx=$nnnnnnFF, jeśli 2 najmłodsze bajty w rejestrze De>$0000
po wykonaniu instrukcji; w przeciwnym razie Dx=$nnnnnn00.
SPL Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w 2 najmłodszych bajtach rejestru De,
jest zerem po wykonaniu instrukcji; w przeciwnym razie Dx=$nnnnnn00.
SMI Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w 2 najmłodszych bajtach rejestru De,
jest jedynką po wykonaniu instrukcji; w przeciwnym razie Dx=$nnnnnn00.
EXT.l De - |
zeruje 2 najstarsze bajty w rejestrze De, jeśli 2 najmłodsze bajty rejestru De,
mają wartość mniejszą od $8000. Zapełnia 2 najstarsze bajty w rejestrze De,
jeśli 2 najmłodsze bajty rejestru De, mają wartość większą od $7FFF. |
beq.s X - skok do X, jeśli rejestr De=$00000000 po wykonaniu instrukcji.
bne.s X - skok do X, jeśli rejestr De>$00000000 po wykonaniu instrukcji.
bpl.s X - skok do X, jeśli najstarszy bit w rejestrze De, jest zerem po wykonaniu instrukcji.
bmi.s X - skok do X, jeśli najstarszy bit w rejestrze De, jest jedynką po wykonaniu instrukcji.
SEQ Dx - Dx=$nnnnnnFF, jeśli rejestr De=$00000000 po wykonaniu instrukcji;
w przeciwnym razie Dx=$nnnnnn00.
SNE Dx - Dx=$nnnnnnFF, jeśli rejestr De>$00000000 po wykonaniu instrukcji;
w przeciwnym razie Dx=$nnnnnn00.
SPL Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w rejestrze De, jest zerem
po wykonaniu instrukcji; w przeciwnym razie Dx=$nnnnnn00.
SMI Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w rejestrze De, jest jedynką
po wykonaniu instrukcji; w przeciwnym razie Dx=$nnnnnn00.
Przykłady: |
Dx: nnnnA541 => EXT.w Dx => Dx: nnnn0041
Dx: nnnn86B0 => EXT.w Dx => Dx: nnnnFFB0
Dx: 9AC4614D => EXT.l Dx => Dx: 0000614D
Dx: 253FE050 => EXT.l Dx => Dx: FFFFE050 |
JuMP
JMP X(pc) - skok do etykiety X, znajdującej się w programie głównym.
JMP (Ax) - skok do komórki pamięci, której adres znajduje się w rejestrze Ax.
Jump to SubRoutine
JSR $nnnn(Ax) - |
rozgałęzienie programu do komórki pamięci, o adresie w rejestrze Ax,
przemieszczonym o wartość $nnnn (patrz: Argumenty instrukcji).
Powrót z rozgałęzienia następuje po wykonaniu instrukcji RTS. |
Load Effective Address
LEA X(pc),Ax - |
umieszcza w rejestrze Ax adres etykiety X,
która znajduje się w programie głównym. |
Logical Shift Left
LSL.b #v,De - |
przesuwa zawartość najmłodszego bajtu w rejestrze De, o #v-bitów w lewo.
Bity, które nie mieszczą się w nim, są zerowane i umieszczane na najmłodszych
pozycjach. |
beq.s X - skok do X, jeśli najmłodszy bajt w rejestrze De=$00 po wykonaniu instrukcji.
bne.s X - skok do X, jeśli najmłodszy bajt w rejestrze De>$00 po wykonaniu instrukcji.
bpl.s X - skok do X, jeśli najstarszy bit w najmłodszym bajcie
rejestru De, jest zerem po wykonaniu instrukcji.
bmi.s X - skok do X, jeśli najstarszy bit w najmłodszym bajcie
rejestru De, jest jedynką po wykonaniu instrukcji.
SEQ Dx - Dx=$nnnnnnFF, jeśli najmłodszy bajt w rejestrze De=$00
po wykonaniu instrukcji; w przeciwnym razie Dx=$nnnnnn00.
SNE Dx - Dx=$nnnnnnFF, jeśli najmłodszy bajt w rejestrze De>$00
po wykonaniu instrukcji; w przeciwnym razie Dx=$nnnnnn00.
SPL Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w najmłodszym bajcie rejestru De,
jest zerem po wykonaniu instrukcji; w przeciwnym razie Dx=$nnnnnn00.
SMI Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w najmłodszym bajcie rejestru De,
jest jedynką po wykonaniu instrukcji; w przeciwnym razie Dx=$nnnnnn00.
Przykłady: |
Dx: nnnnnnAB => LSL.b #4,Dx => Dx: nnnnnnB0
Dx: nnnn40E3 => LSL.w #8,Dx => Dx: nnnnE300
Dx: ABCD0123 => LSL.l #5,Dx => Dx: 79A02460 |
Logical Shift Right
LSR.b #v,De - |
przesuwa zawartość najmłodszego bajtu w rejestrze De, o #v-bitów w prawo.
Bity, które nie mieszczą się w nim, są zerowane i umieszczane na najstarszych
pozycjach. |
Instrukcje warunkowe takie same, jak za instrukcją LSL.
Przykłady: |
Dx: nnnnnnAB => LSR.b #4,Dx => Dx: nnnnnn0A
Dx: nnnn40E3 => LSR.w #8,Dx => Dx: nnnn0040
Dx: ABCD0123 => LSR.l #5,Dx => Dx: 055E6809 |
MOVE
MOVE.b ARG1,ARG2 - |
przenosi najmłodszy bajt z ARG1 do najmłodszego
bajtu w ARG2 (wartość ARG1 nie zmienia się). |
beq.s X - skok do X, jeśli najmłodszy bajt w ARG1=$00.
bne.s X - skok do X, jeśli najmłodszy bajt w ARG1>$00.
bpl.s X - skok do X, jeśli najstarszy bit w najmłodszym bajcie ARG1 jest zerem.
bmi.s X - skok do X, jeśli najstarszy bit w najmłodszym bajcie ARG1 jest jedynką.
SEQ Dx - Dx=$nnnnnnFF, jeśli najmłodszy bajt w ARG1=$00; w przeciwnym razie Dx=$nnnnnn00.
SNE Dx - Dx=$nnnnnnFF, jeśli najmłodszy bajt w ARG1>$00; w przeciwnym razie Dx=$nnnnnn00.
SPL Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w najmłodszym bajcie
ARG1 jest zerem; w przeciwnym razie Dx=$nnnnnn00.
SMI Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w najmłodszym bajcie
ARG1 jest jedynką; w przeciwnym razie Dx=$nnnnnn00.
Jeśli do rejestru Ax jest przenoszone słowo (.W), to wartość najstarszego
bitu tego słowa jest ustawiana w 16-najstarszych bitach rejestru Ax.
Przykłady: |
Dx: nnnnnnnn => MOVE.b #$12,Dx => Dx: nnnnnn12
Dx: nnnnnnnn => MOVE.w #$1234,Dx => Dx: nnnn1234
Ax: nnnnnnnn => MOVE.w #$1234,Ax => Ax: 00001234
Ax: nnnnnnnn => MOVE.w #$8234,Ax => Ax: FFFF8234
Dx: nnnnnnnn => MOVE.l #$12345678,Dx => Dx: 12345678 |
MOVE Multiple registers
MOVEM.l De-Df,-(Ax) - |
przenosi zawartość rejestrów od Df do De (e<f), do komórek
pamięci, których adresy zmniejszają się o 4, wraz z wartością
rejestru Ax. |
Na przykład:
MOVEM.l D0-D7,-(Ax) jest równoznaczne z wykonaniem 8 instrukcji, w takiej kolejności:
1. MOVE.l D7,-(Ax); 2. MOVE.l D6,-(Ax); 3. MOVE.l D5,-(Ax); 4. MOVE.l D4,-(Ax);
5. MOVE.l D3,-(Ax); 6. MOVE.l D2,-(Ax); 7. MOVE.l D1,-(Ax); 8. MOVE.l D0,-(Ax).
MOVEM.l De-Df/Ag-Ah,-(Ax) - |
przenosi zawartość rejestrów od Ah do Ag (g<h) oraz
od Df do De (e<f), do komórek pamięci, których adresy
zmniejszają się o 4, wraz z wartością rejestru Ax. |
Na przykład:
MOVEM.l D0-D7/A0-A3,-(Ax) jest równoznaczne z wykonaniem 12 instrukcji, w takiej kolejności:
1. MOVE.l A3,-(Ax); 2. MOVE.l A2,-(Ax); 3. MOVE.l A1,-(Ax); 4. MOVE.l A0,-(Ax);
5. MOVE.l D7,-(Ax); 6. MOVE.l D6,-(Ax); 7. MOVE.l D5,-(Ax); 8. MOVE.l D4,-(Ax);
9. MOVE.l D3,-(Ax); 10. MOVE.l D2,-(Ax); 11. MOVE.l D1,-(Ax); 12. MOVE.l D0,-(Ax).
MOVE Quick
MOVEQ #$dd,De - |
przenosi wartość $dd do rejestru De. Jeśli $dd<$80, to 3 najstarsze bajty
w rejestrze De są zerowane ($000000dd). Jeśli $dd>7F, to 3 najstarsze
bajty w rejestrze De zapełniają się ($FFFFFFdd). |
beq.s X - skok do X, jeśli $dd=$00.
bne.s X - skok do X, jeśli $dd>$00.
bpl.s X - skok do X, jeśli najstarszy bit w $dd jest zerem.
bmi.s X - skok do X, jeśli najstarszy bit w $dd jest jedynką.
SEQ Dx - Dx=$nnnnnnFF, jeśli $dd=$00; w przeciwnym razie Dx=$nnnnnn00.
SNE Dx - Dx=$nnnnnnFF, jeśli $dd>$00; w przeciwnym razie Dx=$nnnnnn00.
SPL Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w $dd jest zerem; w przeciwnym razie Dx=$nnnnnn00.
SMI Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w $dd jest jedynką; w przeciwnym razie Dx=$nnnnnn00.
Przykłady: |
Dx: nnnnnnnn => MOVEQ #$0D,Dx => Dx: 0000000D
Dx: nnnnnnnn => MOVEQ #$66,Dx => Dx: 00000066
Dx: nnnnnnnn => MOVEQ #$85,Dx => Dx: FFFFFF85
Dx: nnnnnnnn => MOVEQ #$C4,Dx => Dx: FFFFFFC4 |
MULtiply Unsigned
MULU ARG1,ARG2 - |
mnoży 16-bitową wartość w ARG2 przez wartość 16-bitową z ARG1
(dwa starsze bajty w obydwu argumentach, są ignorowane). Wynik
mnożenia znajdzie się w 32-bitach ARG2 (argumenty i wynik zapisane
w systemie Unsigned). |
beq.s X - skok do X, jeśli wynik =$00000000.
bne.s X - skok do X, jeśli wynik >$00000000.
bpl.s X - skok do X, jeśli najstarszy bit w wyniku jest zerem.
bmi.s X - skok do X, jeśli najstarszy bit w wyniku jest jedynką.
SEQ Dx - Dx=$nnnnnnFF, jeśli wynik =$00000000; w przeciwnym razie Dx=$nnnnnn00.
SNE Dx - Dx=$nnnnnnFF, jeśli wynik >$00000000; w przeciwnym razie Dx=$nnnnnn00.
SPL Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w wyniku jest zerem;
w przeciwnym razie Dx=$nnnnnn00.
SMI Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w wyniku jest jedynką;
w przeciwnym razie Dx=$nnnnnn00.
Przykłady: |
Dx: nnnn003C => MULU #$000D,Dx => Dx: 0000030C
Dx: nnnn1FFF => MULU #$0046,Dx => Dx: 0008BFBA
Dx: nnnnFFFF => MULU #$FFFF,Dx => Dx: FFFE0001 |
No OPeration
NOP - |
zajmuje czas procesora nie wykonując żadnej operacji.
Kod szesnastkowy tej instrukcji, to: $4E71. |
logical complement
NOT.b ARG - zamienia każdy bit na przeciwny, w najmłodszym bajcie ARG (negacja).
beq.s X - skok do X, jeśli najmłodszy bajt w ARG=$00 po negacji.
bne.s X - skok do X, jeśli najmłodszy bajt w ARG>$00 po negacji.
bpl.s X - skok do X, jeśli najstarszy bit w najmłodszym bajcie ARG jest zerem po negacji.
bmi.s X - skok do X, jeśli najstarszy bit w najmłodszym bajcie ARG jest jedynką po negacji.
SEQ Dx - Dx=$nnnnnnFF, jeśli najmłodszy bajt w ARG=$00
po negacji; w przeciwnym razie Dx=$nnnnnn00.
SNE Dx - Dx=$nnnnnnFF, jeśli najmłodszy bajt w ARG>$00
po negacji; w przeciwnym razie Dx=$nnnnnn00.
SPL Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w najmłodszym bajcie ARG
jest zerem po negacji; w przeciwnym razie Dx=$nnnnnn00.
SMI Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w najmłodszym bajcie ARG
jest jedynką po negacji; w przeciwnym razie Dx=$nnnnnn00.
Przykłady: |
Dx: nnnnnn01 => NOT.b Dx => Dx: nnnnnnFE
Dx: nnnn8000 => NOT.w Dx => Dx: nnnn7FFF
Dx: 0ABCDEF1 => NOT.l Dx => Dx: F543210E |
Push Effective Address
PEA X(pc) - |
umieszcza w rejestrze A7 adres etykiety X,
która znajduje się w programie głównym. |
ROtate Left
ROL.b #v,De - |
przesuwa zawartość najmłodszego bajtu w rejestrze De, o #v-bitów w lewo.
Bity, które nie mieszczą się w nim, są umieszczane na najmłodszych pozycjach. |
Instrukcje warunkowe takie same, jak za instrukcją LSL.
Przykłady: |
Dx: nnnnnnAB => ROL.b #4,Dx => Dx: nnnnnnBA
Dx: nnnn40E3 => ROL.w #8,Dx => Dx: nnnnE340
Dx: ABCD0123 => ROL.l #5,Dx => Dx: 79A02475 |
ROtate Right
ROR.b #v,De - |
przesuwa zawartość najmłodszego bajtu w rejestrze De, o #v-bitów w prawo.
Bity, które nie mieszczą się w nim, są umieszczane na najstarszych pozycjach. |
Instrukcje warunkowe takie same, jak za instrukcją LSL.
Przykłady: |
Dx: nnnnnnAB => ROR.b #4,Dx => Dx: nnnnnnBA
Dx: nnnn40E3 => ROR.w #8,Dx => Dx: nnnnE340
Dx: ABCD0123 => ROR.l #5,Dx => Dx: 1D5E6809 |
ReTurn from Subroutine
RTS - |
zakończenie wykonywania programu lub powrót z rozgałęzienia BSR lub JSR.
Instrukcją tą musi być zakończony każdy program. W przeciwnym razie
zostanie wyświetlony systemowy komunikat o błędzie (Software Failure).
Kod szesnastkowy tej instrukcji, to: $4E75. |
Set False
SF ARG - zeruje najmłodszy bajt w ARG.
Przykład: Dx: nnnnnnnn => SF Dx => Dx: nnnnnn00
Set True
ST ARG - zapełnia najmłodszy bajt w ARG.
Przykład: Dx: nnnnnnnn => ST Dx => Dx: nnnnnnFF
SUBtract
SUB.b ARG1,ARG2 - |
odejmuje wartość najmłodszego bajtu z ARG1 od najmłodszego bajtu
Wynik odejmowania znajdzie się w najmłodszym bajcie ARG2.
Na podstawie tego wyniku, są ustawiane odpowiednie kody warunkowe
(CC). W ten sposób następuje porównanie wartości, jakie obydwa
argumenty miały przed odejmowaniem. |
Instrukcje warunkowe takie same, jak za instrukcją CMP.
Przykłady: |
Dx: nnnnnn78 => SUB.b #$28,Dx => Dx: nnnnnn50
Dx: nnnnF045 => SUB.w #$10A2,Dx => Dx: nnnnDFA3
Dx: 0000000F => SUB.l #$00000010,Dx => Dx: FFFFFFFF |
SUBtract Quick
SUBQ.b #v,ARG - |
odejmuje wartość #v od najmłodszego bajtu w ARG. Wynik odejmowania
znajdzie się w najmłodszym bajcie ARG. Na podstawie tego wyniku, są
ustawiane odpowiednie kody warunkowe (CC). W ten sposób następuje
porównanie wartości, jakie obydwa argumenty miały przed odejmowaniem. |
Instrukcje warunkowe takie same, jak za instrukcją CMP,
przyjmując że: ARG1=#v, ARG2=ARG.
Przykłady: |
Dx: nnnnnn06 => SUBQ.b #5,Dx => Dx: nnnnnn01
Dx: nnnnF029 => SUBQ.w #8,Dx => Dx: nnnnF021
Dx: 00000001 => SUBQ.l #3,Dx => Dx: FFFFFFFE |
SWAP register words
SWAP De - przesuwa zawartość rejestru De o 16-bitów.
beq.s X - skok do X, jeśli rejestr De=$00000000.
bne.s X - skok do X, jeśli rejestr De>$00000000.
bpl.s X - skok do X, jeśli najstarszy bit w rejestrze De jest zerem po przesunięciu.
bmi.s X - skok do X, jeśli najstarszy bit w rejestrze De jest jedynką po przesunięciu.
SEQ Dx - Dx=$nnnnnnFF, jeśli rejestr De=$00000000; w przeciwnym razie Dx=$nnnnnn00.
SNE Dx - Dx=$nnnnnnFF, jeśli rejestr De>$00000000; w przeciwnym razie Dx=$nnnnnn00.
SPL Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w rejestrze De jest zerem
po przesunięciu; w przeciwnym razie Dx=$nnnnnn00.
SMI Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w rejestrze De jest jedynką
po przesunięciu; w przeciwnym razie Dx=$nnnnnn00.
Przykład: Dx: ABCD1234 => SWAP Dx => Dx: 1234ABCD.
TeST operand
TST.b ARG - sprawdza najmłodszy bajt w ARG.
beq.s X - skok do X, jeśli najmłodszy bajt w ARG=$00.
bne.s X - skok do X, jeśli najmłodszy bajt w ARG>$00.
bpl.s X - skok do X, jeśli najstarszy bit w najmłodszym bajcie ARG jest zerem.
bmi.s X - skok do X, jeśli najstarszy bit w najmłodszym bajcie ARG jest jedynką.
SEQ Dx - Dx=$nnnnnnFF, jeśli najmłodszy bajt w ARG=$00; w przeciwnym razie Dx=$nnnnnn00.
SNE Dx - Dx=$nnnnnnFF, jeśli najmłodszy bajt w ARG>$00; w przeciwnym razie Dx=$nnnnnn00.
SPL Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w najmłodszym bajcie
ARG jest zerem; w przeciwnym razie Dx=$nnnnnn00.
SMI Dx - Dx=$nnnnnnFF, jeśli najstarszy bit w najmłodszym bajcie
ARG jest jedynką; w przeciwnym razie Dx=$nnnnnn00.
take ILLEGAL instruction trap
ILLEGAL - |
nieobsługiwana ("nielegalna") instrukcja. Jej wykonanie powoduje wystąpienie
wewnętrznego wyjątku procesora nr 4 (Illegal Instruction), co skutkuje wyświe-
tleniem systemowego komunikatu o błędzie (Software Failure).
Kod szesnastkowy tej instrukcji, to: $4AFC. |