Assemblerprogrammets struktur; exempel

Relevanta dokument
Maskinorienterad Programmering 2010/11

Assemblerprogrammets. struktur; exempel

Assemblerprogrammering för HCS12

Programexempel för FLEX

Programmering av inbyggda system 2012/2013. Kodningskonventioner och programbibliotek. maskinnära programmering i C och assemblerspråk

Assemblerprogrammering för ARM del 2

EDA Digital och Datorteknik

Maskinorienterad Programmering /2011. Maskinorienterad Programmering 2010/11. Maskinnära programmering C och assemblerspråk

Kodningskonventioner (XCC12) Specifikation av strncpy: Övningsexempel: Maskinorienterad Programmering 2011/2012

Assemblerprogrammering för ARM del 1

Digital och Datorteknik EDA /2010. EDA Digital och Datorteknik

Digital- och datorteknik

Digital- och datorteknik

Villkorliga hopp: 9/26/2011. Dagens mål: Du ska kunna.. Villrorliga (Relativa) hopp - forts Arb s 140. LV5 Fo12. LV5 Fo12. Aktivera Kursens mål:

Assemblerprogrammering, ARM-Cortex M4 del 1

Konstruera en dator mha grindar och programmera denna Använda en modern microcontroller

Digital- och datorteknik

4.1. Assemblerspråket

Extrauppgifter för CPU12

Assemblerprogrammering del 1

Programmering i maskinspråk (Maskinassemblering)

LEU240 Mikrodatorsystem

Assemblerprogrammering del 2

Digital och Datorteknik EDA /2010. EDA Digital och Datorteknik

Digital- och datorteknik

Assemblerprogrammering, ARM-Cortex M4 del 3

F4: Assemblerprogrammering

Digital- och datorteknik

Digital- och datorteknik

Assemblerprogrammering för ARM del 1

Kontrollskrivning Mikrodatorteknik CDT S2-704

Assemblerprogrammering för ARM del 1

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

7) Beskriv tre sätt att överföra parametrar mellan huvudprogram och subrutin.

Maskinorienterad programmering

Styrenheten styrsignalsekvenser programflödeskontroll

Nya instruktioner. b 7

Assemblerprogrammering

Programmering i maskinspråk (Maskinassemblering)

Maskinorienterad programmering. Mekatronikingenjör åk 2/ lp 3. Lars-Eric Arebrink. Av institutionen utgiven. Lars-Eric Arebrink

Övningsuppgifterna i kapitel F avser FLIS-processorn, vars instruktioner och motsvarande koder definieras i INSTRUKTIONSLISTA FÖR FLISP.

Maskinorienterad programmering

Assemblerprogrammering - fördjupning

EDA480/EDA485 - Maskinorienterad programmering, tentamen 2006-xx-xx 1(7)

Digital- och datorteknik

Maskinorienterad Programmering IT2, LP2-2016/2017

1 Maskinnära programmering för HC12

Tentamen med lösningsförslag

Nya instruktioner. b 7

Styrenheten 9/17/2011. Styrenheten - forts Arb s 120. LV4 Fo10. Aktivera Kursens mål: Kap 7 Blå

Assemblerprogrammering del 3

MC68HCS12 - översikt

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Programmering av inbyggda system 2014/2015

Tentamen. EDA432 Digital- och datorteknik, It DIT790 Digital- och datorteknik, GU. Onsdag 12 Januari 2011, kl

EDA215 Digital- och datorteknik för Z

Digital- och datorteknik. Mekatronik-, data- och elektroingenjör Åk 1/ lp 1o2. Lars-Eric Arebrink. Av institutionen utgiven. vid flera tillfällen

Digital- och datorteknik

Arbetsbok för MC12, kapitel 4 Klocka. Genomgång av laborationer. New disc Här väljer du olika arbetsstycken

Maskinorienterad programmering. Mekatronikingenjör åk 2/ lp 3. Lars-Eric Arebrink. Av institutionen utgiven. vid flera tillfällen.

F2: Motorola Arkitektur. Assembler vs. Maskinkod Exekvering av instruktioner i Instruktionsformat MOVE instruktionen

Tentamen med lösningsförslag

Assemblerprogrammering för ARM del 3

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Stack och subrutiner Programmeringskonventionen

