Digital och Datorteknik EDA /2010. EDA Digital och Datorteknik

Relevanta dokument
MC68HCS12 - översikt

DAT 015 Maskinorienterad Programmering 2010/11. Ur innehållet: Historik Översikt, single-chip-computer DG256 Programmerarens bild (Exempel)

Instruktionsuppsättning. Programmerarens bild adresserbart minne. Programmerarens bild datatyper/storlek. Maskinorienterad Programmering 2011/2012

Maskinorienterad Programmering 2010/11

Assemblerprogrammets struktur; exempel

Digital och Datorteknik EDA /2010. EDA Digital och Datorteknik

EDA Digital och Datorteknik

FLEX Instruktionslista

Reducerad INSTRUKTIONSLISTA för FLIS-processorn

Nya instruktioner. b 7

Instruktionsuppsättning

Programexempel för FLEX

Nya instruktioner. b 7

Villkorliga hopp: 9/26/2011. Dagens mål: Du ska kunna.. Villrorliga (Relativa) hopp - forts Arb s 140. LV5 Fo12. LV5 Fo12. Aktivera Kursens mål:

Digital- och datorteknik

Konstruera en dator mha grindar och programmera denna Använda en modern microcontroller

Assemblerprogrammets. struktur; exempel

Assemblerprogrammering för HCS12

Digital- och datorteknik

INSTRUKTIONSLISTA för FLEX-processorn

Bilda styrsignalerna till datavägen RESET FETCH EXECUTE NF NF NF. Digital och Datorteknik EDA /2011. Digital och Datorteknik EDA /2011

Extrauppgifter för CPU12

Tentamen. Datorteknik Y, TSEA28

Ext-13 (Ver ) Exempel på RTN-beskrivning av FLEX-instruktioner

Tentamen. Datorteknik Y, TSEA28

FLEXIBLE INSTRUCTION SET PROCESSOR FLISP

4.1. Assemblerspråket

F4: Assemblerprogrammering

FLEXIBLE INSTRUCTION SET PROCESSOR FLISP

9/22/2012. Assemblernivå Beskrivning av funktion Automatiskt styrd borrmaskin Positionera borr Starta borr Borra genom arbetsstycke...

Ext-13 (Ver ) Exempel på RTN-beskrivning av FLEX-instruktioner

F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen

Tentamen. Datorteknik Y, TSEA28

Tentamen (Exempel) Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Styrenheten 9/17/2011. Styrenheten - forts Arb s 120. LV4 Fo10. Aktivera Kursens mål: Kap 7 Blå

Digital- och datorteknik

Programmering av inbyggda system 2012/2013. Kodningskonventioner och programbibliotek. maskinnära programmering i C och assemblerspråk

Tentamen. Datorteknik Y, TSEA28

Tentamen (Exempel) Datorteknik Y, TSEA28

Digital- och datorteknik

Assemblerprogrammering för ARM del 2

EDA215 Digital- och datorteknik för Z

Tentamen (Exempel) Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Tentamen (Exempel) Datorteknik Y, TSEA28

Tentamen Datorteknik Y, TSEA28 Datum

11/16/2012. Assemblernivå Beskrivning av funktion Automatiskt styrd borrmaskin Positionera borr Starta borr Borra genom arbetsstycke...

Styrenheten styrsignalsekvenser programflödeskontroll

Assemblerprogrammering

EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7)

1 Maskinnära programmering för HC12

Tentamen Datorteknik Y, TSEA28 Datum TER2, TER4, TERE Tid 14-18

Maskinorienterad Programmering /2011. Maskinorienterad Programmering 2010/11. Maskinnära programmering C och assemblerspråk

Assemblerprogrammering del 2

DBG identifierar därefter sig genom utskrift av namn och version. Se även "Disposition av adressrum" nedan. Följande kommandon accepteras av DBG

Maskinorienterad programmering

Kodningskonventioner (XCC12) Specifikation av strncpy: Övningsexempel: Maskinorienterad Programmering 2011/2012

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Digital- och datorteknik

Assemblerprogrammering för ARM del 1

Exempel 1 på Tentamen med lösningar

Omtentamen i CDT204 - Datorarkitektur

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Exempel 3 på Tentamen

Digitala System: Datorteknik ERIK LARSSON

Program Datorteknik. Kontrollenhet. Exekvering av en instruktion. Abstraktionsnivå: Högnivåspråk. Assemblyspråk. Maskinspråk.

