EDA Digital och Datorteknik

Slides:



Advertisements
Liknande presentationer
PTS Bredbandskartläggning
Advertisements

EDA 480 – Maskinorienterad Programmering
Kap 1 - Algebra och linjära modeller
Innehåll, huvudpresentation 4. Rangordning av ordningsstörningar (fråga 1) 5. Problem med nedskräpning (fråga 1a) 6. Problem med skadegörelse (fråga 1b)
Joomla © 2009 Stefan Andersson 1. Kontaktformulär  På varje seriös webbplats bör det finnas ett kontaktformulär.  Använd ej maillänkar, risk för spam!
EDA Digital och Datorteknik
BENÄMNA lätta ord SPRÅKTRÄNING VID AFASIKg VIII
Programstruktur: C för enchipsdatorer
Introduktion till C för enchipsdatorer
Leif Håkansson’s Square Dancer Rotation
EDA Digital och Datorteknik
Projektföljeforskning
William Sandqvist Datorteknik övning 2 Subrutinanrop William Sandqvist
Operatorer.
Eddie Arnold - Make The World Go Away Images colorées de par le monde Déroulement automatique ou manuel à votre choix 1 för dig.
1 Hårddiskar och Disketter Boot sektorn på en diskett eller startsektorn på en partition (se s. 770)
PC-teknik Repetition enligt önskemål som inkommit via mail. (täcker alltså inte alla moment i kursen)
23 August 2014 IS1200 Datorteknik vt09, föreläsning 10, (E och I mfl)1 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory.
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Karolinska Institutet, studentundersökning Studentundersökning på Karolinska Institutet HT 2013.
Realtidsprog. - Anders Arvidsson1 Realtidsprogrammering En introduktion – Implementering (med exempel från PIC)
Punktprevalensmätning av trycksår 2011, v.40 Resultat från landstingen
V E R S I O N N R 2. 0 T A V E L I D É E R I M I L J Ö.
Bastugatan 2. Box S Stockholm. Blad 1 Läsarundersökning Maskinentreprenören 2007.
| Trycksår Kommun/Områdes-skillnader (inklusive könsdimensionen) Dennis Nordvall Statistiker/Datamanager,
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 13: I/O-system.
Fastighetsbyrån Konjunkturundersökning Oktober 2012.
INFÖR NATIONELLA PROVET
Pekare och speciell programstruktur i inbyggda system
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Enkätresultat för Grundskolan Elever 2014 Skola:Hällby skola.
Finländarnas uppfattningar om äldrevården Kirsi Markkanen Utvecklingschef Tehy rf.
1 Vänsterskolan Debattartiklar. 2 Aktuell krok 3 Aktuella krokar 1. Direkt krok.
Digitalteknik 7.5 hp distans: 5.1 Generella sekvenskretsar 5.1.1
Hittarps IK Kartläggningspresentation år 3.
Från Gotland på kvällen (tågtider enligt 2007) 18:28 19:03 19:41 19:32 20:32 20:53 21:19 18:30 20:32 19:06 19:54 19:58 20:22 19:01 21:40 20:44 23:37 20:11.
Arbetspensionssystemet i bilder Bildserie med centrala uppgifter om arbetspensionssystemet och dess funktion
Styrteknik: Programmering med MELSEC IL PLC2A:1
ÖVERSLAGSRÄKNING.
TÄNK PÅ ETT HELTAL MELLAN 1-50
Greppa Näringen Medlemsundersökning, kvartal 1. 1.
Helhet Händelse Agerande Kunskap om vardagsverksamheten Förståelse av vardagsverksamheten.
1 Joomla © 2009 Stefan Andersson 1. 2 MÅL 2 3 Begrepp Aktör: en användare som interagerar med webbplatsen. I diagrammet till höger finns två aktörer:
Kouzlo starých časů… Letadla Pár foteček pro vzpomínku na dávné doby, tak hezké snění… M.K. 1 I Norrköping får man inte.
ARITMETIK – OM TAL.
Resultat sammanhållen vård och omsorg om de mest sjuka äldre i Örebro län Västra länsdelen mätperiod 2014.
2 Agenda 1. Börja arbeta med Excel Hantera arbetsböcker 3. Formler 4. Formatera 5. Diagram 6. Skriva ut 7. Referenser mellan kalkylblad 8. Arbeta.
Digital och Datorteknik – EDA / Mikroprogrammering EDA Digital och Datorteknik 2009/2010 Mikroprogrammering Arbetsboken, avsnitt 28.
Arbetspensionssystemet i bilder Bildserie med centrala uppgifter om arbetspensionssystemet och dess funktion
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Styrteknik: MELSEC FX och numeriska värden PLC2C:1
Enkätresultat för Grundskolan Föräldrar 2014 Skola - Gillberga skola.
Regional handlingsplan ”Det goda livet för sjuka äldre” RESULTAT i VG+Skaraborg.
31 March 2015IS1200 Datorteknik, förel 101 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory Access 3. Byte-code i JAVA.
1 386 Från s bits adressbuss –=>4GB minne kan adresseras 32 bits databuss max klockfrekvens: 40MHz Protected mode –virtuellt minne –segmentering.
Pipelining Föreläsning 4. T exe — CPU-exekveringstid I — Antalet exekverade instruktioner CPI — Genomsnittligt antal klockcykler per instruktion T c —
Räkna till en miljard 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,14,15,16,17,18,19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, En miljard är ett.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Föreläsning 12 Sökning och Sökträd.
Digitalteknik 7.5 hp distans: 4.6 Adderare 4.45 Adderare Addition av två tal innebär att samma förfarande upprepas för varje position i talet. För varje.
HC11 & Programmering i Assembler
Förskoleenkät Föräldrar 2012 Förskoleenkät – Föräldrar Enhet:Hattmakarns förskola.
Bild 1 Prognos för länets arbetsmarknad Stefan Tjb.
Grundskola Elever 2013 Grundskoleenkät - Elever Enhet: Gillberga skola.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
När infaller Julafton och hur ofta?
Kronljusströmställaren 0, 1, 2, 3
William Sandqvist Datorteknik övning 1 Introduktion till assemblerprogrammering av Nios II William Sandqvist
Grundläggande datavetenskap, 4p
Presentationens avskrift:

EDA 451 - Digital och Datorteknik 2009-2010 MC68HC12, Arbetsbok för MC12 CPU12 Reference Guide Ur innehållet: Historik Översikt, ”single-chip-computer” DG256 Programmerarens bild (Exempel)

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

Instruktionsgrupper EXEMPEL: Motorola (Freescale) MC68HC12 Load/Store Data movement Program (Flow) control Integer arithmetic Logical operations Bit manipulation System control EXEMPEL: PowerPC Load/Store Program (Flow) control Integer arithmetic Floating-point arithmetic Processor control Synchronization Miscellanous Motorola (Freescale) MC68X00/Coldfire Data movement Program (Flow) control Integer arithmetic Floating-point arithmetic Logical operations Bit manipulation System control Cache maintenance FLEX Load/Store Data movement Program (Flow) control Integer arithmetic/test Logical operations Shift/rotate Stack operations

Korttidslagring, Stack/Ackumulator/Register Exempel: Kodning av operationen A = B + C Stack PUSH B PUSH C ADD POP A Ackumulator LOAD B ADD C STORE A Register LOAD R1,B LOAD R2,C ADD R3,R1,R2 STORE A,R3 Exempel: PDP8, R6502 MC68HC12 FLEX ... Exempel: B5500, HP3000/70 ... Exempel (CISC): IBM360, DEC PDP11/VAX MC68x00 Intel Pentium ... Exempel (RISC): PowerPC, MIPS, SPARC ... Dessutom existerar ”mellanting” av dessa. Mest namnkunnigt exempel: Intel 8086 (-186/-286/-386/-486)

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”

EXEMPEL - Registermaskiner PowerPC Zilog Z80 Motorola (Freescale) MC68X00/Coldfire

