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). CE A A723 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. CE A A723 CE1000 = ldx #0x1000 ;Ladda indexregister X med 0x = 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 = 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