Datorteknik ERIK LARSSON

Tentamen med lösningar

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte

Assemblerprogrammering för ARM del 1

Dataöverföring på Parallell- och serieform MOP 11/12 1

Maskinorienterad programmering. Mekatronikingenjör åk 2/ lp 3. Lars-Eric Arebrink. Av institutionen utgiven. Lars-Eric Arebrink

Digital- och datorteknik. Mekatronik-, data- och elektroingenjör Åk 1/ lp 1o2. Lars-Eric Arebrink. Av institutionen utgiven. vid flera tillfällen

Datorarkitekturer med operativsystem ERIK LARSSON

Grundläggande datavetenskap, 4p

Arbetsbok för MC12, kapitel 4 Klocka. Genomgång av laborationer. New disc Här väljer du olika arbetsstycken

Programräknaren visar alltid på nästa instruktion som skall utföras. Så fort en instruktion har hämtats så visar programräknaren på nästa instruktion.

Övningsuppgifter i Mikrodatorteknik 4p/5p

Föreläsningsanteckningar 2. Mikroprogrammering I

Maskinorienterad programmering

Digital- och datorteknik

Tentamen PC-teknik 5 p

Introduktion till ARM Cortex-M4

Laborationsmoment 2 - En Borrautomat

Tentamen. EDA432 Digital- och datorteknik, It DIT790 Digital- och datorteknik, GU. Onsdag 12 Januari 2011, kl

Närliggande allokering Datorteknik

7) Beskriv tre sätt att överföra parametrar mellan huvudprogram och subrutin.

Tentamen. EDA432 Digital- och datorteknik, IT DIT790 Digital- och datorteknik, GU. Måndag 18 Oktober 2010, kl

Digital- och datorteknik

Assemblerprogrammering del 3

Datorarkitekturer med operativsystem ERIK LARSSON

TENTAMEN (med svar och vissa lösningar)

Programmering av inbyggda system

Datormodell. Datorns uppgifter -Utföra program (instruktioner) Göra beräkningar på data Flytta data Interagera med omvärlden

Datorsystem 2 CPU. Förra gången: Datorns historia Denna gång: Byggstenar i en dators arkitektur. Visning av Akka (för de som är intresserade)

Transkript:

EDA 451 - Digital och Datorteknik 29-21, Arbetsbok för MC12 CPU12 Reference Guide Ur innehållet: Historik Översikt, single-chip-computer DG256 Programmerarens bild (Exempel) 1 Instruktionsuppsättning ISA Instruction Set Architecture Vilka operationer kan utföras? Instruktionsgrupper Hur lagras operanderna förutom i minnet? Korttidslagring Hur nås operander i minnet? Adresseringssätt Vilka typer/storlekar av operander kan hanteras? Generella/speciella register, registerstorlek 2 1

Instruktionsgrupper EXEMPEL: Motorola (Freescale) MC68X/Coldfire Data movement Program (Flow) control Integer arithmetic Floating-point arithmetic Logical operations Bit manipulation System control Cache maintenance PowerPC Load/Store Program (Flow) control Integer arithmetic Floating-point arithmetic Processor control Synchronization Miscellanous Motorola (Freescale) Load/Store Data movement Program (Flow) control Integer arithmetic Logical operations Bit manipulation System control FLEX Load/Store Data movement Program (Flow) control Integer arithmetic/test Logical operations Shift/rotate Stack operations 3 Korttidslagring, Stack/Ackumulator/Register Exempel: Kodning av operationen A = B + C Stack PUSH B PUSH C ADD POP A Exempel: B55, HP3/7 Ackumulator LOAD ADD STORE Exempel: PDP8, R652 FLEX B C A Register LOAD LOAD ADD STORE Dessutom existerar mellanting av dessa. Exempel (CISC): IBM36, DEC PDP11/VAX MC68x Intel Pentium Mest namnkunnigt exempel: Intel 886 (-186/-286/-386/-486) R1,B R2,C R3,R1,R2 A,R3 Exempel (RISC): PowerPC, MIPS, SPARC 4 2

Register programmerarens bild Stackmaskiner: Har som regel inga synliga register Ackumulatormaskiner: Har oftast flera register men med dedikerad användning: Exempel: Ackumulator, Indexregister Registermaskiner: Generellt användbara register. Exempel: Dataregister, Adressregister, Flyttalsregister 5 EXEMPEL - Registermaskiner PowerPC Zilog Z8 Motorola (Freescale) MC68X/Coldfire 6 3

