Maskinorienterad programmering

Relevanta dokument
Maskinorienterad programmering

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

Maskinorienterad programmering

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

TENTAMEN (med svar och vissa lösningar)

Digital- och datorteknik

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

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

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

Digital- och datorteknik

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

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

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

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

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

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

TENTAMEN(Nu anpassad till FLIS- processorn)

Assemblerprogrammeringsuppgifter för FLIS-processorn

Lars-Eric Arebrink. Av institutionen utgiven. vid flera tillfällen. Betyg 4: 36 poäng Betyg 5: 48 poäng

TENTAMEN (Något redigerad)

Exempel på tentamen 1

Extrauppgifter för CPU12

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

Avbrottshantering. Övningsuppgifter

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

Digital- och datorteknik

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

Lösningsförslag tenta

EDA Digital och Datorteknik

Avbrottshantering. Övningsuppgifter Lösningsförslag Uppgift (Reservation för diverse fel!)

Digital- och datorteknik

Digital- och datorteknik

Tentamen. DAT015 Maskinorienterad programmering IT DIT151 Maskinorienterad programmering GU. Tisdag 15 december 2009, kl

Assemblerprogrammering

Programmering i maskinspråk (Maskinassemblering)

Tentamen med lösningsförslag

Exempel 3 på Tentamen

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

Tentamen med lösningsförslag

Assemblerprogrammets struktur; exempel

Maskinorienterad Programmering 2010/11

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

Digital- och datorteknik

Facit till övningsuppgifter Kapitel 13 Anslutning av minnes- och I/O-moduler till buss 13-1

Tentamen med lösningsförslag

Tentamen med lösningsförslag

Övningsuppgifter i Mikrodatorteknik 4p/5p

Tentamen. DAT015 Maskinorienterad programmering IT. Fredag 21 april 2006, kl i V-salar

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

Digital- och datorteknik

Struktur: Elektroteknik A. Digitalteknik 3p, vt 01. F1: Introduktion. Motivation och målsättning för kurserna i digital elektronik

LEU240 Mikrodatorsystem

Tentamen. EDA485 Maskinorienterad programmering Z. Måndag 6 mars 2006, kl i V-salar

Tentamen i Datakunskap NT

Tentamen med lösningsförslag

Programexempel för FLEX

Programmering i maskinspråk (Maskinassemblering)

Digital- och datorteknik

Tentamen med lösningsförslag

Digital och Datorteknik EDA /2011. EDA 451 Digital och datorteknik 2010/2011. Uppbyggnad_och_funktion.pdf

Tentamen med lösningsförslag

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

Tentamen med lösningsförslag

Exempel 2 på Tentamen med lösningar

EDA215 Digital- och datorteknik för Z

Assemblerprogrammets. struktur; exempel

Tentamen. EDA452 Grundläggande Datorteknik, D DIT790 Digital- och datorteknik, GU. Måndag 17 December 2012, kl

Assemblerprogrammering för HCS12

Digital- och datorteknik

Lösningar till tentamen i EIT070 Datorteknik

Tentamen (Svar och lösningsförslag)

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

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

CHALMERS TEKNISKA HÖGSKOLA

Assemblerprogrammering del 1

Adressavkodning - busskommunikation

Digital och Datorteknik EDA /2010. EDA Digital och Datorteknik

DAT 015 Maskinorienterad programmering 2010/2011. Uppbyggnad_och_funktion.pdf

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

Exempel 1 på Tentamen med lösningar

Tentamen med lösningsförslag

Tentamen med lösningar

Lösningar till tentamen i EIT070 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:

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

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

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

Digital- och datorteknik

Digital- och datorteknik

Reducerad INSTRUKTIONSLISTA för FLIS-processorn

Grundläggande Datorteknik Digital- och datorteknik

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

Tentamen. DIT150 Maskinorienterad programmering GU DAT015 Maskinorienterad programmering IT. Söndag 17 december 2006, kl

Digital- och datorteknik

Tentamen med lösningsförslag

Tentamen. Datorteknik Y, TSEA28

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

Binär kodning. Binära koder. Tal och talsystem positionssystem för basen 10. Begrepp. Begrepp Tal och talsystem Talomvandling ASCII-kod NBCD Gray-kod

Transkript:

Institutionen för data- och informationsteknik Avdelningen för datorteknik TENTAMEN(med svar och vissa lösningsförslag) KURSNAMN Maskinorienterad programmering PROGRAM: Dataingenjör och elektroingenjör åk 1/ lp 3 Mekatronikingenjör åk 2/ lp 3 KURSBETECKNING LEU500 EXAMINATOR Lars-Eric Arebrink TID FÖR TENTAMEN Måndag 2011-03-14 kl 1400 1800 HJÄLPMEDEL Av institutionen utgiven Instruktionslista för CPU12 (INS2) Tabellverk eller miniräknare får ej användas ANSV LÄRARE: Lars-Eric Arebrink 772 5718 besöker tentamen DATUM FÖR ANSLAG av resultat samt av tid och plats för granskning Vid flera tillfällen Resultatlistor med de anonyma koderna anslås senast 2011-04-01 på kursens hemsida Granskning på institutionen 2010-04-05 och 2010-04-06 kl 1230-1300 ÖVRIG INFORM Tentamen omfattar totalt 60 poäng BETYGSGRÄNSER 24p betyg 3 < 36 p betyg 4 < 48 p betyg 5 SLUTBETYG För godkänt slutbetyg 3, 4 eller 5 på kursen fordras betyg 3, 4 eller 5 på tentamen samt godkända laborationer

1 Besvara kortfattat följande frågor, som alla utom i) -m) avser CPU12 2 a) Översätt assemblerinstruktionen LDS #$3000 till maskinspråk och visa hur maskinkoden placeras i minnet Svar: CF 30 00 (1p) b) Vilken assemblerinstruktion har den hexadecimala maskinkoden 18 16? Svar: SBA (1p) c) En instruktion med den hexadecimala maskinkoden 0E E9 00 0F 80 är placerad med operationskoden på adressen 1800 16 Skriv instruktionen med assemblerspråk Svar: BRSET -$100,Y,#$0F,$1785 d) Assemblerinstruktionen SEV kan skrivas som en alternativ assemblerinstruktion Vilken? Svar: ORCC #$02 (3p) (1p) e) Översätt assemblerinstruktionen CPY $100,SP till maskinspråk Visa hur maskinkoden placeras i minnet Svar: AD F2 01 00 f) Assemblerinstruktionen LBRA $8000 har operationskoden på adressen 1200 16 Visa hur maskinkoden placeras i minnet På vilken adress utförs nästa instruktion? Svar: 18 20 6D FC Nästa instruktion utförs på adressen 8000 16 efter hoppet För vilka värden W (0 W 255) på minnesordet på adressen Wadr utförs hoppet i g) och h)? g) LDAA #$40 CMPA Wadr BHI Hopp Svar: 0 W < 64 h) LDAB #$A5 ADDB Wadr (Tänk på att overflow kan inträffa vid additionen!) BPL Hopp Svar: 91 W 218 (4p) i) Vid synkron seriell överföring av data kan data- och klocksignal överföras på separata ledningar, men detta gäller inte alltid Förklara varför! Svar: Om ledningarna är för långa eller om datahastigheten är för hög så anländer data och klocka ej samtidigt till mottagaren (1p) j) Det finns ett samband mellan längden på en CAN-buss och bithastigheten som kan användas på bussen Förklara kortfattat detta samband! Svar: Om avståndet är för stort mellan noderna kommer löptiden för signalen att bli så stor att noderna inte kan synkroniseras inom bitintervallen k) Packa upp flyttalet 43935000 16, som är packat enligt IEEE-standard 754-1985 (23 bitar av mantissan och 8 bitars karakteristika) till decimal form Svar: 294,625 l) Visa approximativt hur många bitar man skulle behöva i mantissan på ett flyttal för att man skall kunna lita på 6 decimala siffror om talet översätts till decimal form Svar: 10 6 = (10 3 ) 2 (2 10 ) 2 = 2 20, dvs 20 bitar

m) Vad menas med begreppet locality of reference? Svar: För program och data gäller locality of reference in time and space, vilket innebär att bara en mycket liten del av adressrummet utnyttjas under ett godtyckligt valt kort tidsintervall och att sannolikheten är stor att processorn kommer att använda adresser i närheten av den adress den redan använder 3 2 a) STRING1 är en sträng med ett jämnt antal 8-bitars dataord STRING1 avslutas med två dataord med värdet 0 i konsekutiva (på varandra följande) adresser Skriv en subrutin ADD2 i assemblerspråk för CPU12, som adderar alla dataorden från STRING1 parvis och placerar summorna som 8-bitars dataord i en ny nollterminerad (ett dataord med värdet 0) sträng STRING2 enligt principen: M(X) + M(X+1) M(Y) M(X+2) + M(X+3) M(Y+1), osv Dataorden i STRING1 är tal utan tecken Alla additioner som resulterar i overflow skall räknas och antalet sådana additioner skall returneras i D- registret vid återhoppet Vid anrop av subrutinen skall startadressen till STRING1 finnas i X- registret och startadressen till STRING2 i Y-registret Endast D- registret och flaggregistret får vara förändrade vid återhopp För full poäng skall programmet vara korrekt radkommenterat * * Subrutin ADD2 * ADD2 PSHX Spara register PSHY * CLRB Nollställ C-räknare låg byte CLR CCNTH - - hög byte ADLOOP LDAA 1,X+ Hämta databyte från STRING1 ADDA 1,X+ Addera till nästa byte BCC NOCY Carry = 0? Ja, ej overflow INCB Öka carryräknare (overflow) BNE NOCY INC CCNTH Öka hög byte NOCY STAA 1,Y+ Placera summan i STRING2 BNE ADLOOP Nästa varv * (Automatisk nollterminering) LDAA PULY PULX RTS CCNTH Hämta overflowräknare hög byte Återställ register Retur: Antal overflow i D-reg CCNTH RMB 1 C-räknare hög byte (7p) b) Hur många E-klockperioder använder CPU12 (H12) för att köra programsekvensen nedan? ~ LDD #$FFEC 2 (-20) DLOOP LDY #$FFF6 2*20 (-10) YLOOP IBNE Y,YLOOP 3*10*20 LBRN YLOOP 3*20 IBNE D,DLOOP 3*20 N = 2 + (2 + 3*10 + 3 +3)*20 = 762 st (3p)

