Digital- och datorteknik

Relevanta dokument
Digital- och datorteknik

Programmering i maskinspråk (Maskinassemblering)

Programmering i maskinspråk (Maskinassemblering)

Digital- och datorteknik

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

Assemblerprogrammering del 2

Assemblerprogrammering del 1

Digital- och datorteknik

Digital- och datorteknik

EDA Digital och Datorteknik

LEU240 Mikrodatorsystem

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

Extrauppgifter för CPU12

Digital- och datorteknik

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

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

Maskinorienterad programmering

Maskinorienterad programmering

Exempel 3 på Tentamen

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Assemblerprogrammering del 3

Assemblerprogrammeringsuppgifter för FLIS-processorn

Digital- och datorteknik

Programexempel för FLEX

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

Digital- och datorteknik. Lars-Eric Arebrink. vid flera tillfällen. Betyg 4: 36 poäng Betyg 5: 48 poäng

Digital- och datorteknik

Digital- och datorteknik

Digital- och datorteknik. Lars-Eric Arebrink. Betyg 4: 36 poäng Betyg 5: 48 poäng

Digital- och datorteknik

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

Digital- och datorteknik. Lars-Eric Arebrink. Betyg 4: 36 poäng Betyg 5: 48 poäng

Avbrottshantering. Övningsuppgifter

Exempel 1 på Tentamen med lösningar

Digital- och datorteknik

CHALMERS TEKNISKA HÖGSKOLA

CE_O3. Nios II. Inför lab nios2time

Assemblerprogrammets struktur; exempel

Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

9 Assemblerprogrammering. Innehåll GRUNDLÄGGANDE DATORTEKNIK FÖR HÖGSKOLANS INGENJÖRSUTBILDNINGAR KOMPENDIUM

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Tentamen med lösningar

Digital- och datorteknik

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

Assemblerprogrammets. struktur; exempel

Lösningsförslag tenta

Maskinorienterad Programmering 2010/11

Digital- och datorteknik

Tentamen 3. EDAxxx Grundläggande Datorteknik DIT791 Grundläggande Datorteknik, GU. Måndag xx Oktober 20xx, kl

TENTAMEN. Digital- och datorteknik. Institutionen för data- och informationsteknik Avdelningen för datorteknik LEU431. Lars-Eric Arebrink

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 2. Programmering i C och assembler MIPS instruktionsarkitektur. Institutionen för elektro- och informationsteknologi, LTH

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

Assemblerprogrammering för HCS12

CPU. Carry/Borrow IX. Programräknare

EDA215 Digital- och datorteknik för Z

TSEA28 Datorteknik Y (och U)

TENTAMEN(Nu anpassad till FLIS- processorn)

Digital- och datorteknik. Lars-Eric Arebrink. Av institutionen utgiven instruktionlista FLEXIBLE INSTRUKTION SET PROCESSOR FLISP

TSEA28 Datorteknik Y (och U)

Övningsuppgifter i Mikrodatorteknik 4p/5p

Minnet. Minne. Minns Man Minnet? Aktivera Kursens mål: LV3 Fo7. RAM-minnen: ROM PROM FLASH RWM. Primärminnen Sekundärminne Blockminne. Ext 15.

Datorsystemteknik DAVA14 Föreläsning 10

Övning2 Datorteknik, HH vt12 - Programmering

Tentamen. EDA485 Maskinorienterad programmering Z DAT015 Maskinorienterad programmering IT. Tisdag xx yyyy 2006, kl

Kontrollskrivning Mikrodatorteknik CDT S2-704

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.

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

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

Enkla datatyper minne

Tentamen. EDA432 Digital och datorteknik IT INN790 Digital och datorteknik GU. Måndag 23 oktober 2006, kl i V-salar

Assemblerprogrammering, ARM-Cortex M4 del 3

Lösningar till tentamen i EIT070 Datorteknik

TSEA28 Datorteknik Y (och U)

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

Exempel 2 på Tentamen med lösningar

TENTAMEN Datorteknik (DO2005) D1/E1/Mek1/Ö1

TENTAMEN (Något redigerad)

Digital- och datorteknik