EXEMPEL Ackumulator Intel 8xx 88/885 886 8386 7 ACCUMULATOR 15 8 7 B C D E H L B C 15 STACK POINTER PROGRAM COUNTER INCREMENTER/DECREMENTER 15 AH BH CH DH 15 15 8 7 A X B X C X D X SP BP SI DI IP AL BL CL DL ACCUMULATOR BASE ACCUMULATOR ACCUMULATOR STACK POINTER BASE POINTER SOURCE INDEX DESTINATION INDEX INSTRUCTION POINTER 31 16 15 8 7 AH A X AL 31 16 15 BH CH DH B X C X D X SI DI BP SP IP BL CL DL EAX EBX ECX EDX ESI EDI EBP ESP EIP FLAGS H FLAGS L STATUS FLAGS FLAGS EFLAGS 15 CS DS SS ES CODE SEGMENT DATA SEGMENT STACK SEGMENT EXTRA SEGMENT 15 CS SS DS ES FS CODE STACK DATA GS 7 EXEMPEL - Ackumulator IX 7 ACCA 7 ACCB 15 15 PC 15 5 H Motorola 68 SP I N Z V C ACCUMULATOR A ACCUMULATOR B INDEX REGISTER PROGRAM COUNTER STACK POINTER CONDITION CODES REGISTER 7 A 7 15 8 7 PCH Y PCL 15 7 1 Rockwell 652 7 X S ACCUMULATOR A INDEX REGISTER Y INDEX REGISTER X PROGRAM COUNTER STACK POINTER N V 1 B D I Z C PROCESSOR STATUS REG P 15 A Motorola 68HC12 8 7 D 15 X 15 15 SP 15 7 Y PC S X H B I N Z V C 7 A 7 B 7 X 7 PC 7 SP 3 8-BIT ACCUMULATORS A AND B OR 16-BIT DOUBLE ACCUMULATOR D INDEX REGISTER X INDEX REGISTER Y STACK POINTER PROGRAM COUNTER CONDITION CODES REGISTER FLEX ACCUMULATOR A ACCUMULATOR B INDEX REGISTER PROGRAM COUNTER STACK POINTER N Z V C CONDITION CODES REGISTER 8 4

Programmerarens bild datatyper/storlek char (8) short int (16) long int (32) long int (64) floating point (IEEE) pointers Coldfire V1 X X X 32 bit PowerPC X X X X X 886 X X 16/2 bit 8386 X X X 32 bit 68HC12 X X 16/2 bit FLEX X 8 bit 9 Historik 68HC12SX 68HC12 68HC12S 68 681 689 68HC11 1974 1978 1982 1986 199 1994 1998 22 26 1 5

Freescale 68HCS12 HCS12 adressrum, IO och minne CPU12, klockor och räknare Random Access - Minne RWM, FLASH, EEPROM Periferienheter Parallell Input/Output: Seriell kommunikation AD PWM 11 HCS12DG256, blockdiagram 12 6

HCS12DG256, core 13 HCS12DG256, core Spänningsregulatorer (flera olika spänningar används internt) Background Debug Mode för test/avlusning En kristall utgör bas för alla klockfrekvenser i systemet Realtidsklocka och andra klockfunktioner Programmerbara funktioner Vi återkommer till detta i Maskinorienterad Programmering 14 7

Primärminne Icke flyktigt minne Upp till 256 Kbyte i minnesbankar 48 kb utan användning av bankar 4 kb EEPROM Flyktigt minne 12 kb RAM 15 EXEMPEL, linjärt adressrum FFFF FLASH 4 3FFF 1 FFF 4 3FF RWM ( RAM ) Synlig del av EEPROM MCHCS12 Interna register 16 8

EXEMPEL, bankat adressrum FFFF FLASH C BFFF 3 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D Bankat FLASH Dx256 8 7FFF FLASH 4 3FFF 1 FFF 4 3FF RWM ( RAM ) Synlig del EEPROM MCHCS12 Interna register 17 EXEMPEL, i laborationsdator MC12 FFFF C BFFF FLASH (monitor/debugger) 3 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D Bankat FLASH Dx256 8 7FFF 4 3C8 1 FFF 4 3FF FLASH (monitor/debugger) RWM ( RAM ) Externt IO-gränssnitt MCHCS12 Interna register Minne tillgängligt för användarprogram 18 9