EXEMPEL Ackumulator – Intel 80xx B C ACCUMULATOR STACK POINTER 8080/8085 7 15 8 D E H L PROGRAM COUNTER INCREMENTER/DECREMENTER 8086 ACCUMULATOR BASE STACK POINTER BASE POINTER SOURCE INDEX DESTINATION INDEX INSTRUCTION POINTER STATUS FLAGS CODE SEGMENT DATA SEGMENT STACK SEGMENT EXTRA SEGMENT AH AL A X BH BL CH CL DH DL SP BP SI DI IP FLAGSH FLAGSL CS DS SS ES B X C X D X 7 8 15 80386 EAX EBX ECX EDX ESI EIP EFLAGS CODE STACK DATA AH AL A X BH BL CH CL DH DL SI IP FLAGS CS SS DS ES B X C X D X 31 16 15 8 7 EDI DI EBP BP ESP SP FS GS

EXEMPEL - Ackumulator Motorola 68HC12 Motorola 6800 Rockwell 6502 FLEX B 8-BIT ACCUMULATORS A AND B OR 16-BIT DOUBLE ACCUMULATOR D 7 D X INDEX REGISTER X 15 PC PROGRAM COUNTER SP STACK POINTER C CONDITION CODES REGISTER Motorola 68HC12 V Z N I H S A 8 Y INDEX REGISTER Y ACCA ACCUMULATOR A 7 ACCB ACCUMULATOR B IX INDEX REGISTER 15 PC PROGRAM COUNTER SP STACK POINTER I N Z V C 5 H CONDITION CODES REGISTER Motorola 6800 A ACCUMULATOR A 7 Y PCL PROGRAM COUNTER 15 S STACK POINTER B D I Z C 1 PROCESSOR STATUS REG ’P’ Rockwell 6502 INDEX REGISTER Y V N X INDEX REGISTER X PCH 8 A ACCUMULATOR A 7 B ACCUMULATOR B X INDEX REGISTER PC PROGRAM COUNTER SP STACK POINTER N Z V C 3 CONDITION CODES REGISTER FLEX

Programmerarens bild – datatyper/storlek char (8) short int (16) long int (32) long int (64) floating point (IEEE) pointers Coldfire V1 X 32 bit PowerPC 8086 16/20 bit 80386 68HC12 FLEX 8 bit

Historik 68HC12SX 68HC12S 68HC12 68HC11 6809 6801 6800 1974 1978 1982 1986 1990 1994 1998 2002 2006

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

HCS12DG256, blockdiagram

HCS12DG256, ”core”

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”

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

EXEMPEL, linjärt adressrum FFFF 4000 3FFF 1000 FFF 400 3FF FLASH RWM (”RAM”) Synlig del av EEPROM MCHCS12 Interna register

EXEMPEL, ”bankat” adressrum FFFF C000 BFFF 8000 7FFF 4000 3FFF 1000 FFF 400 3FF 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D FLASH ”Bankat” FLASH Dx256 RWM (”RAM”) Synlig del EEPROM MCHCS12 Interna register

EXEMPEL, i laborationsdator MC12 FFFF C000 BFFF 8000 7FFF 4000 3C80 1000 FFF 400 3FF FLASH (monitor/debugger) 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D ”Bankat” FLASH Dx256 Minne tillgängligt för ”användarprogram” FLASH (monitor/debugger) RWM (”RAM”) Externt IO-gränssnitt MCHCS12 Interna register

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…

HCS12DG256, ”core” Centralenhet CPU12

Registeruppsättning CPU12 B 8-BIT ACCUMULATORS A AND B OR 16-BIT DOUBLE ACCUMULATOR D 7 D X INDEX REGISTER X 15 PC PROGRAM COUNTER SP STACK POINTER C CONDITION CODES REGISTER V Z N I H S A 8 Y INDEX REGISTER Y

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”

Inherent Maskinkod för instruktionen Cykel för cykel beskrivning Flaggpåverkan

Omedelbar (Immediate) 8-bit/16-bit opr8i, 8-bitars konstant om 8-bitars register Opr16i, 16-bitars konstant om 16-bitars register

Direkt (Direct Page) Absolut (Extented) opr16a, kan adressera hela adressintervallet 0000-FFFF opr8a, kan enbart adressera intervallet 0000-00FF, anger minst signifikant byte av adressen