Övningsuppgifter i Mikrodatorteknik 4p/5p

Laborationsmoment 2 - En Borrautomat

Fortsä'ning Pekare. Ulf Assarsson. Originalslides av Viktor Kämpe

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Programmering av inbyggda system

CE_O1. Nios II. Enkla assembler-instruktioner.

Reducerad INSTRUKTIONSLISTA för FLIS-processorn

Maskinorienterad Programmering LP2-2017/2018

Extra lab. Nu på fredag kl 8-12 Frivillig Enbart hjälp med projektuppgiften Ingen examination

CE_O3. Nios II. Inför lab nios2time

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 3. Assembler, stack och subrutiner, programmeringskonventionen. Institutionen för elektro- och informationsteknologi, LTH

c a OP b Digitalteknik och Datorarkitektur 5hp ALU Design Principle 1 - Simplicity favors regularity add $15, $8, $11

Tentamen. EDA432 Digital- och datorteknik, IT DIT790 Digital- och datorteknik, GU. Måndag 18 Oktober 2010, kl

Tentamen. Datorteknik Y, TSEA28

Dataöverföring på Parallell- och serieform MOP 11/12 1

Mål. Datorteknik. Innehåll. Innehåll (forts) Hur ser ett program ut? Hur skapas maskinkoden?

Tentamen med lösningsförslag

Lösningar till tentamen i EIT070 Datorteknik

Digital- och datorteknik

Ext-13 (Ver ) Exempel på RTN-beskrivning av FLEX-instruktioner

Maskinorienterad programmering

I denna laboration undersöker vi hur aritmetiska beräkningar utförs. Vi tittar på olika variabeltyper: 8-bitars, 16-bitars, 32-bitars och flyttal.

Tentamen. Datorteknik Y, TSEA28

Tentamen med lösningsförslag

TENTAMEN (med svar och vissa lösningar)

Ext-13 (Ver ) Exempel på RTN-beskrivning av FLEX-instruktioner

CPU. Carry/Borrow IX. Programräknare

Mål. Datorteknik. Innehåll. Vad händer med en add-instruktion? Vad händer med en add-instruktion. Instruktioner som bitmönster i minnet

Tentamen Datorteknik Y, TSEA28 Datum

FLEX Instruktionslista

Transkript:

Maskinorienterad Programmering 2010/11 Maskinnära programmering en introduktion Ur innehållet: Assemblatorn, assemblerspråk Datatyper Tilldelningar, l i unära och binära operationer Permanenta/tillfälliga variabler Programkonstruktion i assemblerspråk, programstrukturer Programflödeskontroll Absolut assemblering All källtext assembleras samtidigt och alla referenser löses upp omedelbart. Resultatet är en bild av program/minne färdig att överföras till måldatorn..s12 absolut- fil assemblator ato.s19 Introduktion till Maskinnära programmering 1 Introduktion till Maskinnära programmering 2 Relokerande assemblator.s12 relokerande.o12 fil assemblator länkare.s19 Assemblerprogrammets struktur; exempel Start Läs Inport Skriv till Utport.S12 fil relokerande assemblator.o12 Källtexter assembleras till ett objektfilsformat med symbolisk representation av adresser. Vid länkningen ersätts den symboliska informationen med absoluta adresser Introduktion till Maskinnära programmering 3 ; Programmet läser från en inport och kopierar till en utport InPort EQU $600 OutPort EQU $400 ORG $1000 Start: LDAB InPort ; Läs från inporten STAB OutPort ; Skriv till utporten BRA Start ; Börja om Symbolfält, blankt Instruktion Operand(er) till Eventuell kommentarstext eller kommentar (mnemonic) eller instruktion assembler-direktiv eller argument till direktiv Fälten separeras med blanktecken, dvs tabulatur eller mellanslag. Introduktion till Maskinnära programmering 4