Periferikretsar i HCS12DG256 AD Analog till Digital omvandling ECT- Räknarkretsar för noggrann tidmätning SCI Asynkron seriekommunikation Parallell In-Utmatning PWM Pulsbreddsmodulering Etc 19 HCS12DG256, core Centralenhet CPU12 2 1

Registeruppsättning CPU12 15 8 7 A B D 15 X 15 Y 15 SP 15 PC 7 S X H I N Z V C 8-BIT ACCUMULATORS A AND B OR 16-BIT DOUBLE ACCUMULATOR D INDEX REGISTER X INDEX REGISTER Y STACK POINTER PROGRAM COUNTER CONDITION CODES REGISTER 21 Adresseringssätt Vi känner igen de flesta adresseringssätten i från FLEX. Indexerade adresseringssätt kan även användas med register X,Y och SP ibland också med PC (PC-relativt) Nytt här är också Indirekt adressering 22 11

Inherent Maskinkod för instruktionen Cykel för cykel beskrivning Flaggpåverkan 23 Omedelbar (Immediate) 8-bit/16-bit opr8i, 8-bitars konstant om 8-bitars register Opr16i, 16-bitars konstant om 16-bitars register 24 12

Direkt (Direct Page) Absolut (Extented) opr16a, kan adressera hela adressintervallet -FFFF opr8a, kan enbart adressera intervallet -FF, anger minst signifikant byte av adressen 25 PC-relativ ( BRANCH -instruktioner) 8-bitars offset (-128..127) 9-bitars offset (-256..255) 16-bitars offset (-32768..32767) 26 13

Indexerade adresseringssätt: Register relativ, konstant offset Basregister kan vara något av: X,Y,SP,PC EXEMPEL: LDAA 5,X STAA 2,Y LDAA sym,pc Observera, ingen syntaktisk skillnad. STA off,sp Assemblator väljer effektivast kodning Specialfall: n,pcr LDAA sym,pcr Antag PC pekar på nästa instruktion. Operanden är här PC-sym, jfr offsetberäkning för BRA -instruktioner 27 Indexerade adresseringssätt: Auto pre- increment/decrement Auto post- increment/decrement Basregister kan vara något av: X,Y,SP EXEMPEL: LDAA 1,-X STAA 4,Y- STAB 8,+SP LDAB 7,SP+ 28 14

Indexerade adresseringssätt: Register relativ, offset i ackumulator Basregister kan vara något av: X,Y,SP,PC EXEMPEL: LDAA A,X STAA B,Y STAB D,SP LDAB D,PC 29 Indexerade adresseringssätt: Indirekt EXEMPEL: LDAA STAA STAB LDAB [D,X] [sym,pcr] [2,SP] [D,Y] 3 15

Instruktionsgrupper LOAD-instruktioner LDAA Load A (M) A LDAB Load B (M) B LDD Load D (M:M+1) 1 A:B LDS Load SP (M:M+1) 1 SP H :SP L LDX Load index register X (M:M+1) 1 X H :X L LDY Load index register Y (M:M+1) 1 Y H :Y L LEAS Load effective address into SP Effective address SP LEAX Load effective address into X Effective address X LEAY Load effective address into Y Effective address Y STORE-instruktioner STAA Store A (A) M STAB Store B (B) M STD Store D (A) M, (B) M+1 STS Store SP SP H :SP L M:M+1 STX Store X X H :X L M:M+1 STY Store Y Y H :Y L M:M+1 MOVE-instruktioner MOVB Move byte (8 bitar) (M 1 ) M 2 MOVW Move word (8 bitar) (M:M+1) 1 M:M+1 2 31 Instruktioner för kopiering av registerinnehåll TAB Transfer A to B (A) B anm: Ekv. Med TFR A,B TAP Transfer A to CCR (A) CCR anm: Ekv. Med TFR A,CCR TBA Transfer B to A (B) A TFR Transfer register to register (A,B,CCR,D,X,Y eller SP) (A,B,CCR,D,X,Y eller SP) TPA Transfer CCR to A (CCR) A anm: Ekv. Med TFR CCR,A TSX Transfer SP to X (SP) X anm: Ekv. Med TFR SP,X TSY Transfer SP to Y (SP) Y anm: Ekv. Med TFR SP,Y TXS Transfer X to SP (X) SP anm: Ekv. Med TFR X,SP TYS Transfer Y to SP anm: Ekv. Med TFR Y,SP (Y) SP Instruktioner för växling av registerinnehåll EXG Exchange register to register (A,B,CCR,D,X,Y eller SP) (A,B,CCR,D,X,Y eller SP) XGDX Exchange D with X (D) (X) anm: Ekv. Med EXG D,X - EXG X,D XGDY Exchange D with Y anm: Ekv. Med EXG D,Y - EXG Y,D (D) (Y) Instruktion för teckenutvidgning SEX Teckenutvidga 8 bitars operand (A,B,CCR) (D,X,Y eller SP) Använd denna Övriga finns här av kompatibilitetsskäl Använd denna Övriga finns här av kompatibilitetsskäl 32 16

