MC68HC12
Digital och Datorteknik – EDA451 2009/2010
1
EDA 451 - Digital och Datorteknik2009-2010
MC68HC12, Arbetsbok för MC12CPU12 Reference Guide
Ur innehållet:HistorikÖversikt, ”single-chip-computer” DG256Programmerarens bild(Exempel)
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
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
Instruktionsuppsättning
2
”ISA” – Instruction Set Architecture
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
Instruktionsgrupper
3
EXEMPEL:
Motorola (Freescale)MC68X00/ColdfireData movementProgram (Flow) controlInteger arithmeticFloating-point arithmeticLogical operationsBit manipulationSystem controlCache maintenance
PowerPC
Load/StoreProgram (Flow) controlInteger arithmeticFloating-point arithmeticProcessor controlSynchronizationMiscellanous
Motorola (Freescale)MC68HC12Load/StoreData movementProgram (Flow) controlInteger arithmeticLogical operationsBit manipulationSystem control
FLEXLoad/StoreData movementProgram (Flow) controlInteger arithmetic/testLogical operationsShift/rotateStack operations
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
Korttidslagring, Stack/Ackumulator/Register
4
Stack
PUSH BPUSH CADDPOP A
Exempel:Kodning av operationen A = B + C
Ackumulator
LOAD BADD CSTORE
A
Register
LOAD R1,BLOAD R2,CADD R3,R1,R2STORE A,R3
Dessutom existerar ”mellanting” av dessa.
Exempel:B5500,HP3000/70...
Exempel:PDP8,R6502MC68HC12FLEX...
Exempel (CISC):IBM360,DEC PDP11/VAXMC68x00Intel Pentium...
Mest namnkunnigt exempel: Intel 8086 (-186/-286/-386/-486)
Exempel (RISC):PowerPC,MIPS,SPARC...
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
Register – programmerarens bild
5
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”
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
EXEMPEL - Registermaskiner
6
Motorola (Freescale)MC68X00/Coldfire
PowerPC
Zilog Z80
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
EXEMPEL Ackumulator – Intel 80xx
7
80386
EAX
EBX
ECX
EDX
ESI
EIP
EFLAGS
CODE
STACK
DATA
AH ALA 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 0
EDIDI
EBPBP
ESPSP
0151631
FS
GS
015
B C
ACCUMULATOR
STACK POINTER
8080/808507
015
07815
D E
H L
B C
PROGRAM COUNTER
INCREMENTER/DECREMENTER
8086
ACCUMULATOR
BASE
ACCUMULATOR
ACCUMULATOR
STACK POINTER
BASE POINTER
SOURCE INDEX
DESTINATION INDEX
INSTRUCTION POINTER
STATUS FLAGS
CODE SEGMENT
DATA SEGMENT
STACK SEGMENT
EXTRA SEGMENT
AH ALA X
BH BL
CH CL
DH DL
SP
BP
SI
DI
IP
FLAGSH FLAGSL
CS
DS
SS
ES
B X
C X
D X
07815
015
0
0
15
15
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
EXEMPEL - Ackumulator
8
ACCA ACCUMULATOR A
7 0
ACCB ACCUMULATOR B
7 0
IX INDEX REGISTER
15 0
PC PROGRAM COUNTER
15 0
SP STACK POINTER
15 0
I N Z V C
05
H CONDITION CODES REGISTER
Motorola 6800
A ACCUMULATOR A
7 0
Y
7 0
PCL PROGRAM COUNTER
15 0
S STACK POINTER
15 0
B D I Z C
07
1 PROCESSOR STATUS REG ’P’
Rockwell 6502
INDEX REGISTER Y
1
VN
X
7 0
INDEX REGISTER X
PCH
78
B 8-BIT ACCUMULATORS A AND B OR16-BIT DOUBLE ACCUMULATOR D
7 0
D
X INDEX REGISTER X
15 0
PC PROGRAM COUNTER
15 0
SP STACK POINTER
15 0
C
0
CONDITION CODES REGISTER
Motorola 68HC12
VZNIHXS
7
A
815
Y INDEX REGISTER Y
15 0
A ACCUMULATOR A
7 0
B ACCUMULATOR B
7 0
X INDEX REGISTER
7 0
PC PROGRAM COUNTER
7 0
SP STACK POINTER
7 0
N Z V C
03
CONDITION CODES REGISTER
FLEX
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
Programmerarens bild – datatyper/storlek
9
char(8)
shortint
(16)
longint
(32)
longint
(64)
floatingpoint(IEEE)
pointers
Coldfire V1 X X X 32 bit
PowerPC X X X X X
8086 X X 16/20 bit
80386 X X X 32 bit
68HC12 X X 16/20 bit
FLEX X 8 bit
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
Historik
10
1974
6800
68016809
68HC11
68HC12
68HC12S
68HC12SX
1978 1982 1986 1990 1994 1998 2002 2006
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
11
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
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
12
HCS12DG256,blockdiagram
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
13
HCS12DG256, ”core”
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
14
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”
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
15
Primärminne
Icke flyktigt minneUpp till 256 Kbyte i ”minnesbankar”48 kB utan användning av ”bankar”4 kB EEPROM
Flyktigt minne12 kB RAM
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
16
FFFF
40003FFF
1000FFF4003FF
0
FLASH
RWM (”RAM”)
Synlig del av EEPROM
MCHCS12 Interna register
EXEMPEL, linjärt adressrum
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
17
FFFF
C000BFFF
80007FFF
40003FFF
1000FFF4003FF
0
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D
FLASH
FLASH
”Bankat” FLASHDx256
RWM (”RAM”)
Synlig del EEPROM
MCHCS12 Interna register
EXEMPEL, ”bankat” adressrum
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
18
FFFF
C000BFFF
80007FFF
40003C80
1000FFF4003FF
0
30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D
FLASH (monitor/debugger)
”Bankat” FLASHDx256
RWM (”RAM”)
Externt IO-gränssnitt
MCHCS12 Interna register
EXEMPEL, i laborationsdator MC12
FLASH (monitor/debugger)
Minne tillgängligt för ”användarprogram”
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
19
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…
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
20
HCS12DG256, ”core” Centralenhet CPU12
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
Registeruppsättning CPU12
21
B 8-BIT ACCUMULATORS A AND B OR16-BIT DOUBLE ACCUMULATOR D
7 0
D
X INDEX REGISTER X
15 0
PC PROGRAM COUNTER
15 0
SP STACK POINTER
15 0
C
0
CONDITION CODES REGISTERVZNIHXS
7
A
815
Y INDEX REGISTER Y
15 0
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
Adresseringssätt
22
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”
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
23
Inherent
Maskinkod för instruktionen
Cykel för cykel beskrivning
Flaggpåverkan
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
24
Omedelbar (Immediate) 8-bit/16-bit
opr8i, 8-bitars konstant om 8-bitars register
Opr16i, 16-bitars konstant om 16-bitars register
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
25
Direkt (Direct Page)Absolut (Extented)
opr8a, kan enbart adressera intervallet 0000-00FF, anger minst signifikant byte av adressen
opr16a, kan adressera hela adressintervallet 0000-FFFF
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
26
PC-relativ (”BRANCH”-instruktioner) 8-bitars offset (-128..127) 9-bitars offset (-256..255) 16-bitars offset (-32768..32767)
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
27
Indexerade adresseringssätt: Register relativ, konstant
offset
Specialfall: n,PCRLDAA sym,PCRAntag PC pekar på nästa instruktion.Operanden är här PC-sym, jfr offsetberäkning för ”BRA”-instruktioner
Observera, ingen syntaktisk skillnad. Assemblator väljer effektivast kodning
Basregister kan vara något av: X,Y,SP,PCEXEMPEL:
LDAA 5,XSTAA 20,YLDAA sym,PCSTA off,SP...
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
28
Indexerade adresseringssätt: Auto pre- increment/decrement Auto post- increment/decrement
Basregister kan vara något av: X,Y,SPEXEMPEL:
LDAA 1,-XSTAA 4,Y-STAB 8,+SPLDAB 7,SP+...
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
29
Indexerade adresseringssätt: Register relativ, offset i ackumulator
Basregister kan vara något av: X,Y,SP,PCEXEMPEL:
LDAA A,XSTAA B,YSTAB D,SPLDAB D,PC...
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
30
Indexerade adresseringssätt: Indirekt
EXEMPEL:LDAA [D,X]STAA [sym,PCR]STAB [2,SP]LDAB [D,Y]...
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
Mnemonic Funktion OperationLDAA Load A (M)→ALDAB Load B (M)→BLDD Load D (M:M+1)1→A:BLDS 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→SPLEAX Load effective address into X Effective address→XLEAY Load effective address into Y Effective address→Y
Instruktionsgrupper
31
LOAD-instruktioner
STORE-instruktionerMnemonic Funktion OperationSTAA Store A (A)→MSTAB Store B (B)→MSTD Store D (A)→M, (B)→M+1STS Store SP SPH:SPL →M:M+1STX Store X XH:XL →M:M+1STY Store Y YH:YL →M:M+1
Mnemonic Funktion OperationMOVB Move byte (8 bitar) (M1)→M2
MOVW Move word (8 bitar) (M:M+1) 1→M:M+12
MOVE-instruktioner
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
32
Instruktioner för kopiering av registerinnehållMnemonic Funktion Operation
TAB Transfer A to Banm: Ekv. Med TFR A,B
(A)→B
TAP Transfer A to CCRanm: Ekv. Med TFR A,CCR
(A)→CCR
TBA Transfer B to A (B)→ATFR 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 Xanm: Ekv. Med TFR SP,X
(SP)→X
TSY Transfer SP to Yanm: Ekv. Med TFR SP,Y
(SP)→Y
TXS Transfer X to SPanm: Ekv. Med TFR X,SP
(X)→SP
TYS Transfer Y to SPanm: Ekv. Med TFR Y,SP
(Y)→SP
Använd denna
Övriga finns här av ”kompatibilitetsskäl”
Mnemonic Funktion OperationEXG 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 Yanm: Ekv. Med
EXG D,Y - EXG Y,D
(D) ↔ (Y)
Instruktioner för växling av registerinnehåll
Använd denna
Övriga finns här av ”kompatibilitetsskäl”
Mnemonic Funktion Operation
SEX Teckenutvidga 8 bitars operand (A,B,CCR) →(D,X,Y eller SP)
Instruktion för teckenutvidgning
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
Mnemonic Funktion OperationBSR Anrop av subrutin.
PC-relativ operandSP-2 SP
RetAdrL:RetAdrH M(SP):M(SP+1)
Adress PCBRA “Hopp” till adress.
PC-relativ operandAdress PC
CALL Anrop av subrutinAbsolut operand (20 bitar)
Anm: Användes vid programflödesändring mellan olika minnesbankar ($8000-
$BFFF)
SP-2 SPRetAdrL:RetAdrH
M(SP):M(SP+1)
Subrutinadress PCSP-1 SP
(PPAGE) M(SP)
PAGE PPAGESubrutinadress PC
JMP “Hopp” till address.Absolut operand
Subrutinadress PC
JSR Anrop av subrutinAbsolut operand
SP-2 SPRetAdrL:RetAdrH
M(SP):M(SP+1)
Subrutinadress PCRTC Å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 SPRTS Återvänd från subrutin.
Returadress från STACKM(SP):M(SP+1) PCH:PCL
SP+2 SP
33
Ovillkorlig programflödeskontroll
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
EXEMPEL - Modularisering
34
ORG $1000main: JSR initmain_loop: JSR read
JSR ...---BRA main_loop
init: ---RTS
read: ---RTS
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
35
Mnemonic Funktion OperationABA Addera B till A (A)+(B) → AABX 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 → AADCB Addition med carry till B (B)+(M)+C → BADDA Addition till A (A)+(M) → AADDB Addition till B (B)+(M) → BADDD Addition till D (A:B) (D)+(M:M+1) →D
Instruktioner för addition
Instruktioner för subtraktionMnemonic Funktion Operation
SBA Subtrahera B från A (A)-(B) → ASBCA Subtrahera med borrow från A (A)-(M)-C → ASBCB Subtrahera med borrow från B (B)-(M)-C → BSUBA Subtrahera från A (A)-(M) → ASUBB Subtrahera från B (B)-(M) → BSUBD Subtrahera från D (A:B) (D)-(M:M+1) →D
Mnemonic Funktion OperationINC Incrementera i minnet (M)+$01 → MINCA Inkrementera A (A)+ $01 → AINCB Inkrementera B (B)+ $01 → BINS 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 Yanm: Ekv. med LEAY 1,Y
(Y)+ $0001 → Y
Mnemonic Funktion OperationDEC Dekrementera i minnet (M)-$01 → MDECA Dekrementera A (A)- $01 → ADECB Dekrementera B (B)- $01 → BDES 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 Yanm: Ekv. med LEAY -1,Y
(Y)- $0001 → Y
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
36
Instruktioner för logiska operationerMnemonic Funktion OperationANDA Bitvis “och” A med minnesinnehåll (A)(M) AANDB Bitvis “och” A med minnesinnehåll (B)(M) BANDCC Bitvis “och” CC med minnesinnehåll (CCR)(M) CCREORA 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) AORAB Bitvis “eller” B med minnesinnehåll (B)+(M) BORCC Bitvis “eller” CCR med minnesinnehåll (CCR)+(M) CCR
Mnemonic Funktion OperationCLC Nollställ carryflaggan i CCR 0 CCLI Nollställ avbrottsmask i CCR 0 ICLR Nollställ minnesinnehåll $00 MCLRA Nollställ A $00 ACLRB Nollställ B $00 BCLV Nollställ overflowflaggan I CCR 0 VCOM Ettkomplementera minnesinnehåll $FF-(M) MCOMA Ettkomplementera A $FF-(A) ACOMB Ettkomplementera B $FF-(B) ANEG Tvåkomplementera minnesinnehåll $00-(M) MNEGA Tvåkomplementera A $00-(A) ANEGB Tvåkomplementera B $00-(B) B
Unära operationer
EXEMPEL: Nollställ bit 7-bit 4 på adress $3000
LDAB $3000ANDB #%00001111STAB $3000
EXEMPEL: Ettställ bit 7 och bit 0 på adress $3000
LDAB $3000ORAB #%10000001STAB $3000
EXEMPEL: Invertera bit 2 och bit1 på adress $3000
LDAB $3000EORB #%00000110STAB $3000
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
37
Mnemonic Funktion OperationLSL Logiskt vänsterskift i
minnetLSLA Logiskt vänsterskift ALSLB Logiskt vänsterskift BLSLD Logiskt vänsterskift D
LSR Logiskt högerskift i minnetLSRA Logiskt högerskift ALSRB Logiskt högerskift B
LSRD Logiskt högerskift D
b0 b7 C 0
b0 b7 C 0
b0 b7 C
b0 b7 0
A B
b0 b7 C
b0 b7 0
A B
Logiska skiftoperationer
Exempel på användning:Multiplikation med 2, tal utan tecken.Division med 2, tal utan tecken.
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
38
Aritmetiska skiftoperationerMnemonic 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 AASRB Aritmetiskt högerskift B
b0 b7 C 0
b0 b7 C
b0 b7 0
A B
b0 b7 C
Exempel på användning, högerskift:Division med 2, tal med tecken.
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
39
Instruktioner för rotation (carry-skift)
Mnemonic Funktion OperationROL Rotation vänster via carry i
minnetROLA Rotation vänster via carry
AROLB Rotation vänster via carry
BROR Rotation höger via carry i
minnetRORA Rotation höger via carry ARORB Rotation höger via carry B
b0 b7 C
b0 b7 C
Exempel på användning:Skiftoperationer på tal större än 8 bitar.
EXEMPEL: Skifta ett 32-bitars tal på adress $3000, 1 steg åt höger
LSR $3000ROR $3001ROR $3002ROR $3003
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
40
Instruktioner för jämförelser och testMnemonic 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 OperationTST Testa minnesinnehåll (M)-$00TSTA Testa register A (A)-$00TSTB Testa register B (B)-$00
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
41
Mnemonic Funktion VillkorEnkla flaggtest
BCS “Hopp” om carry C=1BCC “Hopp” om ICKE carry C=0BEQ “Hopp” om zero Z=1BNE “Hopp” om ICKE zero Z=0BMI “Hopp” om negative N=1BPL “Hopp” om ICKE negative N=0BVS “Hopp” om overflow V=1BVC “Hopp” om ICKE overflow V=0
Test av tal utan teckenBHI Villkor: R>M C + Z = 0BHS Villkor: RM C=0BLO Villkor: R<M C=1BLS Villkor: RM C + Z = 1
Test av tal med teckenBGT Villkor: R>M Z + ( N V ) = 0BGE Villkor: RM N V = 0BLT Villkor: R<M N V = 1BLE Villkor: RM Z + ( N V ) = 1
Villkorlig programflödeskontroll
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
42
Mnemonic Funktion VillkorDBEQ Dekrementera innehåll i register.
“Hoppa” om resultatet = 0.(register: A,B,D,X,Y,SP)
(register) – 1 registerom(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 registerom(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 registerom(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 registerom(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
Instruktioner för räknande programslingor
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
Kontrollstrukturer
43
Villkor
Satser
NEJ
End
Then
JA
If
Sista ?
Satser
NEJ
JA
LOOP
UNTIL
NEJ
JA
Villkor
Satser 1
Satser 2
End
Then
Else
If
If( Villkor ) then ... if( Villkor ) then ...else ...end
loop...until( Villkor )
Villkor
Satser
End
Then
While
NEJ
JA
while( Villkor )loop
if(Villkor) { Satser;}
if(Villkor) { Satser1;}else{ Satser2;}
while(Villkor) { Satser;}
do{ Satser;} while(Villkor);
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
44
If (...) {...}”Rättfram” kodning...DipSwitch EQU $600HexDisp EQU $400
...TST DipSwitchBNE assignBRA end
assign LDAB DipSwitchSTAB HexDisp
end:
if (DipSwitch != 0) HexDisp = Dipswitch;
BEQ “Hopp” om zero Z=1
Villkor
Satser
NEJ
End
Then
JA
If
BNE “Hopp” om ICKE zero Z=0
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
45
If (...) {...}
if (DipSwitch != 0) HexDisp = Dipswitch;
BEQ “Hopp” om zero Z=1
Villkor
Satser
NEJ
End
Then
JA
If
BNE “Hopp” om ICKE zero Z=0
Bättre kodning...DipSwitch EQU $600HexDisp EQU $400
...TST DipSwitchBEQ end
LDAB DipSwitchSTAB HexDisp
end:
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
If (...) {...} else { ...}
46
DipSwitch EQU $600HexDisp EQU $400
...LDAB DipSwitch...TSTBBEQ not_elseLDAB #0STAB HexDispBRA end
not_else: LDAB #1STAB HexDisp
end:
if (DipSwitch == 0)HexDisp = 1;
elseHexDisp = 0;
NEJ
JA
Villkor
Satser 1
Satser 2
End
Then
Else
If
BEQ “Hopp” om zero Z=1
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
47
If (...) {...} else { ...} DipSwitch EQU $600HexDisp EQU $400
...LDAB DipSwitch...TSTBBNE elseLDAB #1STAB HexDispBRA end
else: LDAB #0STAB HexDisp
end:
if (DipSwitch == 0)HexDisp = 1;
elseHexDisp = 0;
NEJ
JA
Villkor
Satser 1
Satser 2
End
Then
Else
If
BNE “Hopp” om ICKE zero Z=0
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
48
DipSwitch EQU $600HexDisp EQU $400
...LDAB DipSwitch...CMPB #5BHS thenLDAB #0STAB HexDispBRA end
then: LDAB #1STAB HexDisp
end:
if (DipSwitch >= 5)HexDisp = 1;
elseHexDisp = 0;
NEJ
JA
Villkor
Satser 1
Satser 2
End
Then
Else
If
If (...) {...} else { ...}
Test av tal utan teckenBHS Villkor: RM C=0
Test av tal med teckenBGE Villkor: RM N V = 0
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
49
while (...) {...}
while (DipSwitch != 0)HexDisp = 1;
HexDisp = 0;
Villkor
Satser 1
End
Then
While
NEJ
JA
DipSwitch EQU $600HexDisp EQU $400
...
while:LDAB DipSwitch...TSTBBEQ end_whileLDAB #1STAB HexDispBRA while
end_while:LDAB #0STAB HexDisp
BEQ “Hopp” om zero Z=1
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
50
while (...) {...}
Delay( unsigned int count ){ while (count > 0) count = count - 1;}
Villkor
Satser 1
End
Then
While
NEJ
JA
Delay: LDD ”count”Delay_loop:
NOP...NOP
SUBD #1 BHI Delay_loop
Delay_end: RTS
Test av tal utan teckenBHI Villkor: R>M C + Z = 0
Test av tal med teckenBGT Villkor: R>M Z + ( N V ) = 0
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
51
FördröjningDelay( unsigned int count ){ while (count > 0) count = count - 1;}
; Subrutin 'Delay'Delay: NOPDelay_loop: NOP
NOPSUBD #1 BHI Delay_loopRTS
Parameter ’count’ finns i register D vidanrop. Anm. count=0 är EJ TILLÅTET.
instruktion antal ggr.
NOP 1
NOP count
NOP count
SUBD #1 count
BHI count (”taken”)
BHI 1(not taken)
RTS 1
= NOP ( 1 + 2 count) + SUBD#1 ( count )+ BHIT ( count-1 ) + BHINT ( 1 ) + RTS ( 1 )= ?
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
52
(exekveringstider, dvs antal cykler, fås ur handboken...)
instruktion # cykler
NOP 1
SUBD #1 2
BHI 3/1
RTS 5
= NOP ( 1 + 2 count) + SUBD#1 ( count )+ BHIT ( count ) + BHINT ( 1 ) + RTS ( 1 )= ?
= 1 ( 1 + 2 count) + 2 ( count )+ 3 ( count-1 ) + 1 ( 1 ) + 5 ( 1 )= 7 count + 4
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
53
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
MC12MC12
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
54
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 msMC12MC12
Lösning:
114287
4125
10000000
10000000125)47(
10125)47(
count
nsnscount
msnscount
Uppskatta motsvarande fördröjning i simulatorn
... Tar c:a 14 sekunder
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
55
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 ADelay1ADelay1: BSR ADelay2ADelay2: RTS
Hur många bytes kod motsvarar rutinen?Hur många klockcyklers fördröjning ger den?
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
56
do {...} while (...)
do{
HexDisp = 0;}while (DipSwitch >= 10);
DipSwitch EQU $600HexDisp EQU $400
...do:
MOVB #0,HexDisp
LDAB DipSwitchCMPB #10BHS do...
Sista ?
Satser
NEJ
JA
LOOP
UNTIL
Test av tal utan teckenBHS Villkor: RM C=0
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
EXEMPEL – ”memcopy0( from , to, size )”
57
Kan (informellt) kodas...memcopy0: LDAB ”size”
LDX ”from”LDY ”to”
memcopy0_loop: TSTBBEQ memcopy0_endLDAA 1,X+STAA 1,Y+DECBBRA memcopy0_loop
memcopy0_end: RTS
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
58
EXEMPEL – ”memcopy1( from , to, size )”
Kan (informellt) kodas...memcopy1: LDAB ”size”
LDX ”from”LDY ”to”
memcopy1_loop: TSTBBEQ memcopy1_endMOVB 1,X+,1,Y+DECBBRA memcopy1_loop
memcopy1_end: RTS
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
59
EXEMPEL – ”memcopy2( from , to, size )”
Kan (informellt) kodas...memcopy2: LDAB ”size”
LDX ”from”LDY ”to”
memcopy2_loop: SUBB #1BMI memcopy2_endMOVB B,X,B,YBRA memcopy2_loop
memcopy2_end: RTS
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
60
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???
MC68HC12
Digital och Datorteknik – EDA451 2009/2010
61
EXEMPEL – ”memcopy( from , to, size )”
memcopy: LDAB ”size”BEQ memcopy_endLDX ”from”LDY ”to”
memcopy_loop: MOVB 1,X+,1,Y+DBNE B,memcopy_loop
memcopy_end: RTS
En effektiv implementering....