Assemblerspråkets element Ett (dåligt) exempel ALLA textsträngar är context -beroende Mnemonic, ett ord som om det förekommer i instruktionsfältet tolkas som en assemblerinstruktion ur processorns instruktionsuppsättning. Mot varje sådan mnemonic svarar som regel EN maskininstruktion. Assemblerdirektiv ( Pseudoinstruktion ), ett direktiv till assemblatorn. Symboler, textsträng som börjar med bokstav eller _. Ska bara förekomma i symbol- eller operand- fälten Direktiv och mnemonics är inte reserverade ord i vanlig bemärkelse utan kan till exempel också användas som symbolnamn ORG $1000 BRA LDAA ADDA ADDB LDAA BRA BRA RMB EQU 1 EQU EQU 2 ADDAA EQU EQU LDAA RMB RMB Syntaktiskt korrekt men extremt svårläst på grund utav illa valda symbolnamn Introduktion till Maskinnära programmering 5 Introduktion till Maskinnära programmering 6 Ett bra exempel ORG $1000 main: JSR init main_ loop: JSR read JSR --- BRA main_loop init: --- init_0: read: --- read_loop: read_exit: Symbolnamnen väljs så att sammanblandning undviks. Undvik också generella symbolnamn som exempelvis LOOP CPU12, ordlängder d och datatyper 31 16 15 8 7 0 long word byte char c; /* 8-bitars datatyp, storlek byte */ short s; /* 16-bitars datatyp, storlek word */ long l; /* 32-bitars datatyp, storlek long */ int i; /* storlek implementationsberoende */ Lämpliga arbetsregister för short och char är D respektive B 32 bitars datatyper ryms ej i något CPU12-register. Introduktion till Maskinnära programmering 7 Introduktion till Maskinnära programmering 8

char *cptr; /* pekar på 8-bitars datatyp */ short *sptr; /* pekar på 16-bitars datatyp */ int *iptr; /* pekar på 32-bitars datatyp */ ALLA pekartyper är 16 bitar Lämpliga arbetsregister är X eller Y Tilldelningarl i char variable; variable = 1;.. short variable variable = 1; kan kodas på flera olika sätt, exempelvis: variable RMB 1 1) MOVB #1,variable 2) LDAB #1 STAB variable 3) LDAA #1 STAA variable.. variable RMB 2 1) MOVW #1,variable 2) LDD #1 STD variable Introduktion till Maskinnära programmering 9 Introduktion till Maskinnära programmering 10 Addition av 8-bitars tal Addition av 16-bitars tal ca RMB 1 char ca,cb,cc; cb RMB 1 cc RMB 1 ca = cb + cc; LDAB cb ; operand 1 ADDB cc ; adderas STAB ca ; skriv i minnet short sa,sb,sc; sa = sb + sc; sa RMB 2 sb RMB 2 sc RMB 2 LDD sb ; operand 1 ADDD sc ; adderas STD sa ; skriv i minnet Introduktion till Maskinnära programmering 11 Introduktion till Maskinnära programmering 12

Addition av 32-bitars tal long la,lb,lc; la = lb + lc; la RMB 4 lb RMB 4 lc RMB 4 LDD lb+2 ; minst signifikanta word av b ADDD lc+2 ; adderas till minst signifikanta ifik word av c STD la+2 ; tilldela, minst signifikanta word LDD lb ; mest signifikanta word av b ADCB lc+1 ; adderas till låg byte av mest signifikanta ; word av c ADCA lc ; adderas till hög byte av mest signifikanta ; word av c STD la ; tilldela, mest signifikanta word Kodförbättringar, framför fö allt för byte-operationer ti char ca,cb; ca = ca + 1; cb = cb - 1; ca RMB 1 cb RMB 1 LDAB ca ADDB #1 STAB ca eller INC ca DEC cb Introduktion till Maskinnära programmering 13 Introduktion till Maskinnära programmering 14 Registerspill ill Delresultat kan sparas på stacken vid evaluering av uttryck där processorns register inte räcker till EXEMPEL unsigned short int _a,_b,_c,_d; Evaluera: (_a*_b)+(_c*_d); Lösning: För 16 bitars multiplikation använder vi EMUL-instruktionen. Denna förutsäller att operanderna finns i D respektive Y-registren. LDD _a LDY _b EMUL ; första parentesen evaluerad PSHD ; placera delresultat på stacken LDD _c LDY _d EMUL ; andra parentesen evaluerad ADDD 0,SP ; addera med första delresultatet LEAS 2,SP ; återställ stackpekaren Efter instruktionssekvensen finns hela uttryckets värde i register D, stackpekaren har återställts till det värde äd den hd hade före instruktionssekvensen. i k Permanenta och tillfälliga variabler char Main ca; char la; ca RMB 1 Main: LEAS -1,SP LDAB #5 la = 5; STAB 0,SP LEAS 1,SP I subrutinen refereras variabeln la som 0,SP. Som en direkt följd är variabeln ca synlig hela tiden, i hela programmet medan variabeln la endast är synlig (existerar) i subrutinen Main. Introduktion till Maskinnära programmering 15 Introduktion till Maskinnära programmering 16