Ovillkorlig programflödeskontroll BSR Anrop av subrutin. SP-2 SP PC-relativ operand RetAdrL:RetAdrH M (SP) :M (SP+1) Adress PC BRA Hopp till adress. Adress PC PC-relativ operand CALL Anrop av subrutin SP-2 SP Absolut operand (2 bitar) Anm: Användes vid RetAdrL:RetAdrH M (SP) :M (SP+1) programflödesändring mellan Subrutinadress PC olika minnesbankar ($8- SP-1 SP $BFFF) (PPAGE) M (SP) PAGE PPAGE Subrutinadress PC JMP Hopp till address. Absolut operand Subrutinadress PC JSR RTC RTS Anrop av subrutin Absolut operand Återvänd från subrutin. Returadress från STACK och PPAGE Återvänd från subrutin. Returadress från STACK SP-2 SP RetAdrL:RetAdrH M (SP) :M (SP+1) Subrutinadress PC M (SP) (PPAGE) SP+1 SP M (SP) :M (SP+1) PC H :PC L SP+2 SP M (SP) :M (SP+1) PC H :PC L SP+2 SP 33 EXEMPEL - Modularisering ORG $1 main: JSR init main_loop:jsr read JSR --- BRA main_loop init: --- RTS read: --- RTS 34 17

Instruktioner för addition ABA Addera B till A (A)+(B) A ABX Addera B till X (X)+(B) X anm: Ekv. med LEAX B,X ABY Addera B till Y (Y)+(B) Y anm: Ekv. med LEAY B,Y ADCA Addition med carry till A (A)+(M)+C A ADCB Addition med carry till B (B)+(M)+C B ADDA Addition till A (A)+(M) A ADDB Addition till B (B)+(M) B ADDD Addition till D (A:B) (D)+(M:M+1) D INC Incrementera i minnet (M)+$1 M INCA Inkrementera A (A)+ $1 A INCB Inkrementera B (B)+ $1 B INS Inkrementera SP (SP)+ $1 SP anm: Ekv. med LEAS 1,SP INX Inkrementera X (X)+ $1 X anm: Ekv. med LEAX 1,X INY Inkrementera Y anm: Ekv. med LEAY 1,Y (Y)+ $1 Y Instruktioner för subtraktion SBA Subtrahera B från A (A)-(B) A SBCA Subtrahera med borrow från A (A)-(M)-C A SBCB Subtrahera med borrow från B (B)-(M)-C B SUBA Subtrahera från A (A)-(M) A SUBB Subtrahera från B (B)-(M) B SUBD Subtrahera från D (A:B) (D)-(M:M+1) D DEC Dekrementera i minnet (M)-$1 M DECA Dekrementera A (A)- $1 A DECB Dekrementera B (B)- $1 B DES Dekrementera SP (SP)- $1 SP anm: Ekv. med LEAS -1,SP DEX Dekrementera X (X)- $1 X anm: Ekv. med LEAX -1,X DEY Dekrementera Y anm: Ekv. med LEAY -1,Y (Y)- $1 Y 35 Instruktioner för logiska operationer ANDA Bitvis och A med minnesinnehåll (A) (M) A ANDB Bitvis och A med minnesinnehåll (B) (M) B ANDCC Bitvis och CC med minnesinnehåll (CCR) (M) CCR EORA Bitvis exklusivt eller A med (A) (M) A minnesinnehåll EORB Bitvis exklusivt eller B med (B) (M) B minnesinnehåll ORAA Bitvis eller A med minnesinnehåll (A)+(M) A ORAB Bitvis eller B med minnesinnehåll (B)+(M) B ORCC Bitvis eller CCR med minnesinnehåll (CCR)+(M) CCR Unära operationer CLC Nollställ carryflaggan i CCR C CLI Nollställ avbrottsmask i CCR I CLR Nollställ minnesinnehåll $ M CLRA Nollställ A $ A CLRB Nollställ B $ B CLV Nollställ overflowflaggan I CCR V COM Ettkomplementera minnesinnehåll $FF-(M) M COMA Ettkomplementera A $FF-(A) A COMB Ettkomplementera B $FF-(B) A NEG Tvåkomplementera minnesinnehåll $-(M) M NEGA Tvåkomplementera A $-(A) A NEGB Tvåkomplementera B $-(B) B EXEMPEL: Nollställ bit 7-bit 4 på adress $3 LDAB $3 ANDB #%1111 STAB $3 EXEMPEL: Ettställ bit 7 och bit på adress $3 LDAB $3 ORAB #%11 STAB $3 EXEMPEL: Invertera bit 2 och bit1 på adress $3 LDAB $3 EORB #%11 STAB $3 36 18

