VOBSAH           DalÓÉ           PŇedeÓlej
 
logo

Mc Instrukce procesorů 680xx Mc

Hned na úvod uvedu na správnou míru některý skutečnosti. Tak zaprvý, nejsem žádnej koder, takže neručim zato, že všechno dále uvedený je na 100% správně. Všechy informace, který jsou obsaženy v tomto článku jsou převzatý především z dokumentace od skvělýho assembleru PhxAss v4.0 (doporučuju si ho pořídit - je FREEWARE a umí toho opravdu horně) a místama i ze skvělý knížky "Assembler 68000" od Vlastimila Krále (vydal AMIGA Info v r. 1994) - to kvůli přesnýmu překladu některých výrazů obsažených v textu.

Tož si to teda vyčvachtejte do umdlení a případný chybičky mi laskavě odpusťte (a nebo ještě líp - napište mi a já sepíšu nějakej ten "upgrade").

PS. Tu a tam jsem zanechal nějakej tan anglickej výraz. Proč? Why? Uhm, I'm not sure - I'm in lazy times & crazy evil's school hard work ussage...
(Dobrej blábol, co?)

Bye, children!                    

E.N.I.F.          



Základní formát zápisu programů v assembleru:

[<návěští>] <operační kód> <operandy>
Příklad:
ADDQ.B #23,D0
semskoc: MOVE.L D0, D4
TST.L D4

Standardní adresovací mody MC68000:

V této části jsou použity následující konvence:
         
EA - Effective address = "místo, kam se skočí"
An - libovolný adresový registr (např. A3)
Dn - jakýkoli datový registr (např. D0)
Xn.SIZE  - udává index registr n (datový nebo adresový) a velikost indexu (W pro Word nebo L pro Longword)
PC - čítač instrukcí (Program counter)
dn - hodnota posunutí, n bitů široká
( ) - označení nepřímého (indirect) adresování registrem
 
  Přímé adresování datových registrů
Zápis:            Dn
Provede se jako:  EA = Dn
Doplňkové wordy:  0         (Extension Words - ten překlad nic moc, sorry!)

 Přímé adresování adresových registerů
Zápis:            An
Provede se jako:  EA = An
Doplňkové wordy:  0

 Nepřímé adresování adresovým registrem (ARI)
Zápis:            (An)
Provede se jako:  EA = (An)
Doplňkové wordy:  0

 ARI s postinkrementací
Zápis:            (An)+
Provede se jako:  EA = (An), An = An + SIZE
Doplňkové wordy:  0

 ARI s predekrementací
Zápis:            -(An)
Provede se jako:  An = An - SIZE, EA = (An)
Doplňkové wordy:  0

 ARI s posunutím (16-Bitů)
Zápis:            (d16,An)  nebo  d16(An)
Provede se jako:  EA = (An) + d16
Doplňkové wordy:  1

 ARI s posunutím a indexem (posun 8-Bitový)
Zápis:            (d8,An,Xn.SIZE)  nebo  d8(An,Xn.SIZE)
Provede se jako:  EA = (An) + (Xn) + d8
Doplňkové wordy:  1

 PC nepřímé (relativní) adresování s posunutím (16-Bitový posun)
Zápis:            (d16,PC)  nebo  d16(PC)
Provede se jako:  EA = (PC) + d16
Doplňkové wordy:  1

 PC nepřímé (relativní) s indexem (8-Bitový posun)
Zápis:            (d8,PC,Xn.SIZE)  nebo  d8(PC,Xn.SIZE)
Provede se jako:  EA = (PC) + (Xn) + d8
Doplňkové wordy:  1

 Absolutní krátké adresování
Zápis:           (xxx)[.W]  nebo  xxx[.W]
Provede se jako: zadaná adresa (EA) 
Doplňkové wordy: 1

 Absolutní dlouhé adresování
Zápis:            (xxx)[.L]  nebo  xxx[.L]
Provede se jako:  zadaná adresa (EA)
Doplňkové wordy:  2

 Přímé adresování dat (konstant)
Zápis:            #xxx
Provede se jako:  zadaný operand
Doplňkové wordy:  1 nebo 2

Rozšířené adresovací módy MC68000 a vejš

 V této části jsou použity následující konvence:

EA - Effective address
An - adresový registr n
Dn - datový registr n
Xn.SIZE*SCALE  - označuje index registr n(datový nebo adresový), velikost indexu (W nebo L), a měřítko (scale factor) (1, 2, 4 nebo 8)
PC - čítač instrukcí (Program counter)
dn - hodnota posunutí, n bitů široká
bd - bázové posunutí (Base displacement)
od - Outer displacement
( ) - označuje nepřímé adresování registrem
[ ] - označuje napřímou adresu v paměti
 
 ARI s indexem (rozšíření standardního formátu)
Zápis:            (d8,An,Xn.SIZE*SCALE)
Provede se jako:  EA = (An) + (Xn)*SCALE + d8
Doplňkové wordy:  1

 ARI s indexem a bázovým posunutím
Zápis:            (bd,An,Xn.SIZE*SCALE)
Provede se jako:  EA = (An) + (Xn)*SCALE + bd
Doplňkové wordy:  1, 2 nebo 3

 Nepřímé adresování paměti s postidexem (Memory Indirect Postindexed) (?#!)
Zápis:            ([bd,An],Xn.SIZE*SCALE,od)
Provede se jako:  EA = (bd + An) + Xn.SIZE*SCALE + od
Doplňkové wordy:  1, 2, 3, 4 nebo 5

 Nepřímé adresování paměti s preindexem (Memory Indirect Preindexed)
Zápis:            ([bd,An,Xn.SIZE*SCALE],od)
Provede se jako:  EA = (bd + An + Xn.SIZE*SCALE) + od
Doplňkové wordy:  1, 2, 3, 4 nebo 5

 PC nepřímé (relativní) s indexem (rozšíření standardního formátu)
Zápis:           (d8,PC,Xn.SIZE*SCALE)
Provede se jako: EA = (PC) + (Xn)*SCALE + d8
Doplňkové wordy:  1

 PC relativní s indexem a bázovým posunutím
Zápis:            (bd,PC,Xn.SIZE*SCALE)
Provede se jako:  EA = (PC) + (Xn)*SCALE + bd
Doplňkové wordy:  1, 2 nebo 3

 PC relativní adresování paměti s postindexem (PC Mem. Indirect Postindexed)
Zápis:            ([bd,PC],Xn.SIZE*SCALE,od)
Provede se jako:  EA = (bd + PC) + Xn.SIZE*SCALE + od
Doplňkové wordy:  1, 2, 3, 4 nebo 5

 PC relativní adres. paměti s preindexem (PC Mem. Indirect Preindexed)
Zápis:            ([bd,PC,Xn.SIZE*SCALE],od)
Provede se jako:  EA = (bd + An + Xn.SIZE*SCALE) + od
Doplňkové wordy:  1, 2, 3, 4 nebo 5

68020+ Suppressed Registers

Nepřímé adresování paměti s post/preindexedem umožňuje programátorovi *suppress* opravdu cokoli. To znamená, že můžete například změnit standardní formát ([bd,An,Xn.SIZE*SCALE],od) do následujících formátů:

Instrukce MC 68000 (podporované PhxAssemblerem)

Celočíselné instrukce pro všechny procesory
Celočíselné instrukce jen pro 010,020,030,040,060
Celočíselné instrukce jen pro 020,030,040,060
Celočíselné instrukce jen pro 040,060
Celočíselné instrukce pouze pro 68060
Řídící registry MOVEC
FPU instrukce 881,882,040,060
FPU instrukce jen pro 040,060
Instrukce 68851 PMMU
Instrukce 68030 PMMU
Instrukce 68040/060 PMMU  

Celočíselné instrukce (68000,68010,68020,68030,68040,68060)

ABCD        Dy,Dx                      sčítání BCD čísel
ABCD        -(Ay),-(Ax)
ADD.x       <ea>,Dn                    sčítání
ADD.x       Dn,<ea>
ADDA.x      <ea>,An                    sčítání adres
ADDI.x      #<data>,<ea>               přičítání konstanty
ADDQ.x      #<data>,<ea>               rychlé přičítání konstanty
ADDX.x      Dy,Dx                      sčítání s přenosovým bitem
ADDX.x      -(Ay),-(Ax)
AND.x       <ea>,Dn                    Logické AND
AND.x       Dn,<ea>
ANDI.x      #<data>,<ea>               AND s konstantou
ANDI.x      #<data>,CCR                AND s konstantou a CC (Condition
                                         Codes Register)
