Presentation laddar. Vänta.

Presentation laddar. Vänta.

HC11 & Programmering i Assembler

Liknande presentationer


En presentation över ämnet: "HC11 & Programmering i Assembler"— Presentationens avskrift:

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

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 #0x ;Ladda indexregister X med 0x = ldaa #0x ;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 LABEL OPKOD OPERAND(ER) ;KOMMENTAR Ex START LDAA #0x0F ;Start av program STAA 0xFF ADDA 0x0F BRA START ;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: BRA 0x0F BEQ START ADDA 0xFF ;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. ändelse suffix Bin B,b % Okt O,o,Q,q Hex H,h 0x,$ Dec D,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, bitar Programpekaren, 16 bitar Statusregistret, 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 CONFIG EQU 0X903F NAME
PUBLIC PUBLIC ANOTHER_FUNCTION RSEG RSEG CODE ;Överlåter åt länkaren att placera koden där länkfilen beskriver. ORG ORG 0x1000 ;Absolut adressering DS.B / DC.B Array1 DS.B 10 END IF / ELSE / ENDIF

10 Assemblerinstruktioner
In/ut ur register/minne LDAA, STAB Flytta, Byta TAB, TBA, TSX Stacken PSHB, PULA Matematiska ADDA. SUBB, MUL, IDIV Öka/Minska INCA, DECB Jämförelse CBA, CMPA Logiska/Bitmanipulera ANDB, ORAA, NEGB, BCLR Skift LSLA, LSRA, ROLA, ASLA Programflöde grenval BNE, BEQ, BHI, BLO (tittar på statusregistret) subrutin JSR, RTS, JMP, RTI Övrigt NOP

11 Adresseringssätt(mode)
Immediate Själva värdet som argument LDAA #0xAA Extended Adressen (2 byte) som argument LDD 0xBB00 Direct Adressen (1 byte) som argument LDAA 0x33 Indexed Adressen som finns i ett indexregister(2 byte) + offset LDD 4,x Inherent Verkar enbart på registren INCB Relative Adressen är ett offset från PC BEQ LIKA (i praktiken låter man assemblatorn beräkna offset)

12 Statusregister 1 Innehåller flaggor(bitar) som indikerar status och resultat av vissa instruktioner Bit Namn Instruktion som påverkar C Carry ADD, SUB V 2:nd Complement overflow Z Zero SUB, CMP N Negativ SUB, ADD H Half Carry ADD S, X, I Indikerar/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: Main LDAA #0xFF JSR my_function STAA my_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!!
NAME main PUBLIC main RSEG TDATA NUMBER DS.B 1 BUFFER DS.B 10 RSEG TCODE main LDS #0xFF LDX #NUMBER LDY #BUFFER finish BRA finish END Tinyvect.S07 EXTERN main RSEG TCODE dummy RTI RSEG INTVECT DC.W dummy DC.W dummy DC.W dummy DC.W main ;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"

Liknande presentationer


Google-annonser