Logiska skiftoperationer LSL Logiskt vänsterskift i minnet LSLA Logiskt vänsterskift A C b7 LSLB Logiskt vänsterskift B LSLD Logiskt vänsterskift D b C b7 A b b7 B b LSR LSRA LSRB Logiskt högerskift i minnet Logiskt högerskift A Logiskt högerskift B b7 b C LSRD Logiskt högerskift D b7 A b b7 B b C Exempel på användning: Multiplikation med 2, tal utan tecken. Division med 2, tal utan tecken. 37 Aritmetiska skiftoperationer ASL Aritmetiskt vänsterskift i minnet (ekv. med LSL) ASLA Aritmetiskt vänsterskift A C b7 (ekv. med LSLA) ASLB Aritmetiskt vänsterskift B (ekv. med LSLB) ASLD Aritmetiskt vänsterskift D (ekv. med LSLD) b C b7 A b b7 B b ASR ASRA ASRB Aritmetiskt högerskift i minnet Aritmetiskt högerskift A Aritmetiskt högerskift B b7 b C Exempel på användning, högerskift: Division med 2, tal med tecken. 38 19

Instruktioner för rotation (carry-skift) ROL Rotation vänster via carry i minnet ROLA Rotation vänster via carry A ROLB Rotation vänster via carry B C b 7 ROR Rotation höger via carry i minnet RORA Rotation höger via carry A RORB Rotation höger via carry B b 7 b b C EXEMPEL: Skifta ett 32-bitars tal på adress $3, 1 steg åt höger LSR $3 ROR $31 ROR $32 ROR $33 Exempel på användning: Skiftoperationer på tal större än 8 bitar. 39 Instruktioner för jämförelser och test CBA Jämför B med A (A)-(B) CMPA Jämför A med minne (A)-(M) CMPB Jämför B med minne (B)-(M) CPD Jämför D med minne (A:B)-(M:M+1) CPS Jämför SP med minne (SP)-(M:M+1) CPX Jämför X med minne (X)-(M:M+1) CPY Jämför Y med minne (Y)-(M:M+1) TST Testa minnesinnehåll (M)-$ TSTA Testa register A (A)-$ TSTB Testa register B (B)-$ 4 2

