THE MOTOROLA 68000 INSTRUCTIONS EXPLAINED
;Motorola MC680000 instructions explained ;dec 94 by Henrik Stolpe ;PROGRAM CONTROL ;Bcc ;villkorligt hopp ;se vidare fil "cc", conditional branch ;DBcc ;decrement branch conditionally ;samma som Bcc,men raknar ner kall reg ;anvands for slingor r1: clr d0 clr d0 move #5,d0 ;lagg 2 id 0 loop: cmp #1,d0 ;jamfor 2 med d0 dbeq d0,loop ;samma rakna ner d0,hoppa till loop move #1,d1 ;visa att det funker rts ;Scc ;set according to condition ;samma som Bcc,men satter hela byten till 1 om cond=true och till 0 om cond=fal. ;endast byte ;BRA,JMP ;hoppa ovillkorligt ;ex.BRA routine ;BSR,JSR ;hoppa till subrutin,aterhoppsadressen sparas pa stacken,RTS hoppar tillbaka ;BSR routine ;CHK ;se TRAPV ;jamfor ett register mot grans,om storre ,eller mindre an 0 utloses ;exception och hopar till rutin i $018 ;endast word,ej an direkt ;RTE ;hoppar tillbaka fran exception ;RTR ;hoppar tillbaka o laddar flaggorna ;RTS ;hoppar tillbak fran subrutin ;TRAP ;vaktor till rutin for exception 16st ;anvands for rutiner som skall exekveras vid speciella handelser ;ex.felmed.,eller for att enkelt hoppa till supervisor laget r2: initiering: ;assemblera och j r2 move.l #trap0,$80 ;satter vektor till trap0 rutin rts traptest: ;j traptest trap #0 ;utfor rutinen i $80 rts trap0: ;traprutin clr d0 move #2,d0 ;visa att det funkar rte ;return from exception ;TRAPV ;om V flaggan ar satt uloses exception TRAPV ;hoppar till rutin i $01c r3: move.l #trapv,$01c ;satt vektor till trapv rutin rts trapvtest: move #2,ccr ;satt V i CCR trapv ;om V=1 ulos exception rts trapv: ;trapv rutin clr d0 move #1,d0 ;visa att det funkar rte ;return from exception ;Motorola MC680000 instructions explained ;dec 94 by Henrik Stolpe ;CONDITION CODE REGISTER ;villkors koderna uppfylls eller inte beroende pa flaggornas tillstand ;flaggorna finns CCR som ar den undre byten i SR=status registret ;olika flaggor satts som resultat av operationer ;man kan aven satta enskilda flaggor i CCR med "move.b varde,CCR" ;bit 0 C Carry minnessiffra vid log.op,spill ;bit 1 V Overflow tecken andrat,spill fran bit 6 till 7 ;bit 2 Z Zero resultat av op=0 (ex.CMP) ;bit 3 N Negative resultat = negativt,msb=1 ;bit 4 X Extended som C fast vid aritmetiska op ;bit 5-7 Oanvanda ;CC CONDITION CCR CONDITION=TRUE ;T True, alltid - ;F False,aldrig - ;HI Higher C=0 & Z=0 ;LS Lower or same C=1 or Z=1 ;CC,HS Higher or same C=0 ;CS,LO Lower C=1 ;NE Not equal Z=0 ;EQ Equal Z=1 ;VC Overflow clear V=0 ;VS Owerflow set V=1 ;PL Plus N=0 ;MI Minus N=1 ;GE Greater or equal N=1 & V=1/or N=0 & V=0 ;LT Less than N=1 & V=0/or N=0 & V=1 ;GT Greather than N=1 & V=1 & Z=0/or N=0 & V=0 & Z=0 ;LE Less or equal Z=1/or N=1 & V=0/or N=0 & V=1 ;OPERATORS ;Bcc ;hoppar om cc villkor ar uppfyllda i CCR (status registrets und.byte) ;Bcc rutin ;DBcc ;hoppar om cc villkor ar uppfyllda i CCR (status registrets und.byte) ;raknar ner ett specifierat register,areg eller dreg ;DBcc reg,rutin ;Scc ;satter en byte till 1 om cc villkor ar uppfyllda och till 0 om inte ;endast byte ;Scc reg r: wait: btst #6,$bfe001 ;testa v.musknapp,resultai Z bne wait ;ej nedtryckt Z=0 hoppa wait beq ja ;nedtryckt Z=1 hoppa ja ja: clr d0 move #1,d0 rts r1: clr d0 clr d1 move #4,d0 move #5,d1 sub d1,d0 ;4-5 = negativt n=1 bmi negativt ;hoppa om negativt rts negativt: clr d2 move #1,d2 rts ;Motorola MC680000 instructions explained ;dec 94 by Henrik Stolpe ;DATA FLYTTNINGS FUNKTIONER ;MOVE ;flyttar konst.,adresser,areg,dreg till adresser,areg,dreg,sr,sp ;for alla varianter se fil "adress" ;ex nedan r: clr d0 move #1000,d0 ;move d1,d0 ;move d0,a0 ;move d0,(a0) ;move sr,d0 ;priv. ;move d0,sr ;priv. ;move d0,ccr ;move usp,d0 ;priv. ;move d0,usp ;priv. rts ;MOVEQ ;flyttar snabbt data med varde mellan 1-8 r2: clr d0 moveq #8,d0 rts ;MOVEA ;flyttar till adress r3: movea #1000,a0 rts ;MOVEP ;flyttar till periferikretsadress r4: ;movep (a0),periferikretsadress rts ;EXG ;byt innehall i tva reg r5: clr d0 clr d1 move #1,d0 move #2,d1 exg d0,d1 rts ;LEA ;ladda en effektiv adress i adressreg r6: mus = $bfe001 lea mus,a0 rts ;LINK ;innehall i a1 laggs pa stacken,pekaren kopieras till a1 ;offsetten adderas till stackpekaren ;negativ offset reserverar bytes i stacken ;UNLK frislapper arean r7: clr d0 link a1,#-2 move #1,(sp) move (sp),d0 unlk a1 rts ;PEA ;lagger adress pa stacken r8: adress: dc.w 10 pea adress rts ;SWAP ;byter byt halvor i ett reg ;endast word r9: clr d0 move #%0000000100000000,d0 swap d0 rts ;Motorola MC680000 instructions explained ;dec 94 by Henrik Stolpe ;ARITHMETIC INTEGER OPERATORS ;ADD ;adderar kalla och dest r: clr d0 clr d1 move #1,d0 move #1,d1 add d0,d1 ;adderar d0 till d1 rts ;ADDA ;samma som ADD fast till adressreg r1: ;exemple clr d0 clr d1 move #1,d0 move #$1000,a0 ;lagg adress $1000 i a0 move #1,(a0) ;lagg 1 i adressen add d0,(a0) ;addera d0 till adress i a0 move (a0),d1 ;visa inehall i $1000 rts ;ADDQ ;adderar snabbt en konstant mellan 1-8 r2: clr d0 addq #8,d0 rts ;ADDX ;samma som ADD fast X flaggan finns med i resultatet r3: clr d0 clr d1 clr d2 move #1,d2 move #16,ccr ;satt X flaggan addx d2,d1 ;addera d2+X till d1 rts ;CLR ;nollstaller operanden ;CMP ;jamfor tva operander,satter Z om samma (resultat=0) r4: clr d0 move #5,d0 cmp #5,d0 ;samma,satter Z rts ;CMPA ;samma som CMP fast dest=areg ;CMPM ;samma som CMP fast mellan 2 op i minnet ;DIVS,DIVU ;delar dest.l med kallop,resultatet finns i dest. laga ord ;endast word som kalla r5: clr d0 clr d1 move #8,d0 ;lagger 8 i d0 move.l #%00000000000000100000000000000000,d1 ;och 2 i d1 divs d0,d1 ;dividera ovre ordet rts ;EXT ;utvidgning till dubbel bredd ;ej byte ;MULS,MULU ;multiplikation,mult. kallop med dest.op,resultat i dest.laga ord ;endast word som kalla r6: clr d0 clr d1 move #2,d0 move #3,d1 muls d0,d1 rts ;NEG ;negation av operanden ;NEGX samma som NEG men X flaggan ar med i negationen r7: clr.l d0 move #%1111111111111111,d0 ;fyll d0 neg d0 ;negera till 1 rts ;SUB ;subtraherar kallop fran destop r8: clr d0 clr d1 move #4,d0 move #1,d1 sub d1,d0 ;subtrahera resultat =3 rts ;SUBA ;samma som SUB men dest=areg ;SUBI ;samma som SUB men kallop=konstant ;SUBQ ;snabb subtraktion med en konstant mellan 1-8 ;SUBX ;samma som SUB men X flaggan laggs till kallop r9: clr d0 clr d1 move #4,d0 move #1,d1 move #16,ccr subx d1,d0 rts ;TST ;testar en op,om op=0 satts Z,om msb=1 satts N r10: clr d0 move #0,d0 ;ingenting i d0 tst d0 ;testa,resultat 0=Z rts ;Motorola MC680000 instructions explained ;dec 94 by Henrik Stolpe ;LOGISKA OPERATORER ;AND ;logisk AND pa tva op,resultat i op2,satter Z om resultatet ar noll ;ej ad direkt ;ANDI samma som AND fast endast konstant som kall operand ;op1=1 och op2=1 ger resultat 1 annars 0 r: clr d0 clr d1 move #%00001001,d0 move #%00010000,d1 and d0,d1 ;resultat=0 satter Z rts ;OR ;logisk OR pa tva op,resultat i op2,satter Z om resultatet ar noll ;ej ad direkt ;ORI samma som OR fast endast konstant som kall operand ;op1=0 och op2=0 ger resultat 0 annars 1 r1: clr d0 clr d1 move #%00000000,d0 move #%00000000,d1 or d0,d1 ;resultat=0 satter Z rts ;EOR ;logisk EOR pa tva op,resultat i op2,satter Z om resultatet ar noll ;ej ad direkt ;op1=op2 ger resultat 0 om olika resultat 1 ;EORI samma som EOR fast endast konstant som kall operand r2: clr d0 clr d1 move #%00000011,d0 move #%00000011,d1 eor d0,d1 ;resultat=0 i d1, satter Z rts ;NOT ;inverterar en operand satter Z om resultatet ar noll ;ej ad direkt r3: clr d0 move #%1111111111111111,d0 ;fyll d0 not d0 ;invertera resultat=0,satter Z rts ;TAS ;testar en byte och satter bit 7 ;satter N om msb=1,satter Z om op var 0 ;ej ad direkt r4: clr d0 clr d1 move #%10000000,d0 ;msb=1 move d0,d1 ;lagg d0 i d1 tas d1 ;testa..,msb=1 satter N rts ;Motorola MC680000 instructions explained ;dec 94 by Henrik Stolpe ;BIT OPERATORER,MANIPULERAR ENSKILDA BITAR ;BTST ;testar om en bit ar satt,satter Z om bit ar 0 ;ej word r: clr d0 clr d1 move #%00000001,d0 ;satter bit 0 btst #0,d0 ;testar om bit 0 ar 0 bne ja ;nej den ar satt, hoppa rts ja: move #1,d1 rts ;BSET ;satter en bit ;ej word r1: clr d0 move #%00000000,d0 ;lagger tom byte i d0 bset #0,d0 ;satter bit 0 rts ;BCHG ;andrar en bit (byter status) ;ej word r2: clr d0 move #%00000011,d0 ;satter bit 0 o 1,(hx)=3 bchg #0,d0 ;andrarbit 0,(hx)=2 rts ;BCLR ;nollar bit ;ej word r3: clr d0 move #%00000001,d0 ;satter bit 0 bclr #0,d0 ;nollar bit 0 rts ;SKIFT OCH ROTATIONS OPERATORER ;LSL,LSR ;skiftar logiskt v/h och fyller pa med en nolla r4: clr d0 move #%0000000000000011,d0 ;lagger (hx)=3 i d0 lsl #1,d0 ;skiftar ordet v 1 bit (hx)=6 rts ;ROXL,ROXR ;roterar v/h och knuffar ut sista biten ;fyller pa med nolla i andra endan ;den utknuffade biten lagras i X flaggan r6: clr d0 clr d1 move #%1000000000000001,d0 ;bit 15 (hx)=800,bit 0 (hx)=1 satts roxl #1,d0 ;bit 15 knuffas ut,fyller pa med 0 roxr #1,d1 ;bit lagrad i X flagga rot. in i d1 rts ;ASL,ASR ;samma som LSL,LSR men sparar msb dar +/- tecken kan finnas r7: clr d0 move #%0000000000000001,d0 ;sattr bit 0 (hx)=1 asr #1,d0 ;rot h satter bit 15 ;SR= N=1,Z=0,V=0,C=1,X=1 rts ;end of file