PC-relativ (”BRANCH”-instruktioner) 8-bitars offset (-128..127) 9-bitars offset (-256..255) 16-bitars offset (-32768..32767)

Indexerade adresseringssätt: Register relativ, konstant offset Basregister kan vara något av: X,Y,SP,PC EXEMPEL: LDAA 5,X STAA 20,Y LDAA sym,PC STA off,SP ... Observera, ingen syntaktisk skillnad. 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

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+ ... EXEMPEL:

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 ...

Indexerade adresseringssätt: Indirekt EXEMPEL: LDAA [D,X] STAA [sym,PCR] STAB [2,SP] LDAB [D,Y] ...

Instruktionsgrupper LOAD-instruktioner STORE-instruktioner Mnemonic Funktion Operation 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→SPH:SPL LDX Load index register X (M:M+1)1→XH:XL LDY Load index register Y (M:M+1)1→YH:YL 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 Mnemonic Funktion Operation STAA Store A (A)→M STAB Store B (B)→M STD Store D (A)→M, (B)→M+1 STS Store SP SPH:SPL →M:M+1 STX Store X XH:XL →M:M+1 STY Store Y YH:YL →M:M+1 MOVE-instruktioner Mnemonic Funktion Operation MOVB Move byte (8 bitar) (M1)→M2 MOVW Move word (8 bitar) (M:M+1) 1→M:M+12

