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 1

Digital- och datorteknik

Assemblerprogrammering del 2

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

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

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

Maskinorienterad programmering

Digital- och datorteknik

Maskinorienterad programmering

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Assemblerprogrammeringsuppgifter för FLIS-processorn

Exempel 3 på Tentamen

Digital- och datorteknik

Assemblerprogrammering del 3

Digital- och datorteknik

Programexempel för FLEX

Digital- och datorteknik

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

Digital- och datorteknik

Avbrottshantering. Övningsuppgifter

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

Exempel 1 på Tentamen med lösningar

CE_O3. Nios II. Inför lab nios2time

Assemblerprogrammets struktur; exempel

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

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

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

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

CHALMERS TEKNISKA HÖGSKOLA

Digital- och datorteknik

Maskinorienterad Programmering 2010/11

TSEA28 Datorteknik Y (och U)

TSEA28 Datorteknik Y (och U)

Tentamen med lösningar

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

CPU. Carry/Borrow IX. Programräknare

Assemblerprogrammets. struktur; exempel

Lösningsförslag tenta

Övningsuppgifter i Mikrodatorteknik 4p/5p

Datorsystemteknik DAVA14 Föreläsning 10

TSEA28 Datorteknik Y (och U)

Övning2 Datorteknik, HH vt12 - Programmering

Assemblerprogrammering för HCS12

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

Kontrollskrivning Mikrodatorteknik CDT S2-704

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

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

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

Enkla datatyper minne

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

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

Lösningar till tentamen i EIT070 Datorteknik

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

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

TENTAMEN(Nu anpassad till FLIS- processorn)

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

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. EDA432 Digital och datorteknik IT INN790 Digital och datorteknik GU. Måndag 23 oktober 2006, kl i V-salar

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

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

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

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

Föreläsning 2. Operativsystem och programmering

Assemblerprogrammering, ARM-Cortex M4 del 3

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

EDA215 Digital- och datorteknik för Z

Lösningar till tentamen i EIT070 Datorteknik

Föreläsning 10. Pekare (Pointers)

Exempel 2 på Tentamen med lösningar

Stack och subrutiner Programmeringskonventionen

TENTAMEN (Något redigerad)

Läsminne Read Only Memory ROM

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

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

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

Digital- och datorteknik

Assemblerprogrammering för ARM del 2

Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p

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

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

Laboration nr 4 behandlar Assemblerprogrammering

Digital- och datorteknik

Transkript:

Digital- och datorteknik Föreläsning #8 Biträdande professor Jan Jonsson Institutionen för data- och informationsteknik Chalmers tekniska högskola 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. 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. 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 ) 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.

Assemblator listfil (.lst) Assemblator objektfil (.s9) Minnesadresser Minnesinnehåll QAflisp - FLISP Absolute crossassembler, Version RC:3 (c) GMV 989-202 File: testprog.lst 60. ORG $60 60 F 2. SNURRA LDA ALFA 70 62 08 3. DECA 63 E 70 4. STA ALFA 65 25 F9 5. BNE SNURRA 6. ; 67 F0 FF 7. LDA #ETTOR 69 E 7 8. NLOOP STA BETA 6B 96 03 9. ADDA #TRE 6D 06 0. NEGA 6E 33 69. JMP NLOOP 2. ; 70 7 3. ALFA FCB 23 7 00 4. BETA RMB 5. ; FF 6. ETTOR EQU $FF 03 7. TRE EQU $03 Radnummer Källkod S50060F7008E7025F9F0FFE79603063369700F S90300609C alla bytes innehållet till höger om i objektfilen, S på en rad blir som består av minnesinnehåll, adress FF6 modulo 2. S-rad Startadressen (4 hexsiffror) för den första byten. S 5 0060 F 70 08 E 70 25 F9 F0 FF E 7 96 03 06 33 69 7 00 F Antal bytes (Hex) som följer på raden Maskinkodbytes i hexadecimal form Byte med checkbitar Listfilen används i första hand för dokumentation och är mycket användbar när man skall felsöka program. Objektfilen används för laddning av programkoden till minnet, antingen i en simulator eller i den verkliga datorn. Assemblator objektfil (.s9) S50060F7008E7025F9F0FFE79603063369700F S90300609C innehållet i objektfilen, som består Slutraden av i en alla bytes till höger om S på en rad blir minnesinnehåll, objektfil adress FF6 modulo 2. S-rad Startadressen (4 hexsiffror) för den första byten. S 5 0060 F 70 08 E 70 25 F9 F0 FF E 7 96 03 06 33 69 7 00 F Antal bytes (Hex) som följer på raden inleds med S9, som talar om för laddverktyget att maskinkoden är slut. Maskinkodbytes i hexadecimal form Objektfilen används för laddning av programkoden till minnet, antingen i en simulator eller i den verkliga datorn. Byte med checkbitar 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 [-28.. 27]. 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. 2

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 anger att en byte ska reserveras för symbolen Counter. Observera att direktivet RMB inte innehåller någon information om datatyp. 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 -,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. 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. Demonstrationsexempel sökning i tabell En tabell med fem olika 8-bitars tal utan tecken lagras med början på adress 8 6 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. 3

Primärminnets användning Den rekommenderade användningen av primärminnet i FLIS-processorn är: Adress 20 6 FA 6 : Programkod Adress 00 6 0F 6 : Globala variabler (data med relativt lång livslängd) Adress 0 6 F 6 : Programstack (data med relativt kort livslängd) Adress FB 6 FC 6 : In- och ut-portar A (reserverat för kommunikation med sensor och/eller ställdon) Adress FD 6 FF 6 : Vektorer (reserverat för lagring av speciella hoppadresser) 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 6 resp. FC 6. Adressbuss MW I/O- MR avkodning OEFB LDFB CP MW OEFB OEFC Indata MR Inport OEFB FB6 Databuss CP LDFB Adress Minne Skriv Läs Data ut Data in Utport Register FB6 Utdata 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. ORG 0 Shadow RMB ORG $20 ; ettställ bit 0 på utport FB ORA # ; nollställ bit på utport FB ANDA #~2 4

ORG 0 Shadow RMB ORG $20 ; ettställ bit 0 på utport FB ORA # ; nollställ bit på utport FB ANDA #~2 LDA $FB ORA # Fungerar inte!!! Bitvis komplement av 2 = 0 2 Demonstrationsexempel 2 mätning av tid Följande kod genererar en puls i bit 0 på utport FB 6. START CLR $FB LDA #25 SCOUNT DECA BNE SCOUNT LDA #%0000000 LDA #00 PCOUNT DECA BNE PCOUNT CLR $FB Antag att FLIS-processorn har klockfrekvensen MHz och att sekvensen startas vid tidpunkten t = 0. a) När i tiden genereras pulsen? b) Hur lång är pulsen? 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 6. 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 6 med bit b 4 -b 7 nollställda. Graykoden för siffrorna 0 6 -F 6 finns lagrade i bit b 0 -b 3 i adress 30 6-3F 6, med bit b 4 -b 7 nollställda. 5