Assemblerprogrammering för ARM del 2

9/22/2012. Assemblernivå Beskrivning av funktion Automatiskt styrd borrmaskin Positionera borr Starta borr Borra genom arbetsstycke...

Programallokering. Programtyper. Att placera program i flashrespektive. Program i FLASH-minne. Program i RAM-minne

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

Maskinorienterad programmering

TENTAMEN. Digital- och datorteknik E. Institutionen för data- och informationsteknik Avdelningen för datorteknik. Elektro Åk 1/ lp 4 EDA216/DIT790

Läsminne Read Only Memory ROM

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

LV6 LV7. Aktivera Kursens mål:

Digital- och datorteknik

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

Föreläsning 2. Operativsystem och programmering

Digital- och datorteknik. Lars-Eric Arebrink. vid flera tillfällen. Betyg 4: 36 poäng Betyg 5: 48 poäng

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

Laboration nr 4 behandlar Assemblerprogrammering

Övning1 Datorteknik, HH vt12 - Talsystem, logik, minne, instruktioner, assembler

Assemblerprogrammering för ARM del 1

Datorsystemteknik DAV A14 Föreläsning 1

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

Transkript:

Digital- och datorteknik Föreläsning #18 Biträdande professor Jan Jonsson Institutionen för data- och informationsteknik Chalmers tekniska högskola

Assemblerprogrammering Assemblatorer vs kompilatorer En assemblator är ett program som översätter program från assemblerspråk till maskinspråk. Assemblerspråket gör det möjligt att skriva program där vi har fullständig kontroll över den maskinkod som hamnar i minnet. För en given processor har assemblerspråk och assemblator vanligen konstruerats tillsammans. Oftast är de konstruerade av processortillverkaren själv. En kompilator är ett program som översätter program från ett högnivåspråk (t ex C, C++, Ada) till maskinspråk. Ofta fungerar assemblerspråket som ett mellansteg vid översättningen från högnivåspråk till maskinspråk.

Assemblerprogrammering Varför programmera i assemblerspråk? Situationer när det finns anledning att skriva program i processorns assemblerspråk: När det inte finns någon kompilator, som genererar kod, för den aktuella processorn. När det finns hårdvarunära uppgifter som inte går att lösa i ett högnivåspråk. När någon uppgift är så tidskritisk att en kompilator inte klarar av att göra koden så att den klarar tidskraven. Övning i att programmera i assemblerspråk ger även förståelse för hur program i högnivåspråk verkligen realiseras som maskinprogram, d v s i maskinspråket.

Assemblerprogrammering Tvåpass-assemblatorn Assemblatorn går igenom assemblerprogrammet från början till slut två gånger (i två pass). Arbetssättet beror huvudsakligen på att assemblatorn först måste bestämma värdet hos samtliga symboler (pass 1) innan den genererar maskinkoden (pass 2). Resultatet av pass 2 blir två filer (i ASCII-format): En listfil med en kombination av programtexten och maskinkoden. En objektfil med det assemblerade programmets maskinkod och motsvarade minnesadresser.

Assemblerprogrammering Assemblator listfil (.lst) Minnesadresser Minnesinnehåll QAflisp - FLISP Absolute crossassembler, Version RC:3 (c) GMV 1989-2012 File: testprog.lst 60 1. ORG $60 60 F1 70 2. SNURRA LDA ALFA 62 08 3. DECA 63 E1 70 4. STA ALFA 65 25 F9 5. BNE SNURRA 6. ; 67 F0 FF 7. LDA #ETTOR 69 E1 71 8. NLOOP STA BETA 6B 96 03 9. ADDA #TRE 6D 06 10. NEGA 6E 33 69 11. JMP NLOOP 12. ; 70 17 13. ALFA FCB 23 71 00 14. BETA RMB 1 15. ; FF 16. ETTOR EQU $FF 03 17. TRE EQU $03 Radnummer Källkod Listfilen används i första hand för dokumentation och är mycket användbar när man skall felsöka program.