ANDI.x      #<data>,SR                 AND s konstantou a status registrem
ASL/ASR.x   Dx,Dy                      aritmetický posun vlevo/vpravu
ASL/ASR.x   #<data>,Dy
ASL/ASR     <ea>
B<cc>.x     <label>                    podmíněný skok
BCHG        Dn,<ea>                    test bitu a jeho změna (překlopení)
BCHG        #<data>,<ea>
BCLR        Dn,<ea>                    test bitu a jeho vynulování
BCLR        #<data>,<ea>
BRA.x       <label>                    skok vždy
BSET        Dn,<ea>                    test bitu a jeho nastavení (-> 1)
BSET        #<data>,<ea>
BSR.x       <label>                    skok na podprogram
BTST.x      Dn,<ea>                    test hodnoty bitu
BTST.x      #<data>,<ea>
CHK.x       <ea>,Dn                    test registru vůči hranici 0 a druhé
                                       hranici
CLR.x       <ea>                       vynulování operandu
CMP.x       <ea>,Dn                    porovnání
CMPA.x      <ea>,An                    porovnání adresy
CMPI.x      #<data>,<ea>               porovnání s konstantou
CMPM.x      (Ay)+,(Ax)+                porovnání dvou dat v paměti
DB<cc>      Dn,<label>                 porovnání, dekrementace, a skok
DIVS        <ea>,Dn                    dělení se znaménkem
DIVU        <ea>,Dn                    dělení bez znaménka
EOR.x       Dn,<ea>                    logický EOR
EORI.x      #<data>,<ea>               EOR s konstantou
EORI.x      #<data>,CCR                EOR skonstantou a Cond. Codes
EORI.x      #<data>,SR                 EOR skonstantou a status registrem
EXG         Rn,Rm                      prohození obsahů registrů
EXT.x       Dn                         znaménkové rozšíření
ILLEGAL                                vyvolá výjimku Illegal Instruction
JMP         <ea>                       skok
JSR         <ea>                       skok do podprogramu
LEA         <ea>,An                    nahrání adresy
LINK        An,#<displacement>         vytvoří lokální zásobník
LSL/LSR.x   Dx,Dy                      logický posun vlevo/vpravo
LSL/LSR.x   #<data>,Dy
LSL/LSR     <ea>
MOVE.x      <ea>,<ea>                  zkopírování dat
MOVEA.x     <ea>,An                    kopie do adresového registru
MOVE        <ea>,CCR                   kopie do Condition Codes
MOVE        <ea>,SR                    kopie do status registru
MOVE        SR,<ea>                    zkopírování status registru
MOVE        USP,An                     zkopírování User Stack Pointeru
MOVE        An,USP
MOVEM.x     <register list>,<ea>       zkopírování skupiny registrů
MOVEM.x     <ea>,<register list>
MOVEP.x     Dx,(d,Ay)                  zkopírování dat na periférie (ne 68060!)
MOVEP.x     (d,Ay),Dx
MOVEQ       #<data>,Dn                 rychlé zkopírování
MULS        <ea>,Dn                    násobení se znaménkem
MULU        <ea>,Dn                    násobení bez znaménka
NBCD        <ea>                       negace BCD čísla
NEG.x       <ea>                       negace
NEGX.x      <ea>                       negace s bitem X
NOP                                    žádná operace
NOT.x       <ea>                       logická negace
OR.x        <ea>,Dn                    logické OR
OR.x        Dn,<ea>
ORI.x       #<data>,<ea>               OR s konstantou
ORI.x       #<data>,CCR                OR s konstantou a CC
PEA         <ea>                       uložení adresy
RESET                                  reset periférií
ROL/ROR.x   Dx,Dy                      rotace vlevo/vpravo
ROL/ROR.x   #<data>,Dy
ROL/ROR     <ea>
ROXL/ROXR.x Dx,Dy                      rotace vlevo/vpravo s bitem X
ROXL/ROXR.x #<data>,Dy
ROXL/ROXR   <ea>
RTE                                    návrat z výjimky
RTR                                    návrat z podprogramu (+ obnovení CC)
RTS                                    návrat z podprogramu
SBCD        Dx,Dy                      odčítání BCD čísel
SBCD        -(Ax),-(Ay)
S<cc>       <ea>                       podmíněné nastavení bytu
STOP        #<data>                    nahrání Status Registru a zastavení
SUB.x       <ea>,Dn                    odčítání
SUB.x       Dn,<ea>
SUBA.x      <ea>,An                    odčítání adres
SUBI.x      #<data>,<ea>               odečtení konstanty
SUBQ.x      #<data>,<ea>               rychlé odečtení konstanty
SUBX.x      Dx,Dy                      odečtení se znaménkem
SWAP        Dn                         prohození slov v registru
TAS         <ea>                       test a nastavení operandu (bit 7)
TRAP        #<vector>                  vyvolání výjimky
TRAPV                                  výjimka při nastaveném příznaku V
TST.x       <ea>                       test operandu na nulu
UNLK        An                         zruší lokální zásobník