Instruktioner för kopiering av registerinnehåll Mnemonic Funktion Operation TAB Transfer A to B anm: Ekv. Med TFR A,B (A)→B TAP Transfer A to CCR anm: Ekv. Med TFR A,CCR (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 anm: Ekv. Med TFR CCR,A (CCR)→A TSX Transfer SP to X anm: Ekv. Med TFR SP,X (SP)→X TSY Transfer SP to Y anm: Ekv. Med TFR SP,Y (SP)→Y TXS Transfer X to SP anm: Ekv. Med TFR X,SP (X)→SP TYS Transfer Y to SP anm: Ekv. Med TFR Y,SP (Y)→SP Använd denna Övriga finns här av ”kompatibilitetsskäl” Instruktioner för växling av registerinnehåll Mnemonic Funktion Operation 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 anm: Ekv. Med EXG D,X - EXG X,D (D) ↔ (X) XGDY Exchange D with Y anm: Ekv. Med EXG D,Y - EXG Y,D (D) ↔ (Y) Använd denna Övriga finns här av ”kompatibilitetsskäl” Instruktion för teckenutvidgning Mnemonic Funktion Operation SEX Teckenutvidga 8 bitars operand (A,B,CCR) → (D,X,Y eller SP)

Ovillkorlig programflödeskontroll Mnemonic Funktion Operation BSR Anrop av subrutin. PC-relativ operand SP-2  SP RetAdrL:RetAdrH  M(SP):M(SP+1) Adress  PC BRA “Hopp” till adress. PC-relativ operand Adress  PC CALL Anrop av subrutin Absolut operand (20 bitar) Anm: Användes vid programflödesändring mellan olika minnesbankar ($8000-$BFFF) SP-2  SP RetAdrL:RetAdrH  M(SP):M(SP+1) Subrutinadress  PC SP-1  SP (PPAGE)  M(SP) PAGE  PPAGE Subrutinadress  PC JMP “Hopp” till address. Absolut operand Subrutinadress  PC JSR Anrop av subrutin Absolut operand SP-2  SP RetAdrL:RetAdrH  M(SP):M(SP+1) Subrutinadress  PC RTC Återvänd från subrutin. Returadress från STACK och PPAGE M(SP)  (PPAGE) SP+1  SP M(SP):M(SP+1)  PCH:PCL SP+2  SP RTS Återvänd från subrutin. Returadress från STACK M(SP):M(SP+1)  PCH:PCL SP+2  SP

EXEMPEL - Modularisering ORG $1000 main: JSR init main_loop: JSR read JSR ... --- BRA main_loop init: --- RTS read: ---

Instruktioner för addition Mnemonic Funktion Operation ABA Addera B till A (A)+(B) → A ABX Addera B till X anm: Ekv. med LEAX B,X (X)+(B) → X ABY Addera B till Y anm: Ekv. med LEAY B,Y (Y)+(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 Mnemonic Funktion Operation INC Incrementera i minnet (M)+$01 → M INCA Inkrementera A (A)+ $01 → A INCB Inkrementera B (B)+ $01 → B INS Inkrementera SP anm: Ekv. med LEAS 1,SP (SP)+ $0001 → SP INX Inkrementera X anm: Ekv. med LEAX 1,X (X)+ $0001 → X INY Inkrementera Y anm: Ekv. med LEAY 1,Y (Y)+ $0001 → Y Instruktioner för subtraktion Mnemonic Funktion Operation 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 Mnemonic Funktion Operation DEC Dekrementera i minnet (M)-$01 → M DECA Dekrementera A (A)- $01 → A DECB Dekrementera B (B)- $01 → B DES Dekrementera SP anm: Ekv. med LEAS -1,SP (SP)- $0001 → SP DEX Dekrementera X anm: Ekv. med LEAX -1,X (X)- $0001 → X DEY Dekrementera Y anm: Ekv. med LEAY -1,Y (Y)- $0001 → Y

Instruktioner för logiska operationer Mnemonic Funktion Operation 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 minnesinnehåll (A)(M) A EORB Bitvis “exklusivt eller” B med minnesinnehåll (B)(M) B 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 EXEMPEL: Nollställ bit 7-bit 4 på adress $3000 LDAB $3000 ANDB #%00001111 STAB $3000 EXEMPEL: Ettställ bit 7 och bit 0 på adress $3000 LDAB $3000 ORAB #%10000001 STAB $3000 Unära operationer Mnemonic Funktion Operation CLC Nollställ carryflaggan i CCR 0  C CLI Nollställ avbrottsmask i CCR 0  I CLR Nollställ minnesinnehåll $00  M CLRA Nollställ A $00  A CLRB Nollställ B $00  B CLV Nollställ overflowflaggan I CCR 0  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 $00-(M)  M NEGA Tvåkomplementera A $00-(A)  A NEGB Tvåkomplementera B $00-(B)  B EXEMPEL: Invertera bit 2 och bit1 på adress $3000 LDAB $3000 EORB #%00000110 STAB $3000

Exempel på användning: Multiplikation med 2, tal utan tecken. Logiska skiftoperationer Mnemonic Funktion Operation LSL Logiskt vänsterskift i minnet LSLA Logiskt vänsterskift A LSLB Logiskt vänsterskift B LSLD Logiskt vänsterskift D LSR Logiskt högerskift i minnet LSRA Logiskt högerskift A LSRB Logiskt högerskift B LSRD Logiskt högerskift D Exempel på användning: Multiplikation med 2, tal utan tecken. Division med 2, tal utan tecken.

Exempel på användning, högerskift: Division med 2, tal med tecken. Aritmetiska skiftoperationer Mnemonic Funktion Operation ASL Aritmetiskt vänsterskift i minnet (ekv. med LSL) ASLA Aritmetiskt vänsterskift A (ekv. med LSLA) ASLB Aritmetiskt vänsterskift B (ekv. med LSLB) ASLD Aritmetiskt vänsterskift D (ekv. med LSLD) ASR Aritmetiskt högerskift i minnet ASRA Aritmetiskt högerskift A ASRB Aritmetiskt högerskift B Exempel på användning, högerskift: Division med 2, tal med tecken.

Exempel på användning: Skiftoperationer på tal större än 8 bitar. Instruktioner för rotation (carry-skift) EXEMPEL: Skifta ett 32-bitars tal på adress $3000, 1 steg åt höger LSR $3000 ROR $3001 ROR $3002 ROR $3003 Mnemonic Funktion Operation ROL Rotation vänster via carry i minnet ROLA Rotation vänster via carry A ROLB Rotation vänster via carry B ROR Rotation höger via carry i minnet RORA Rotation höger via carry A RORB Rotation höger via carry B Exempel på användning: Skiftoperationer på tal större än 8 bitar.

Instruktioner för jämförelser och test Mnemonic Funktion Operation 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) Mnemonic Funktion Operation TST Testa minnesinnehåll (M)-$00 TSTA Testa register A (A)-$00 TSTB Testa register B (B)-$00

Villkorlig programflödeskontroll Mnemonic Funktion Villkor Enkla flaggtest BCS “Hopp” om carry C=1 BCC “Hopp” om ICKE carry C=0 BEQ “Hopp” om zero Z=1 BNE “Hopp” om ICKE zero Z=0 BMI “Hopp” om negative N=1 BPL “Hopp” om ICKE negative N=0 BVS “Hopp” om overflow V=1 BVC “Hopp” om ICKE overflow V=0 Test av tal utan tecken BHI Villkor: R>M C + Z = 0 BHS Villkor: RM BLO Villkor: R<M BLS Villkor: RM C + Z = 1 Test av tal med tecken BGT Z + ( N  V ) = 0 BGE N  V = 0 BLT N  V = 1 BLE Z + ( N  V ) = 1

Instruktioner för räknande programslingor Mnemonic Funktion Villkor DBEQ Dekrementera innehåll i register. “Hoppa” om resultatet = 0. (register: A,B,D,X,Y,SP) (register) – 1  register om(register)=0; “hoppa”; annars: nästa instruktion DBNE Dekrementera innehåll i register. “Hoppa” om resultatet  0. (register: A,B,D,X,Y,SP) (register) – 1  register om(register)0; “hoppa”; annars: nästa instruktion IBEQ Inkrementera innehåll i register. “Hoppa” om resultatet = 0. (register: A,B,D,X,Y,SP) (register) + 1  register om(register)=0; “hoppa”; annars: nästa instruktion IBNE Inkrementera innehåll i register. “Hoppa” om resultatet  0. (register: A,B,D,X,Y,SP) (register) + 1  register om(register)0; “hoppa”; annars: nästa instruktion TBEQ Testa innehåll i register. “Hoppa” om resultatet = 0. (register: A,B,D,X,Y,SP) om(register)=0; “hoppa”; annars: nästa instruktion TBNE Testa innehåll i register. “Hoppa” om resultatet  0. (register: A,B,D,X,Y,SP) om(register)0; “hoppa”; annars: nästa instruktion

Kontrollstrukturer loop ... until( Villkor ) while( Villkor ) loop If( Villkor ) then ... if( Villkor ) then ... else ... end if(Villkor) { Satser; } if(Villkor) { Satser1; }else{ Satser2; } while(Villkor) { Satser; } do{ Satser; } while(Villkor);

If (...) {...} ... ”Rättfram” kodning... DipSwitch EQU $600 HexDisp EQU $400 ... TST DipSwitch BNE assign BRA end assign LDAB DipSwitch STAB HexDisp end: if (DipSwitch != 0) HexDisp = Dipswitch; BNE “Hopp” om ICKE zero Z=0 BEQ “Hopp” om zero Z=1

If (...) {...} ... Bättre kodning... DipSwitch EQU $600 HexDisp EQU $400 ... TST DipSwitch BEQ end LDAB DipSwitch STAB HexDisp end: if (DipSwitch != 0) HexDisp = Dipswitch; BNE “Hopp” om ICKE zero Z=0 BEQ “Hopp” om zero Z=1

If (...) {...} else { ...} ... DipSwitch EQU $600 HexDisp EQU $400 LDAB DipSwitch TSTB BEQ not_else LDAB #0 STAB HexDisp BRA end not_else: LDAB #1 STAB HexDisp end: if (DipSwitch == 0) HexDisp = 1; else HexDisp = 0; BEQ “Hopp” om zero Z=1

If (...) {...} else { ...} ... DipSwitch EQU $600 HexDisp EQU $400 LDAB DipSwitch TSTB BNE else LDAB #1 STAB HexDisp BRA end else: LDAB #0 STAB HexDisp end: if (DipSwitch == 0) HexDisp = 1; else HexDisp = 0; BNE “Hopp” om ICKE zero Z=0

If (...) {...} else { ...} ... DipSwitch EQU $600 HexDisp EQU $400 LDAB DipSwitch CMPB #5 BHS then LDAB #0 STAB HexDisp BRA end then: LDAB #1 STAB HexDisp end: if (DipSwitch >= 5) HexDisp = 1; else HexDisp = 0; Test av tal utan tecken BHS Villkor: RM C=0 Test av tal med tecken BGE Villkor: RM N  V = 0

while (...) {...} ... DipSwitch EQU $600 HexDisp EQU $400 while: LDAB DipSwitch TSTB BEQ end_while LDAB #1 STAB HexDisp BRA while end_while: LDAB #0 while (DipSwitch != 0) HexDisp = 1; HexDisp = 0; BEQ “Hopp” om zero Z=1

while (...) {...} Delay: LDD ”count” Delay_loop: NOP ... SUBD #1 BHI Delay_loop Delay_end: RTS Delay( unsigned int count ) { while (count > 0) count = count - 1; } Test av tal utan tecken BHI Villkor: R>M C + Z = 0 Test av tal med tecken BGT Villkor: R>M Z + ( N  V ) = 0

Fördröjning Delay( unsigned int count ) { while (count > 0) instruktion antal ggr. NOP 1 count SUBD #1 BHI (”taken”) (not taken) RTS Delay( unsigned int count ) { while (count > 0) count = count - 1; } Parameter ’count’ finns i register D vid anrop. Anm. count=0 är EJ TILLÅTET. ; Subrutin 'Delay' Delay: NOP Delay_loop: NOP NOP SUBD #1 BHI Delay_loop RTS = NOP ( 1 + 2 count) + SUBD#1 ( count ) + BHIT ( count-1 ) + BHINT ( 1 ) + RTS ( 1 ) = ? 51

= NOP ( 1 + 2 count) + SUBD#1 ( count ) + BHIT ( count ) + BHINT ( 1 ) + RTS ( 1 ) = ? (exekveringstider, dvs antal cykler, fås ur handboken...) instruktion # cykler NOP 1 SUBD #1 2 BHI 3/1 RTS 5 = 1 ( 1 + 2 count) + 2 ( count ) + 3 ( count-1 ) + 1 ( 1 ) + 5 ( 1 ) = 7 count + 4

MC12 Minimal/maximal fördröjning vid olika klockfrekvenser Frekvens/ cykeltid Min. (’count’ = 1) 11 cykler Max. (’count’ = $FFFF) 458749 cykler 4 MHz/ 250 ns. 2,75 s 115 ms 8 MHz/ 125 ns. 1,375 s 57,34 ms 16 MHz/ 62,5 ns. 687,5 ns 28,67 ms 25 MHz/ 40 ns. 440 ns 18,35 ms MC12

MC12 Exempel: Bestäm ’count’ för 10 ms fördröjning i ett MC12-system Frekvens/ cykeltid Min. (’count’ = 1) 11 cykler Max. (’count’ = $FFFF) 458749 cykler 8 MHz/ 125 ns. 1,375 s 57,34 ms MC12 Lösning: Uppskatta motsvarande fördröjning i simulatorn ... Tar c:a 14 sekunder

Hur många bytes kod motsvarar rutinen? 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?

do {...} while (...) DipSwitch EQU $600 HexDisp EQU $400 ... do: MOVB #0,HexDisp LDAB DipSwitch CMPB #10 BHS do do { HexDisp = 0; }while (DipSwitch >= 10); Test av tal utan tecken BHS Villkor: RM C=0

EXEMPEL – ”memcopy0( from , to, size )” Kan (informellt) kodas... memcopy0: LDAB ”size” LDX ”from” LDY ”to” memcopy0_loop: TSTB BEQ memcopy0_end LDAA 1,X+ STAA 1,Y+ DECB BRA memcopy0_loop memcopy0_end: RTS

EXEMPEL – ”memcopy1( from , to, size )” Kan (informellt) kodas... memcopy1: LDAB ”size” LDX ”from” LDY ”to” memcopy1_loop: TSTB BEQ memcopy1_end MOVB 1,X+,1,Y+ DECB BRA memcopy1_loop memcopy1_end: RTS

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

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 0, vid anrop???

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