Villkorlig programflödeskontroll Mnemonic Funktion Villkor Enkla flaggtest BCS Hopp om carry C=1 BCC Hopp om ICKE carry C= BEQ Hopp om zero Z=1 BNE Hopp om ICKE zero Z= BMI Hopp om negative N=1 BPL Hopp om ICKE negative N= BVS Hopp om overflow V=1 BVC Hopp om ICKE overflow V= Test av tal utan tecken BHI Villkor: R>M C + Z = BHS Villkor: R M C= BLO Villkor: R<M C=1 BLS Villkor: R M C + Z = 1 Test av tal med tecken BGT Villkor: R>M Z + ( N V ) = BGE Villkor: R M N V = BLT Villkor: R<M N V = 1 BLE Villkor: R M Z + ( N V ) = 1 41 Instruktioner för räknande programslingor Mnemonic Funktion Villkor DBEQ Dekrementera innehåll i register. (register) 1 register Hoppa om resultatet =. (register: A,B,D,X,Y,SP) om(register)=; hoppa ; annars: nästa instruktion DBNE Dekrementera innehåll i register. (register) 1 register Hoppa om resultatet. om(register) ; hoppa ; (register: A,B,D,X,Y,SP) annars: nästa instruktion IBEQ Inkrementera innehåll i register. (register) + 1 register Hoppa om resultatet =. (register: A,B,D,X,Y,SP) om(register)=; hoppa ; annars: nästa instruktion IBNE Inkrementera innehåll i register. (register) + 1 register Hoppa om resultatet. om(register) ; hoppa ; (register: A,B,D,X,Y,SP) annars: nästa instruktion TBEQ Testa innehåll i register. Hoppa om resultatet =. (register: A,B,D,X,Y,SP) om(register)=; hoppa ; annars: nästa instruktion TBNE Testa innehåll i register. Hoppa om resultatet. (register: A,B,D,X,Y,SP) om(register) ; hoppa ; annars: nästa instruktion 42 21

If Kontrollstrukturer If( Villkor ) then if( Villkor ) then else end Then End Villkor JA Satser if(villkor) { Satser; } NEJ If Then Else End Villkor JA Satser 1 Satser 2 NEJ if(villkor) { Satser1; }else{ Satser2; } while( Villkor ) loop While Then End Villkor JA Satser NEJ while(villkor) { Satser; } loop until( Villkor ) LOOP UNTIL NEJ Satser Sista? JA do{ Satser; } while(villkor); 43 If () {} If Then End Villkor JA Satser NEJ if (DipSwitch!= ) HexDisp = Dipswitch; Rättfram kodning DipSwitch EQU $6 HexDisp EQU $4 TST BNE BRA DipSwitch assign end assign LDAB DipSwitch STAB HexDisp end: BNE Hopp om ICKE zero Z= BEQ Hopp om zero Z=1 44 22

If () {} If NEJ Villkor JA Then Satser End Bättre kodning DipSwitch EQU $6 HexDisp EQU $4 TST BEQ DipSwitch end if (DipSwitch!= ) HexDisp = Dipswitch; end: LDAB STAB DipSwitch HexDisp BNE Hopp om ICKE zero Z= BEQ Hopp om zero Z=1 45 If () {} else { } If Then Else End Villkor JA Satser 1 Satser 2 NEJ if (DipSwitch == ) HexDisp = 1; else HexDisp = ; DipSwitch EQU $6 HexDisp EQU $4 LDAB DipSwitch TSTB BEQ not_else LDAB # STAB HexDisp BRA end not_else: LDAB #1 STAB HexDisp end: BEQ Hopp om zero Z=1 46 23

If () {} else { } DipSwitch EQU $6 HexDisp EQU $4 If Then Else End Villkor JA Satser 1 Satser 2 NEJ if (DipSwitch == ) HexDisp = 1; else HexDisp = ; LDAB DipSwitch TSTB BNE else LDAB #1 STAB HexDisp BRA end else: LDAB # STAB HexDisp end: BNE Hopp om ICKE zero Z= 47 If () {} else { } If Then Else End Villkor JA Satser 1 Satser 2 NEJ if (DipSwitch >= 5) HexDisp = 1; else HexDisp = ; DipSwitch EQU $6 HexDisp EQU $4 LDAB DipSwitch CMPB #5 BHS then LDAB # STAB HexDisp BRA end then: LDAB #1 STAB HexDisp end: Test av tal utan tecken BHS Villkor: R M C= Test av tal med tecken BGE Villkor: R M N V = 48 24

while () {} While Then End Villkor JA Satser 1 NEJ while (DipSwitch!= ) HexDisp = 1; HexDisp = ; DipSwitch EQU $6 HexDisp EQU $4 while: end_while: LDAB DipSwitch TSTB BEQ end_while LDAB #1 STAB HexDisp BRA while LDAB # STAB HexDisp BEQ Hopp om zero Z=1 49 while () {} While Then End Villkor JA Satser 1 NEJ Delay( unsigned int count ) { while (count > ) count = count - 1; } Delay: LDD count Delay_loop: NOP NOP Delay_end: SUBD #1 BHI Delay_loop RTS Test av tal utan tecken BHI Villkor: R>M C + Z = Test av tal med tecken BGT Villkor: R>M Z + ( N V ) = 5 25