Programmering i assemblerspråk, programstrukturer main Pseudospråk: main main: Sekvensiellt/villkorligt illk li t programflöde block: block:instr 1 instr 2 instr 3 sub_0 sub_ 0(); JSR sub_0 cc=sant? Bcc L2 Introduktion till Maskinnära programmering 17 Introduktion till Maskinnära programmering 18 Programflödeskontroll ll Ovillkorlig och villkorlig programflödesändring g block: eller JMP BRA block block L1 I = J? LDD I CMPD J BEQ L1 L2: L2 Kontrollstrukturer t ( ) then if( ) then else end if() ; Else 1 2 if() 1; else 2; while( ) loop While while() ; loop until( ) LOOP Sista? UNTIL do ; while(); Introduktion till Maskinnära programmering 19 Introduktion till Maskinnära programmering 20

() Rättfram kodning DipSwitch EQU $600 TST DipSwitch BNE assign BRA end if (DipSwitch!= 0) assign LDAB DipSwitch HexDisp = Dipswitch; it end: () if (DipSwitch!= 0) HexDisp = Dipswitch; it Bättre kodning DipSwitch EQU $600 TST DipSwitch BEQ end LDAB DipSwitch end: BNE Hopp om ICKE zero Z=0 BEQ Hopp om zero Z=1 BNE Hopp om ICKE zero Z=0 BEQ Hopp om zero Z=1 Introduktion till Maskinnära programmering 21 Introduktion till Maskinnära programmering 22 () else DipSwitch EQU $600 LDAB DipSwitch 1 Else TSTB 2 BEQ not_else LDAB #0 BRA end if (DipSwitch == 0) not_else: LDAB #1 HexDisp = 1; else end: HexDisp = 0; () else DipSwitch EQU $600 LDAB DipSwitch 1 Else TSTB 2 BNE else LDAB #1 BRA end if (DipSwitch == 0) else: LDAB #0 HexDisp = 1; else end: HexDisp = 0; BEQ Hopp om zero Z=1 BNE Hopp om ICKE zero Z=0 Introduktion till Maskinnära programmering 23 Introduktion till Maskinnära programmering 24

() else Else 1 2 if (DipSwitch >= 5) HexDisp = 1; else HexDisp = 0; DipSwitch EQU $600 Test av tal utan tecken BHS : R M C=0 LDAB DipSwitch CMPB #5 BHS then LDAB #0 STAB HexDisp BRA end then: LDAB #1 end: Test av tal med tecken BGE : R M N V = 0 while () DipSwitch EQU $600 While while: LDAB DipSwitch 1 TSTB BEQ end_while LDAB #1 while (DipSwitch!= 0) BRA while HexDisp = 1; end_while: HexDisp = 0; LDAB #0 BEQ Hopp om zero Z=1 Introduktion till Maskinnära programmering 25 Introduktion till Maskinnära programmering 26 while () Delay: LDD count While Delay_loop: loop: NOP 1 NOP SUBD #1 BHI Delay_looploop Delay( unsigned int count ) Delay_end: while (count > 0) count = count - 1; Test av tal utan tecken BHI : R>M C + Z = 0 do while () DipSwitch EQU $600 LOOP Sista? UNTIL do HexDisp = 0; while (DipSwitch >= 10); do: Test av tal utan tecken BHS : R M C=0 MOVB #0,HexDisp LDAB DipSwitch CMPB #10 BHS do Test av tal med tecken BGT : R>M Z + ( N V ) = 0 Introduktion till Maskinnära programmering 27 Introduktion till Maskinnära programmering 28