Assemblerprogrammering Assemblator objektfil (.s19) S1150060F17008E17025F9F0FFE171960306336917001F S90300609C innehållet i objektfilen, som består av minnesinnehåll, adress alla bytes till höger om S1 på en rad blir FF 16 modulo 2. S1-rad Startadressen (4 hexsiffror) för den första byten. S1 15 0060 F1 70 08 E1 70 25 F9 F0 FF E1 71 96 03 06 33 69 17 00 1F Byte med checkbitar Antal bytes (Hex) som följer på raden Maskinkodbytes i hexadecimal form Objektfilen används för laddning av programkoden till minnet, antingen i en simulator eller i den verkliga datorn.

Assemblerprogrammering Assemblator objektfil (.s19) S1150060F17008E17025F9F0FFE171960306336917001F S90300609C innehållet i objektfilen, som består Slutraden av i en minnesinnehåll, objektfil adress alla bytes till höger om S1 på en rad blir FF 16 modulo 2. S1-rad Startadressen (4 hexsiffror) för den första byten. inleds med S9, som talar om för laddverktyget att maskinkoden är slut. S1 15 0060 F1 70 08 E1 70 25 F9 F0 FF E1 71 96 03 06 33 69 17 00 1F Byte med checkbitar Antal bytes (Hex) som följer på raden Maskinkodbytes i hexadecimal form Objektfilen används för laddning av programkoden till minnet, antingen i en simulator eller i den verkliga datorn.

Variabler Högnivåspråk vs assemblerspråk En variabeldeklaration används i högnivåspråk för att reservera minnesutrymme. Deklarationen anger ett unikt symbolnamn och för korrekt behandling i uttryck ges den också en datatyp. char är en datatyp som, i programspråket C, implementeras med 8 bitar. Med tilläggen unsigned respektive signed anges vilken talrepresentation som gäller för datatypen. Talområdet för en unsigned char är [0.. 255], medan talområdet för en signed char blir [-128.. 127]. Exempel: variabeldeklarationen unsigned char Counter; anger att en byte ska reserveras för symbolen Counter, och att byten skall behandlas som ett 8-bitars tal utan tecken.

Variabler Högnivåspråk vs assemblerspråk I assemblerspråk kan inga datatyper uttryckligen anges, utan det är programmeraren som måste göra lämpliga antaganden, t ex vad gäller den talrepresentation som används. En global variabel kan refereras av alla delar av programmet oavsett om det gäller huvudprogrammet eller någon subrutin. För deklaration av en global variabel ska därför något av direktiven RMB, FCB eller FCS, användas tillsammans med variabelns (unika) symbolnamn. Exempel: variabeldeklarationen Counter RMB 1 anger att en byte ska reserveras för symbolen Counter. Observera att direktivet RMB inte innehåller någon information om datatyp.

Variabler Högnivåspråk vs assemblerspråk I assemblerspråk kan inga datatyper uttryckligen anges, utan det är programmeraren som måste göra lämpliga antaganden, t ex vad gäller den talrepresentation som används. En lokal variabel kan bara refereras av den subrutin där den deklareras. Någon speciell deklaration av en lokal variabel finns inte, utan de skapas genom att utrymme reserveras på stacken eller genom att man reserverar ett av processorns register. Exempel: assemblerinstruktionen LEASP -1,SP anger att en byte ska reserveras för en lokal variabel. Observera att det här inte finns någon information om symbolnamn eller datatyp för den lokala variabeln, utan endast dess placering på stacken blir känd.

Variabler Högnivåspråk vs assemblerspråk I assemblerspråk kan inga datatyper uttryckligen anges, utan det är programmeraren som måste göra lämpliga antaganden, t ex vad gäller den talrepresentation som används. Vid subrutinanrop används ofta speciella lokala variabler som kallas parametrar (indata till subrutinen) respektive returvärde (utdata från subrutinen). Någon speciell deklaration av parametrar och returvärden finns inte, utan de skapas genom att utrymme reserveras på stacken (med LEASP) och/eller genom att man reserverar ett eller flera av processorns register för detta ändamål.