Fördröjning Delay( unsigned int count ) { while (count > ) count = count - 1; } Parameter count finns i register D vid anrop. Anm. count= är EJ TILLÅTET. ; Subrutin 'Delay' Delay: NOP Delay_loop: NOP NOP SUBD #1 BHI Delay_loop RTS instruktion NOP 1 NOP NOP SUBD #1 BHI antal ggr. count count count count ( taken ) BHI 1 (not taken) RTS 1 = NOP ( 1 + 2 count) + SUBD#1 ( count ) + BHI T ( count-1 ) + BHI NT ( 1 ) + RTS ( 1 ) =? 51 = NOP ( 1 + 2 count) + SUBD#1 ( count ) + BHI T ( count ) + BHI NT ( 1 ) + RTS ( 1 ) =? (exekveringstider, dvs antal cykler, fås ur handboken) instruktion NOP 1 SUBD #1 2 BHI 3/1 RTS 5 # cykler = 1 ( 1 + 2 count) + 2 ( count ) + 3 ( count-1 ) + 1 ( 1 ) + 5 ( 1 ) = 7 count + 4 52 26

Minimal/maximal fördröjning vid olika klockfrekvenser MC12 Frekvens/ cykeltid 4 MHz/ 25 ns. 8 MHz/ 125 ns. 16 MHz/ 62,5 ns. 25 MHz/ 4 ns. Min. ( count = 1) 11 cykler Max. ( count = $FFFF) 458749 cykler 2,75 s 115 ms 1,375 s 57,34 ms 687,5 ns 28,67 ms 44 ns 18,35 ms 53 Exempel: Bestäm count för 1 ms fördröjning i ett MC12-system Lösning: MC12 Frekvens/ cykeltid 8 MHz/ 125 ns. Min. ( count = 1) 11 cykler Max. ( count = $FFFF) 458749 cykler 1,375 s 57,34 ms (7count (7count count 4)125ns 4)125ns 1 125 7 Uppskatta motsvarande fördröjning i simulatorn 1ms 1 ns 4 11428 Tar c:a 14 sekunder 54 27

Om längre fördröjningar krävs måste Delay -funktionen utföra fler instruktioner i varje slinga, exempelvis genom anrop av följande rutin: ; ; subrutin ADelay' ADelay: BSR ADelay1 ADelay1: BSR ADelay2 ADelay2: RTS Hur många bytes kod motsvarar rutinen? Hur många klockcyklers fördröjning ger den? 55 do {} while () LOOP UNTIL NEJ Satser Sista? JA do { HexDisp = ; }while (DipSwitch >= 1); DipSwitch EQU $6 HexDisp EQU $4 do: MOVB #,HexDisp LDAB DipSwitch CMPB #1 BHS do Test av tal utan tecken BHS Villkor: R M C= 56 28

EXEMPEL memcopy( from, to, size ) Kan (informellt) kodas memcopy: LDAB size LDX from LDY to memcopy_loop: memcopy_end: TSTB BEQ LDAA STAA DECB BRA RTS memcopy_end 1,X+ 1,Y+ memcopy_loop 57 EXEMPEL memcopy1( from, to, size ) Kan (informellt) kodas memcopy1: LDAB size LDX from LDY to memcopy1_loop: memcopy1_end: TSTB BEQ MOVB DECB BRA RTS memcopy1_end 1,X+,1,Y+ memcopy1_loop 58 29

EXEMPEL memcopy2( from, to, size ) Kan (informellt) kodas memcopy2: LDAB size LDX from LDY to memcopy2_loop: SUBB #1 BMI memcopy2_end MOVB B,X,B,Y BRA memcopy2_loop memcopy2_end: RTS 59 EXEMPEL memcopy3( from, to, size ) Kan (informellt) kodas memcopy3: LDAB size LDX from LDY to memcopy3_loop: MOVB 1,X+,1,Y+ DBNE B,memcopy3_loop memcopy3_end: RTS vad händer om size är, vid anrop??? 6 3

EXEMPEL memcopy( from, to, size ) En effektiv implementering. memcopy: LDAB size BEQ memcopy_end LDX from LDY to memcopy_loop: MOVB 1,X+,1,Y+ DBNE B,memcopy_loop memcopy_end: RTS 61 31