3 Ett datorsystem visas nedan: 4 Adressbuss E A 15 -A 0 -logik RWM -logik ROM -logik In/Utportar Processor CPU12 RWM ROM Indata (8) OE 1 Utdata(8) C Register (8) Figuren ovan visar principen för anslutning av externa minnesmoduler och externa in-/utportar till processorn CPU12 Hela adressrummet skall i princip fyllas ut med en 64 kbyte ROM-modul, men på vissa adresser skall in- och utportar och en 8 kbyte RWM-modul vara placerade Dessutom skall de första 400 16 adresserna inte aktivera någon port eller minnesmodul vid läsning eller skrivning RWMmodulen skall i princip ha slutadressen FFFF 16, men de sista 1024 10 adresserna skall reserveras för ROM-modulen, som alltså skall prioriteras där En inport och en utport skall placeras på adressen 400 16 Rita -logiken för minnesmodulerna och portarna Ange adressintervallen för minnesmodulerna Använd fullständig adressavkodning Endast grundläggande logikgrindar med valfritt antal ingångar får användas 0000H 03FFH 0400H 0401H DFFFH E000H FBFFH FC00H FFFFH Passiv area I/O-port ROM RWM ROMx 64 kbyte ROM (i bakgrunden) Databuss Passiv area A 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1k = 2 10 Start: 0000H = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Slut: 03FFH = 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 I/O-port: A 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 Adr: 0400H = 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 RWM: A 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 8k = 2 13 Start: E000H = 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 Slut: FFFFH = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ROMx: A 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 1k = 2 10 Start: FC00H = 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 Slut: FFFFH = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 A 15 A 14 A 13 A 12 A 11 A 10 PA E A 15 A 11 A 10 A 9 A 0 IN OUT (A 15 ) (A 14 ) (A 13 ) A 12 A 11 A 10 ROMx E A 15 A 14 A 13 ROMx RWM E PA RWM IN (8p) ROM

4 En dator med processorn CPU12 skall styra en maskin via en utport I samband med maskinstyrningen behöver man läsa av en parameter som finns tillgänglig som ett 8-bitars tal på inporten INPORT -signalen för inporten (aktiv låg) och en digital signal med frekvensen 30 Hz finns tillgängliga i datorn Eftersom datorns huvudprogram är upptaget med beräkningar skall processorns avbrottssystem användas för att effektivisera maskinstyrningen En färdig subrutin CONTROL sköter all utmatning till utporten a) Föreslå en koppling med vars hjälp man kan generera IRQ-avbrott 30 gånger per sekund D-vippor och standardgrindar får användas Avbrottssystemet används inte till något annat i datorn 5 1 1D Q 30 Hz C1 CPU12 INPORT R b) Skriv en avbrottsrutin IRQR för IRQ-avbrott Avbrottsrutinen skall läsa av inporten INPORT och placera det inlästa värdet i variabeln INVAR 30 gånger per sekund Dessutom skall den utföra subrutinen CONTROL 10 ggr per sekund En 8-bitars hjälpvariabel får användas Den lagras i minnet på adressen COUNT Man får förutsätta att inporten inte läses på något annat ställe än i avbrottsrutinen IRQ IRQRUT MOVB INPORT,INVAR Läs inport och uppdatera INVAR Nolla vippa DEC COUNT 10 Hz-räknaren COUNT = 0? BNE IRQEX Nej, tillbaka till huvudprogram MOVB #3,COUNT Ja, ominitiera 10 Hz-räknaren JSR CONTROL Sköt utmaning via CONTROL IRQEX RTI Tillbaka till huvudprogram (4p) c) Skriv det avsnitt av huvudprogrammet som initierar avbrottssystemet IRQ-vektorn finns i ett flyktigt minne på adresserna FFF2H och FFF3H (LDS #BOS Bottom of stack) MOVW #IRQRUT,$FFF2 Initiera avbrottsvektorn MOVB #3,COUNT Initiera räknare för 10 Hz TST INPORT Nollställ avbrottsvippan CLI Aktivera avbrottssystemet Alla odefinierade symboliska adresser ovan är definierade på annat ställe i programmet Assemblerspråk för processorn CPU12 skall användas Radkommentarer skall finnas!

