Maskinorienterad Programmering 2010/11

Relevanta dokument
Assemblerprogrammets struktur; exempel

Assemblerprogrammering för HCS12

Assemblerprogrammets. struktur; exempel

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

Digital och Datorteknik EDA /2010. EDA Digital och Datorteknik

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

Assemblerprogrammering för ARM del 1

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

F4: Assemblerprogrammering

Digital och Datorteknik EDA /2010. EDA Digital och Datorteknik

Digital- och datorteknik

Assemblerprogrammering, ARM-Cortex M4 del 3

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

Tentamen med lösningsförslag

1 Maskinnära programmering för HC12

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

CE_O3. Nios II. Inför lab nios2time

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

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

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

F5: Högnivåprogrammering

Tentamen med lösningsförslag

Assemblerprogrammering för ARM del 3

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

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

CE_O1. Nios II. Enkla assembler-instruktioner.

Programmering av inbyggda system

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

Lösningar till tentamen i EIT070 Datorteknik

Institutionen för elektro- och informationsteknologi, LTH

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

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

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 med lösningsförslag

Digital- och datorteknik

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

CPU. Carry/Borrow IX. Programräknare

Per Holm Lågnivåprogrammering 2014/15 24 / 177. int och double = = 2, 147, 483, 647

Lågnivåprogrammering. Föreläsning 2 Lågnivåprogrammering. Binära tal. En enkel modell av datorns inre

Maskinorienterad programmering

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

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 Introduktion till Maskinnära programmering 1 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 2

Relokerande assemblator.s12 relokerande.o12 fil assemblator länkare.s19.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 Assemblerprogrammets struktur; exempel Start Läs Inport Skriv till Utport ; 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 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 Introduktion till Maskinnära programmering 5 Ett (dåligt) exempel 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 6

Ett bra exempel ORG $1000 main: JSR init main_ loop: JSR read JSR --- BRA main_loop init: --- init_0: Symbolnamnen väljs så att sammanblandning undviks. Undvik också generella symbolnamn som exempelvis LOOP read: --- read_loop: read_exit: Introduktion till Maskinnära programmering 7 CPU12, ordlängder d och datatyper 31 16 15 8 7 0 byte long word 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 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 Introduktion till Maskinnära programmering 9 Tilldelningarl i Pseudo språk: 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 10

Addition av 8-bitars tal Pseudo språk: 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 Introduktion till Maskinnära programmering 11 Addition av 16-bitars tal Pseudo språk: 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 12

Addition av 32-bitars tal Pseudo språk: 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 Introduktion till Maskinnära programmering 13 Kodförbättringar, framför fö allt för byte-operationer ti Pseudo språk: char ca,cb; ca = ca + 1; ca RMB 1 cb RMB 1 LDAB ca ADDB #1 STAB ca eller INC ca cb = cb - 1; DEC cb 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 Introduktion till Maskinnära programmering 15 Permanenta och tillfälliga variabler Pseudo språk: char ca; ca RMB 1 Main { char la; 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 16

Programmering i assemblerspråk, programstrukturer main Pseudospråk: main { main: sub_0 sub_ 0(); JSR sub_0 } Introduktion till Maskinnära programmering 17 Sekvensiellt/villkorligt illk li t programflöde block: block:instr 1 instr 2 instr 3 cc=sant? Bcc L2 Introduktion till Maskinnära programmering 18

Programflödeskontroll ll Ovillkorlig och villkorlig programflödesändring g block: I = J? JMP eller BRA block block L1 LDD I CMPD J BEQ L1 L2: L2 Introduktion till Maskinnära programmering 19 Kontrollstrukturer t If( Villkor ) then if( Villkor ) then else end If Then End Villkor Satser if(villkor) { Satser; } If Then Else End Villkor Satser 1 Satser 2 if(villkor) { Satser1; }else{ Satser2; } while( Villkor ) loop While Villkor Then Satser End while(villkor) { Satser; } loop until( Villkor ) LOOP UNTIL Satser Sista? do{ Satser; } while(villkor); Introduktion till Maskinnära programmering 20

