1 / 17

HC11 & Programmering i Assembler

HC11 & Programmering i Assembler. Högnivå språk. Maskin kod. Assembler. MCU. 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.

cathy
Download Presentation

HC11 & Programmering i Assembler

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. HC11 & Programmering i Assembler Högnivåspråk Maskinkod 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). 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 0x10008610 = ldaa #0x10 ;Ladda AccA med värdet 10A721 = staa 0x21,x ;Lagra värdet i AccA på adressen 0x21 + det värde som finns i indexregister X.8604 = ldaa #0x04A723 = 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/konstantEx: ADDA #0xFF ;Adderar AccA med 0xFF. Resultatet AccA • Representation. 5 sorter:

  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 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åverkarC Carry ADD, SUBV 2:nd Complement overflowZ Zero SUB, CMPN Negativ SUB, ADDH Half Carry ADDS, 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 TDATANUMBER DS.B 1BUFFER DS.B 10 RSEG TCODEmain LDS #0xFF LDX #NUMBER LDY #BUFFERfinish BRA finish END Tinyvect.S07 EXTERN main RSEG TCODEdummy 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

More Related