5 a) Du använder en korskompilator för H12 med följande anropskonventioner för C-funktioner: Parameterlistan behandlas från höger till vänster, samtliga inparametrar överförs via processorns stack Lokala variabler behandlas i den ordning de deklareras, dvs sist behandlad finns överst i stacken Varje funktion som har lokala variabler inleds med prologen LEAS -?,SP och avslutas med epilogen LEAS?,SP följt av RTS 6 Returparameter lämnas i D- eller B-registret beroende på storlek För XCC gäller dessutom: char 8 bitar, short och int 16 bitar, long 32 bitar Antag att en funktion definieras på följande sätt: int funca( char a, long b, unsigned int c ) { long d; char e; short f; } Visa stackens innehåll direkt efter det att funktionens prolog har körts Platsen för samtliga variabler skall visas Svar: (3p) SP fh fl e d ms byte d d d ls byte PCH PCL a b ms byte b b b ls byte ch cl

5 (forts) 7 b) Översätt C-funktionen nedan till assemblerspråk för CPU12 Visa även stackens innehåll innan do-while-satsen börjar utföras (Antag att anropskonventionerna i a-uppgiften gäller) int funcb(int m, int n) { funcb LEAS -3,SP unsigned char i; int j = n; LDD 7,SP STD 0,SP do{ DOLOOP for ( i = 0;i < 200; i++ ) CLR 2,SP FORLOOP LDAB 2,SP CMPB #200 BHS WHILE j = j + m; LDD 0,SP ADDD 5,SP STD 0,SP INC 2,SP BRA FORLOOP } while (j <= 10000); WHILE LDD 0,SP CPD #10000 BLE DOLOOP return j; LDD 0,SP SP jh (nh) +0 jl (nl) +1 i +2 PCH +3 PCL +4 mh +5 ml +6 nh +7 nl +8 } LEAS 3,SP RTS (6p)

0 0 0 0 0 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1 1 1 b 6 b 5 b 4 b 3 b 2 b 1 b 0 Assemblerspråket för CPU12 8 Bilaga 1 Assemblerspråket använder sig av mnemoniska beteckningar som processorkonstruktören MOTOROLA specificerat för maskininstruktioner och instruktioner till assemblatorn, s k pseudoinstruktioner eller assemblatordirektiv Pseudoinstruktionerna listas i tabell 1 Tabell 1 Direktiv ORG N L RMB N L EQU N L FCB N1, N2 L FDB N1, N2 L F ABC Förklaring Placerar den efterföljande koden med början på address N (ORG för ORiGin = ursprung) Avsätter N bytes i följd i minnet (utan att ge dem värden), så att programmet kan använda dem Följden placeras med början på adressen L (RMB för Reseve Memory Bytes) Ger symbolen L konstantvärdet N (EQU för EQUates = beräknas till) Avsätter en byte för varje argument i följd i minnet Respektive byte ges konstantvärdet N1, N2 etc Följden placeras med början på adressen L (FCB för Form Constant Byte) Avsätter ett bytepar (två bytes) för varje argument i följd i minnet med mest signifikant byte på den lägsta adressen Respektive bytepar ges konstantvärdet N1, N2 etc Följden placeras med början på adressen L (FDB för Form Double Byte) Avsätter en byte för varje tecken i teckensträngen ABC i följd i minnet Respektive byte ges ASCII-värdet för A B C, etc Följden placeras med början på adressen L (F för Form Character String) ASCII-koden Tabell 2 7-bitars ASCII NUL DLE SP 0 @ P ` p 0 0 0 0 SOH DC1! 1 A Q a q 0 0 0 1 STX DC2 2 B R b r 0 0 1 0 ETX DC3 # 3 C S c s 0 0 1 1 EOT DC4 $ 4 D T d t 0 1 0 0 ENQ NAK % 5 E U e u 0 1 0 1 ACK SYN 6 F V f v 0 1 1 0 BEL ETB 7 G W g w 0 1 1 1 BS CAN ( 8 H X h x 1 0 0 0 HT EM ) 9 I Y i y 1 0 0 1 LF SUB * : J Z j z 1 0 1 0 VT ESC + ; K [Ä k {ä 1 0 1 1 FF FS, < L \Ö l ö 1 1 0 0 CR GS - = M ]Å m }å 1 1 0 1 S0 RS > N ^ n ~ 1 1 1 0 S1 US /? O _ o RUBOUT (DEL) 1 1 1 1