If () {} If Then End Villkor Satser Rättfram kodning DipSwitch EQU $600 HexDisp EQU $400 TST DipSwitch BNE assign BRA end if (DipSwitch!= 0) assign LDAB DipSwitch HexDisp = Dipswitch; it STAB HexDisp end: BNE Hopp om ICKE zero Z=0 BEQ Hopp om zero Z=1 Introduktion till Maskinnära programmering 21 If () {} If Then End Villkor Satser Bättre kodning DipSwitch EQU $600 HexDisp EQU $400 TST DipSwitch BEQ end if (DipSwitch!= 0) HexDisp = Dipswitch; it end: LDAB STAB DipSwitch HexDisp BNE Hopp om ICKE zero Z=0 BEQ Hopp om zero Z=1 Introduktion till Maskinnära programmering 22

If () {} else { } DipSwitch EQU $600 HexDisp EQU $400 If Villkor Then LDAB DipSwitch Satser 1 Else TSTB Satser 2 End BEQ not_else LDAB #0 STAB HexDisp BRA end if (DipSwitch == 0) not_else: LDAB #1 HexDisp = 1; STAB HexDisp else end: HexDisp = 0; BEQ Hopp om zero Z=1 Introduktion till Maskinnära programmering 23 If () {} else { } DipSwitch EQU $600 HexDisp EQU $400 If Villkor Then LDAB DipSwitch Satser 1 Else TSTB Satser 2 End BNE else LDAB #1 STAB HexDisp BRA end if (DipSwitch == 0) else: LDAB #0 HexDisp = 1; STAB HexDisp else end: HexDisp = 0; BNE Hopp om ICKE zero Z=0 Introduktion till Maskinnära programmering 24

If () {} else { } If Villkor Then Satser 1 Else Satser 2 End if (DipSwitch >= 5) HexDisp = 1; else HexDisp = 0; DipSwitch EQU $600 HexDisp EQU $400 LDAB DipSwitch CMPB #5 BHS then LDAB #0 STAB HexDisp BRA end then: LDAB #1 STAB HexDisp end: Test av tal utan tecken BHS Villkor: R M C=0 Test av tal med tecken BGE Villkor: R M N V = 0 Introduktion till Maskinnära programmering 25 while () {} DipSwitch EQU $600 HexDisp EQU $400 While Villkor while: LDAB DipSwitch Then Satser 1 TSTB End BEQ end_while LDAB #1 STAB HexDisp while (DipSwitch!= 0) BRA while HexDisp = 1; end_while: HexDisp = 0; LDAB #0 STAB HexDisp BEQ Hopp om zero Z=1 Introduktion till Maskinnära programmering 26

while () {} Delay: LDD count While Delay_loop: loop: Villkor NOP Satser 1 NOP Then End Delay( unsigned int count ) { while (count > 0) count = count - 1; } Delay_end: Test av tal utan tecken BHI Villkor: R>M C + Z = 0 Test av tal med tecken BGT Villkor: R>M Z + ( N V ) = 0 SUBD #1 BHI Delay_looploop Introduktion till Maskinnära programmering 27 do {} while () DipSwitch EQU $600 LOOP Satser HexDisp EQU $400 do: MOVB #0,HexDisp UNTIL Sista? do { HexDisp = 0; }while (DipSwitch >= 10); LDAB DipSwitch CMPB #10 BHS do Test av tal utan tecken BHS Villkor: R M C=0 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 Introduktion till Maskinnära programmering 29 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 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 Introduktion till Maskinnära programmering 31 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 32

Exempel: Bestäm count för 10 ms fördröjning i ett MC12-system Lösning: MC12 Frekvens/ cykeltid Min. ( count = 1) Max. ( count = $FFFF) 11 cykler 458749 cykler 8 MHz/ 1,375 s 57,34 ms 125 ns. (7 count 4)125ns 10ms (7count 4)125ns 10000000ns 10000000 4 count 125 11428 7 Uppskatta motsvarande fördröjning i simulatorn Tar c:a 14 sekunder Introduktion till Maskinnära programmering 33 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? Introduktion till Maskinnära programmering 34

EXEMPEL, subrutin memcopy( from, to, size ) memcopy Sätt upp from, to och size size=0? Next(to) Next(from) size size-1 Introduktion till Maskinnära programmering 35 EXEMPEL memcopy0( from, to, size ) 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 36

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