Presentation laddar. Vänta.

Presentation laddar. Vänta.

HC11 & Programmering i Assembler Högnivå språk Assembler MCU Maskin kod.

Liknande presentationer


En presentation över ämnet: "HC11 & Programmering i Assembler Högnivå språk Assembler MCU Maskin kod."— Presentationens avskrift:

1 HC11 & Programmering i Assembler Högnivå språk Assembler MCU Maskin kod

2 Maskinkod (Binärkod) De kombinationer av 1:or och 0: som finns lagrade i programminnet och som processorn jobbar med. Representerar de instruktioner och data som processorn förstår och kan utföra Ex (i hexadecimal form). CE10008610A7218604A723 Maskinkoden är dock svårförståelig för oss människor så vi har satt namn på de kombinationer som representerar instruktioner; Assembler.

3 Assembler Ett slags programmeringsspråk som använder ordliknande symboler Assemblatorn översätter ”orden” till talvärden (asm  maskinkod) Syntax och symboler assemblatorspecifika. Ex. CE10008610A7218604A723 CE1000 = ldx #0x1000 ;Ladda indexregister X med 0x1000 8610 = ldaa #0x10 ;Ladda AccA med värdet 10 A721 = staa 0x21,x ;Lagra värdet i AccA på adressen 0x21 + det värde som finns i indexregister X. 8604 = ldaa #0x04 A723 = staa 0x23,x

4 Syntax LABELOPKODOPERAND(ER);KOMMENTAR Ex STARTLDAA#0x0F;Start av program STAA0xFF ADDA0x0F BRASTART;Hoppar till START Label: Förbättrar läsbarheten, Ger oss möjlighet att hänvisa till olika delar av koden. Skiljer på versaler/gemener Opkod: (Mnemoniac): Instruktionerna i ”kompakt engelsk form”. Operanderna: 0 – 3 st. Separeras med komma. Uttryck tillåtna. T.ex: LDAA#VAR1 + 3

5 Operander Normalt adresser (syftar till adressernas innehåll) Ex: BRA0x0F BEQSTART ADDA0xFF;Adderar AccA med värdet som finns på adressen 0xFF. Resultatet  AccA # indikerar ett värde/konstant Ex:ADDA#0xFF;Adderar AccA med 0xFF. Resultatet  AccA –Representation. 5 sorter: Anges m. ändelsesuffix BinB,b% OktO,o,Q,q HexH,h0x,$ DecD,d,inget Tecken’ ’ ex ’S’

6 HC11 & Assembler Ur programmeringssynpunkt består HC11:an av adresskartan + arbetsregister Assemblerprogrammering består (till 99 %) av manipulering och förflyttning av data i arbetsregistren och på adresskartan. Arbetsregistren finns INTE på adresskartan. Åtkomst sker via speciella instruktioner. Ex: LDAA#0x33 Länkfilen berättar för länkaren var olika programsegment ska placeras

7 Arbetsregistren/Accumulatorer 7 till antalet. Ligger alldeles intill ALU:n. Instruktioner på dessa är snabba… –Accumulator A, 8 bitar –Accumulator B, 8 bitar –Accumulator D (Acca + AccB), 16 bitar –Indexregister X, 16 bitar –Indexregister Y, 16 bitar –Stackpekaren, 16 bitar –Programpekaren, 16 bitar –Statusregistret, 8 bitar Se HIP s 3.1.7

8 Asseblerdirektiv 1 Förutom assemblerinstruktioner innehåller assemblerkod assemblerdirektiv, direktiv till assemblatorn hur den ska ”bete” sig i vissa lägen. Jämförbar med # i C. Bl. a: –Var i minnet ska kod placeras –Definitioner –Andra kod-filer som ska inkluderas m.m Används av både assemblator och länkaren

9 Assemblerdirektiv 2 EQU / DEFINE CONFIGEQU0X903F NAME PUBLIC PUBLICANOTHER_FUNCTION RSEG RSEGCODE;Överlåter åt länkaren att placera koden där länkfilen beskriver. ORG ORG0x1000;Absolut adressering DS.B / DC.B Array1DS.B10 END IF / ELSE / ENDIF

10 Assemblerinstruktioner In/ut ur register/minneLDAA, STAB Flytta, BytaTAB, TBA, TSX StackenPSHB, PULA MatematiskaADDA. SUBB, MUL, IDIV Öka/MinskaINCA, DECB JämförelseCBA, CMPA Logiska/BitmanipuleraANDB, ORAA, NEGB, BCLR SkiftLSLA, LSRA, ROLA, ASLA Programflöde grenvalBNE, BEQ, BHI, BLO (tittar på statusregistret) subrutinJSR, RTS, JMP, RTI ÖvrigtNOP

11 Adresseringssätt(mode) Immediate Själva värdet som argumentLDAA#0xAA Extended Adressen (2 byte) som argumentLDD0xBB00 Direct Adressen (1 byte) som argumentLDAA0x33 Indexed Adressen som finns i ett indexregister(2 byte) + offset LDD4,x Inherent Verkar enbart på registrenINCB Relative Adressen är ett offset från PCBEQLIKA (i praktiken låter man assemblatorn beräkna offset)

12 Statusregister 1 Innehåller flaggor(bitar) som indikerar status och resultat av vissa instruktioner –BitNamnInstruktion som påverkar CCarryADD, SUB V2:nd Complement overflow ZZeroSUB, CMP NNegativSUB, ADD HHalf CarryADD S, X, IIndikerar/styr bl.a. interrupt

13 Statusregister 2 Många instruktioner läser bitar i statusregistret och agerar utifrån värdet. –Ex: BEQ, BNE, BPL osv. Tittar på bl.a Z & N- flaggorna.

14 Ex. Instruktioner LDA STA CMP BEQ BRA / JMP JSR / RTS

15 Subrutiner Ex: MainLDAA#0xFF JSRmy_function STAAmy_variable;0xAA sparas till ;my_variable.. My_function LDAA#0xAA RTS END

16 Länkfilen Berättar för länkaren var olika avsnitt i koden ska läggas: –Variabler bör tex läggas på adresser där programmet får ändra värdena (RAM) –Programmet/Konstanter bör läggas på adresser där det finns minne som behåller informationen även efter ett strömavbrott (ROM), liksom interruptvektorerna Berättar också vilken processor

17 Exempel TINY Tiny.S07 ;A nonsens exampleprogram!! NAMEmain PUBLICmain RSEGTDATA NUMBERDS.B1 BUFFERDS.B10 RSEGTCODE mainLDS#0xFF LDX#NUMBER LDY#BUFFER finishBRAfinish END Tinyvect.S07 EXTERNmain RSEGTCODE dummyRTI RSEG INTVECT DC.Wdummy DC.Wdummy DC.Wdummy.. DC.Wmain ;resetvector END Tiny.xcl -c68hc11 -Z(CODE)INTVECT=FFD6;Vectortabellen -Z(CODE)TCODE=E000;Programkoden börjar på adress 0xE000 -Z(DATA)TDATA=0;Variablerna staplas efter vaandra med start på 0x0000


Ladda ner ppt "HC11 & Programmering i Assembler Högnivå språk Assembler MCU Maskin kod."

Liknande presentationer


Google-annonser