Assemblerprogrammering Demonstrationsexempel 1 sökning i tabell En tabell med fem olika 8-bitars tal utan tecken lagras med början på adress 18 16 i minnet. Skriv en subrutin FndMax som letar upp det största talet i tabellen. Av de interna registren får subrutinen endast påverka A- och Y-registren. Värdet på det största talet skall returneras i A-registret. Adressen för det största talet skall returneras i Y-registret.

Primärminnets användning In- och utportar Den rekommenderade användningen av primärminnet i FLIS-processorn är: Adress 20 16 FA 16 : Programkod Adress 00 16 0F 16 : Globala variabler (data med relativt lång livslängd) Adress 10 16 1F 16 : Programstack (data med relativt kort livslängd) Adress FB 16 FC 16 : In- och ut-portar A (reserverat för kommunikation med sensor och/eller ställdon) Adress FD 16 FF 16 : Vektorer (reserverat för lagring av speciella hoppadresser)

In- och utportar Minnesavbildade I/O-portar För att kommunicera med omvärlden behöver datorn tillgång till in- och utportar (I/O-portar), d v s dataregister som ansluter till yttre enheter som tangentbord, display, givare, etc. I sammanhang där bara enstaka IOportar behövs kan man använda en överlagringsteknik där en IO-port aktiveras i samma adressrum som någon minneskrets. FLIS-datorn har två I/O-portar, på minnesadresserna FB 16 resp. FC 16. OE FB MW MR Adressbuss Indata 1 I/Oavkodning OE FB Inport FB 16 LD FB OE FB OE FC MR Databuss CP MW CP LD FB Minne Skriv Läs 1 Adress Data ut Data in Register Utdata Utport FB 16

In- och utportar Minnesavbildade I/O-portar En komplikation med I/O-portar jämfört med variabler i minnet är att en utport inte nödvändigtvis behöver vara läsbar. Man kan alltså vid skrivning till en port inte kan förvänta sig att det skrivna värdet är det som man får vid läsning av samma port. I de fall man bara vill ändra enstaka bitar på en icke läsbar utport kan man införa en så kallad "skuggvariabel" vars syfte är att innehålla exakt samma värde som utporten hade haft om den varit läsbar. Bitmanipulation kan då först göras på skuggvariabeln, därefter kopieras skuggvariabelns värde till den icke läsbara utporten.

In- och utportar Minnesavbildade I/O-portar ORG 0 Shadow RMB 1 ORG $20 ; ettställ bit 0 på utport FB LDA Shadow ORA #1 STA Shadow STA $FB ; nollställ bit 1 på utport FB LDA Shadow ANDA #~2 STA Shadow STA $FB

In- och utportar Minnesavbildade I/O-portar ORG 0 Shadow RMB 1 ORG $20 ; ettställ bit 0 på utport FB LDA Shadow ORA #1 STA Shadow STA $FB LDA $FB ORA #1 STA $FB Fungerar inte!!! ; nollställ bit 1 på utport FB LDA Shadow ANDA #~2 STA Shadow STA $FB Bitvis komplement av 2 = 11111101 2

Assemblerprogrammering Demonstrationsexempel 2 mätning av tid Följande kod genererar en puls i bit 0 på utport FB 16. START CLR $FB LDA #25 SCOUNT DECA BNE SCOUNT LDA #%00000001 STA $FB LDA #100 PCOUNT DECA BNE PCOUNT CLR $FB Antag att FLIS-processorn har klockfrekvensen 1 MHz och att sekvensen startas vid tidpunkten t = 0. a) När i tiden genereras pulsen? b) Hur lång är pulsen?

Assemblerprogrammering Demonstrationsexempel 3 kodomvandling Skriv en instruktionssekvens som omvandlar ett 4-bitars binärt tal till Graykod. Det binära talet skall kontinuerligt läsas från bit b 0 -b 3 på inport FB 16. Bit b 4 -b 7 :s värden är ej kända och kan variera mellan läsningarna. Graykoden skall matas ut på bit b 0 -b 3 på utport FB 16 med bit b 4 -b 7 nollställda. Graykoden för siffrorna 0 16 -F 16 finns lagrade i bit b 0 -b 3 i adress 30 16-3F 16, med bit b 4 -b 7 nollställda.