Integer Condition Codes <cc>

CC (HS)  carry clear (higher or same)  CS (LO)  carry set (lower)
EQ       equal                         F        never true
GE       greater or equal              GT       greater than
HI       higher                        LE       less or equal
LS       less or same                  LT       less than
MI       negative                      NE       not equal
PL       positive                      T        always true
VC       overflow clear                VS       overflow set

Integer Instructions (68010,68020,68030,68040,68060)

BKPT        #<data>                    Breakpoint
MOVE        CCR,<ea>                   Zkopírování Condition Code registru
MOVEC       Rc,Rn                      Zkopírování Control registrů
MOVEC       Rn,Rc
MOVES       Rn,<ea>                    Kopie adresového prostoru
MOVES       <ea>,Rn
RTD         #<displacement>            Návrat a dealokace

Integer Instructions (68020,68030,68040,68060)

BFCHG       <ea>{offset:width}         Test bit. pole a překlopení
BFCLR       <ea>{offset:width}         Test bit. pole a vynulování
BFEXTS      <ea>{offset:width},Dn    Extract bit. pole signed
BFEXTU      <ea>{offset:width},Dn    Extract bit. pole unsigned
BFFFO       <ea>{offset:width},Dn      Najdi první nast. v bit. poli
BFINS       Dn,<ea>{offset:width}      Vlož bitové pole
BFSET       <ea>{offset:width}         Test bit. pole a nastav
BFTST       <ea>{offset:width}         Test bitového pole
CALLM       #<data>,<ea>               Call Module (pouze 68020!)
CAS.x       Dc,Du,<ea>                 Porovnej a prohoď s operandem
CAS2.x      Dc1:Dc2,Du1:Du2,(Rn1):(Rn2) (pouze 020-040!)
CHK2.x      <ea>,Rn  (pouze 020-040!)  Test registru, zda vyhovuje hranicím
CMP2.x      <ea>,Rn  (pouze 020-040!)  Porovnání registru s hranicemi
DIVS.L      <ea>,Dq                    Znaménkové dělení
DIVS.L      <ea>,Dr:Dq
DIVSL.L     <ea>,Dr:Dq  (pouze 020-040!)
DIVU.L      <ea>,Dq                    Bezznaménkové dělení
DIVU.L      <ea>,Dr:Dq
DIVUL.L     <ea>,Dr:Dq  (pouze 020-040!)
EXTB.L      Dn                         Rozšíření o znaménko
LINK.L      An,#<displacement>         Link and Allocate - lokální zásobník
MULS.L      <ea>,Dl                    Znaménkové násobení
MULS.L      <ea>,Dh:Dl
MULU.L      <ea>,Dl                    Bezznaménkové násobení
MULU.L      <ea>,Dh:Dl
PACK        -(Ax),-(Ay),#<adjustment>  Pack BCD
PACK        Dx,Dy,#<adjustment>
RTM         Rn                         Návrat z modulu (jen 68020!) (CALLM)
TRAP<cc>                               Podmíněná výjimka
TRAP<cc>.x  #<data>
UNPK        -(Ax),-(Ay),#<adjustment>  Unpack BCD
UNPK        Dx,Dy,#<adjustment>
 
>>  To be continued...(later!)  <<

__________________________________________  
.
 
Další ve frontě:
 
KodeŇina   ASLFileRequestr v AmigaE provedení
 

 
VokeCáVKy HarDWare warez WorkBenchoviny DeMa Gfx&Muzika PaŇBY VokecÁvky II
Vokecávky Hardware Warez WBoviny Dema Gfx&Muz Pařby Vokecávky 2