Sammanfattning, villkorlig li programflödeskontroll ll C-operator Betydelse Datatyp Instruktion == Lika med signed/unsigned BEQ!= Skild från signed/unsigned i d BNE < Mindre än signed BLT unsigned BCS <= Mindre än eller signed BLE lika unsigned BLS > Större än signed BGT unsigned BHI >= Större än eller signed BGE lika unsigned BCC Födöj Fördröjning Delay( unsigned int count ) while (count > 0) count = count - 1; Parameter count finns i register D vid anrop. Anm. count=0 är EJ TILLÅTET. ; Subrutin 'Delay' Delay: NOP Delay_loop: NOP NOP SUBD #1 BHI Delay_loop instruktion antal ggr. NOP 1 NOP count NOP count SUBD #1 count BHI count ( taken ) BHI 1 (not taken) 1 = NOP ( 1 + 2 count) + SUBD#1 ( count ) + BHI T ( count-1 ) + BHI NT ( 1 ) + ( 1 ) =? Introduktion till Maskinnära programmering 29 Introduktion till Maskinnära programmering 30 = NOP ( 1 + 2 count) + SUBD#1 ( count ) + BHI T ( count ) + BHI NT ( 1 ) + ( 1 ) =? (exekveringstider, dvs antal cykler, fås ur handboken) instruktion # cykler NOP 1 SUBD #1 2 BHI 3/1 5 = 1 ( 1 + 2 count) + 2 ( count ) + 3 ( count-1 ) + 1 ( 1 ) + 5 ( 1 ) = 7 count + 4 Minimal/maximal fördröjning vid olika klockfrekvenser MC12 Frekvens/ cykeltid 4 MHz/ 250 ns. 8 MHz/ 125 ns. Min. Max. ( count = 1) ( count = $FFFF) 11 cykler 458749 cykler 2,75 s 115 ms 1,375 s 57,34 ms 16 MHz/ 687,5 ns 28,67 ms 62,5 ns. 25 MHz/ 40 ns. 440 ns 18,35 ms Introduktion till Maskinnära programmering 31 Introduktion till Maskinnära programmering 32

Exempel: Bestäm count för 10 ms fördröjning i ett MC12-system Frekvens/ Min. Max. cykeltid ( count = 1) ( count = $FFFF) 11 cykler 458749 cykler 8 MHz/ 1,375 s 57,34 ms MC12 125 ns. Lösning: (7 count 4)125ns 10ms (7count 4)125ns 10000000ns 10000000 4 count 125 11428 7 Uppskatta motsvarande fördröjning i simulatorn 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 ADelay1 ADelay1: BSR ADelay2 ADelay2: Hur många bytes kod motsvarar rutinen? Hur många klockcyklers fördröjning ger den? Tar c:a 14 sekunder Introduktion till Maskinnära programmering 33 Introduktion till Maskinnära programmering 34 EXEMPEL, subrutin memcopy( from, to, size ) EXEMPEL memcopy0( from, to, size ) memcopy Sätt upp from, to och size size=0? Next(to) Next(from) size size-1 Kan (informellt) kodas memcopy0: LDAB size LDX from LDY to memcopy0 _ loop: memcopy0_end: TSTB BEQ LDAA STAA DECB BRA memcopy0_end 1,X+ 1,Y+ memcopy0_loop Introduktion till Maskinnära programmering 35 Introduktion till Maskinnära programmering 36

EXEMPEL memcopy1( from, to, size ) EXEMPEL memcopy2( from, to, size ) Kan (informellt) kodas memcopy1: LDAB size LDX from LDY to Kan (informellt) kodas memcopy2: LDAB size LDX from LDY to memcopy1 _ loop: memcopy1_end: TSTB BEQ MOVB DECB BRA memcopy1_end 1,X+,1,Y+ memcopy1_loop memcopy2 _ loop: SUBB #1 BMI memcopy2_end MOVB B,X,B,Y BRA memcopy2_loop memcopy2_end: Introduktion till Maskinnära programmering 37 Introduktion till Maskinnära programmering 38 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: EXEMPEL memcopy( from, to, size ) En effektiv implementering. memcopy: LDAB size BEQ memcopy_end LDX from LDY to memcopy_loop: MOVB 1,X+,1,Y+ DBNE B,memcopy_loop memcopy_end: vad händer om size är 0, vid anrop??? Introduktion till Maskinnära programmering 39 Introduktion till Maskinnära programmering 40