Lösningsförslag till Tenta i Mikrodator

Relevanta dokument
Lösningsförslag till Tenta i Mikrodator

Övningsuppgifter i Mikrodatorteknik 4p/5p

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

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

Digital- och datorteknik

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Tentamen. Datorteknik Y, TSEA28

F8: Undantagshantering

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

F4: Assemblerprogrammering

Tentamen Datorteknik D del 2, TSEA49

Digital- och datorteknik

Tentamen Datorteknik Y, TSEA28 Datum

SVAR TILL TENTAMEN I DATORSYSTEM, VT2013

Uppgift 1: a) u= a c + a bc+ ab d +b cd

Datorarkitekturer med Operativsystem

Lösningar till tentamen i EIT070 Datorteknik

Tentamen. Datorteknik Y, TSEA28

DAT 015 Maskinorienterad programmering 2010/2011. Uppbyggnad_och_funktion.pdf

Digital- och datorteknik

Digital- och datorteknik

F6: I/O hantering. Typer av I/O i ett datorsystem. Protokoll för synkronisering. Drivrutiner. Memory mapped Port mapped. Polling Timed Interrupt DMA

Programräknaren visar alltid på nästa instruktion som skall utföras. Så fort en instruktion har hämtats så visar programräknaren på nästa instruktion.

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

Digital- och datorteknik

Tentamen (Exempel) Datorteknik Y, TSEA28

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte

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

Program kan beskrivas på olika abstrak3onsnivåer. Högnivåprogram: läsbart (för människor), hög abstrak3onsnivå, enkelt a> porta (fly>a 3ll en annan ar

Lösningar till tentamen i EIT070 Datorteknik

Tentamen den 12 januari 2017 Datorarkitektur med operativsystem, EDT621

CE_O5. Cacheminne. Hemlaboration 2.

Tentamen (Exempel) Datorteknik Y, TSEA28

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte "ARM-instruktioner", A4-format, 17 sidor. Maxpoäng:

Digital- och datorteknik

Tentamen (Exempel) Datorteknik Y, TSEA28

Läs igenom hela laboration 5 innan du börjar beskriva instruktionsavkodaren i VHDL!

Tentamen Datorteknik Y, TSEA28 Datum TER1 och TER2 Tid 14-18

Föreläsningsanteckningar 5. Cacheminnen

F9: Minne. Sammansättning av minnesgrupper Ansluta minne till Interface till olika typer av minnen Användningsområden.

Tentamen i Digitala system - EITA15 15hp varav denna tentamen 4,5hp

Digitala System: Datorteknik ERIK LARSSON

Adressavkodning - busskommunikation

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

Datorarkitektur I. Tentamen Lördag 10 April Ekonomikum, B:154, klockan 09:00 14:00. Följande gäller: Skrivningstid: Fråga

En Von Neumann-arkitektur ( Von Neumann-principen i föreläsning 1) innebär:

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

Tentamen (Exempel) Datorteknik Y, TSEA28

Grundläggande datavetenskap, 4p

Extrauppgifter för CPU12

Tentamen Datorteknik Y, TSEA28 Datum TER2, TER4, TERE Tid 14-18

Datorteknik. Tomas Nordström. Föreläsning 6. För utveckling av verksamhet, produkter och livskvalitet.

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

Laboration 2 i Datorteknik- Assemblerprogrammering II

Maskinorienterad programmering

Omtentamen i CDT204 - Datorarkitektur

Institutionen för elektro- och informationsteknologi, LTH

OBS!! Detta är DEL 2 av tentan. För att få ut denna måste du ha lämnat in del 1. Om du inte fått ut del 1 bör du meddela skrivningsvakten. OBS!!

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

System S. Datorarkitektur - en inledning. Organisation av datorsystem: olika abstraktionsnivåer. den mest abstrakta synen på systemet

2 UPPBYGGNAD OCH FUNKTION

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

Elektroteknik MF1016 föreläsning 9 MF1017 föreläsning 7 Mikrodatorteknik

Stack och subrutiner Programmeringskonventionen

F9: Minne. Minneskonfiguration. Sammansättning av minnesgrupper Ansluta minne till Interface till olika typer av minnen Användningsområden

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

Tenta i Digitalteknik

MIKRODATORTEKNIK 2012 INNEHÅLLSFÖRTECKNING

Maskinorienterad programmering

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

Föreläsningsanteckningar 3. Mikroprogrammering II

Avbrottshantering. Övningsuppgifter

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

Digitala System: Datorteknik ERIK LARSSON

F6: I/O hantering. Typer av I/O i ett datorsystem. Memory mapped

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

TSEA28 Datorteknik Y (och U)

Datormodell. Datorns uppgifter -Utföra program (instruktioner) Göra beräkningar på data Flytta data Interagera med omvärlden

CE_O3. Nios II. Inför lab nios2time

TSEA28 Datorteknik Y (och U)

Tentamen Datorteknik Y, TSEA28 Datum TER2 och TER3 Tid 14-18

Digitalteknik EIT020. Lecture 15: Design av digitala kretsar

Tenta i Digitalteknik

Digitalteknik och Datorarkitektur

Övning2 Datorteknik, HH vt12 - Programmering

Digital- och datorteknik

Datorteknik. Tomas Nordström. Föreläsning 2. För utveckling av verksamhet, produkter och livskvalitet.

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

Programexempel för FLEX

Digital- och datorteknik

Program som ska exekveras ligger i primärminnet. Processorn hämtar instruk7on för instruk7on. Varje instruk7on, som är e= antal 1:or och 0:or, tolkas

Transkript:

Lösningsförslag till Tenta i Mikrodator 040117 1. Vilka register finns det i processorn och vad används dessa till? D0 till D7: Dataregister som används för beräkningar A0 till A6: Adressregister som används till att lagra pekare till minnet A7: pekar på stacken och är dubblerad till USP och SSP som används beroende på vilken mod processorn befinner sig i, user mode eller supervisor mode. PC: Programräknaren pekar på den adress i minnet som nästa instruktion skall hämtas ifrån. SR: statusregistret styr några av processorns funktioner, avbrottsmask, trace och användarmod. Status från aritmetiska operationer indikeras i ett antal statusbitar. 2. Nämn och beskriv kortfattat två sätt att adressera data i ett cacheminne. Direktmappad cache: Cacheminnet är indelat i N stycken lika stora linjer. Primärminnet är indelat i K stycken block. Ett sådant block består i sin tur av N stycken linjer. En linje n i primärminnet kan endast lagras i motsvarande linje n i cacheminnet. Därav direktmappat. Associativ cache: En fullt associativ cache är precis som för den direktmappade indelad i N stycken linjer. En linje i primärminnet kan för en associativ adressering lagras i godtycklig linje i cacheminnet. Denna flexibla adressering gör också att sökningen i det associativa cacheminnet blir mer komplext och dyrare att implementera. 3. Vilken uppgift har UDS* och LDS*? UDS* och LDS* är övre respektive nedre datastrobe. LDS indikerar att den minst signifikanta byten skall adresseras. UDS indikerar att den mest signifikanta byten skall adresseras. 4. Vad står DMA för samt beskriv hur DMA fungerar? Adress Data Kontroll signaler Minn CPU I/O DMA står för Direct Memory Acess och är en metod för processorn att synkronisera mot I/Oenheter. När en I/O-enhet behöver överföra data till minnet så begär den att få ta över kontrollen över systembussen, dvs bli bussmästare. Processorn lämnar då över kontrollen till I/O som nu kan direkt överföra data till minnet utan att gå via processorn. Efter avslutad dataöverföring lämnas kontrollen över systembussen tillbaka till processorn.

5. Antag att register D1 innehåller $00000099. Ange D1, C-flaggans samt Z- flaggans värde efter att instruktionerna nedan har exekverats. Observera att a till f är enskilda instruktioner och inte ett program. a) EORI.B #$66,D1 XOR $66 = 0110 0110 $FF 1111 1111 C=0, Z = 0, D1=$000000FF b) ADDI.B #$66,D1 $66 = 0110 0110 ADD $FF 0 1111 1111 c) ADDI.B #$67,D1 $67 = 0110 0111 ADD $100 = 1 0000 0000 C=0, Z = 0, D1=$000000FF C=1, Z = 1, D1=$00000000 d) SUBI.B #$66,D1 $66 = 0110 0110 SUB $033 = 0 0011 0011 C=0, Z = 0, D1=$00000033 e) ASR.B #2,D1 ASR 2 $E6 = 1110 0110 C=0, Z = 0, D1=$000000E6 f) ROL.B #4,D1 ROL 4 C=1, Z = 0, D1=$00000099

6. Funktionsanrop i assembler. En funktion i C är deklarerade som följande: void printchar(int a, int b); Parametrarna a och b ska skickas till funktionen via stacken. a) Rita stackens innehåll efter hoppet till subrutinen printchar, precis innan första instruktionen i subrutinen exekverats. Stackpekaren pekar på adress $7000 innan anropet. Anropet till funktionen i assembler görs enligt följande: Funktionsanrop i C PrintChar(a,b); Funktionsanrop i assembler MOVE.W a,-(a7) MOVE.W b,-(a7) BSR printchar ADDA.L #4,A7 SP Stacken 6FF8 6FF9 Återhoppsadress 6FFA 6FFB 6FFC 6FFD b 6FFE 6FFF a 7000 00 b) Vilken funktion har instruktionen ADDA.L #4,A7? Instruktionen tar bort parametrarna a och b från stacken. (Med tar bort i detta samanhang menas att stackpekaren justeras +4.) 7. Adresseringsmetoder: Vad kommer D2 och A3 att innehålla efter att instruktionen har exekverats. Innehållet i minnet är specificerat av tabellen nedan. Instruktionerna är oberoende av varandra (inget program). D2 har värdet $00000000 och A3 $00004004 innan varje instruktion exekveras. a) MOVE.L $4004, D2 b) MOVE.W 4(A3), D2 c) MOVE.L -(A3), D2 d) MOVE.B -(A3), D2 e) MOVE.W -2(A3), D2 f) MOVE.W #$4004, D2 g) MOVE.B (A3)+,D2 h) MOVE.L (A3)+,D2

Adress (Hexadecimal) Innehåll (Hexadecimal) 4000 77 4001 21 4002 C3 4003 FD 4004 00 4005 14 4006 99 4007 74 4008 A6 4009 AA Deluppg. Instruktion D2 A3 A MOVE.L $4004, D2 $00149974 $00004004 B MOVE.W 4(A3), D2 $0000A6AA $00004004 C MOVE.L -(A3), D2 $7721C3FD $00004000 D MOVE.B -(A3), D2 $000000FD $00004003 E MOVE.W -2(A3), D2 $0000C3FD $00004004 F MOVE.W #$4004, D2 $00004004 $00004004 G MOVE.B (A3)+,D2 $00000000 $00004005 H MOVE.L (A3)+,D2 $00149974 $00004008 8. Assemblerprogrammering: Skriv en subrutin i 68000-assembler som skriver ut ett tal (0-15) till en display. På displayen presenteras talet som en hexadecimal siffra (0-F). Displayen är av samma typ som på labbkorten, dvs. en 7-segment display. Displayen är ansluten till ML4_OUT (porten är definierad). Varje bit i ML4_OUT är ansluten till en lysdiod i 7-segment displayen. Kopplingen mellan bitarna i ML4_OUT och lysdioderna är definierad i figuren nedan (T ex. b 0 är kopplad till den översta vågräta dioden). b 7 är kopplad till punkten på 7-segmentdiesplayen, så den sätter ni alltid till noll. In: ML4_OUT = Talet som ska skrivas ut till 7-segmentdisplayen (tal mellan 0-16) Ut: Inget ska returneras från subrutinen. Exempel: Nedre byten på D0 = %00110000 ska ge en etta på displayen och ML4_OUT = %00111111 ger en nolla.

ML4_OUT b 7 b 6 b 5 b 4 b 3 b 2 b 1 b 0 b 0 b 1 b 5 b 6 b 2 b 4 b 3 b 7 Ex. för en nolla ML4_OUT = %00111111 b 7 =0 b 6 =0 b 5 =1 b 4 =1 b 3 =1 b 2 =1 b 1 =1 b 0 =1 ********************************************** * Subroutine: writetosevensegment * * Input parameters: D0.B number to be written * Output: none ********************************************** writetosevensegment: MOVEM.L D0/A0,-(SP) BRA startofsub *A0, D0 will be used and copied to the stack segmentlut: **SEGMENTS**76543210***** OUT_0 DC.B %00111111 OUT_1 DC.B %00110000 OUT_2 DC.B %01101101 OUT_3 DC.B %11111001 OUT_4 DC.B %01110010 OUT_5 DC.B %01011011 OUT_6 DC.B %01011111 OUT_7 DC.B %00110001 OUT_8 DC.B %01111111 OUT_9 DC.B %01111011 OUT_A DC.B %01110111 OUT_B DC.B %01011110 OUT_C DC.B %00001111 OUT_D DC.B %01111100 OUT_E DC.B %01001111 OUT_F DC.B %01000111 startofsub: ALIGN ANDI.L #$F,D0 * Only four bit parameter LEA segmentlut,a0 * A0 points at start of table ADDA.L D0,A0 * Add parameter to start of table MOVE.B (A0),ML4_OUT * Copy the 7-seg code that A0 points at MOVEM.L (SP)+,D0/A0 RTS * Retrieve old value of A0,D0

9. Sätt samman en minnesbank som är konstruerad av flera mindre minnesobjekt (se komponenten i figuren). Signaler till minnesbanken ska vara A(adress), D(data) samt CS*. Minneskapslarna som används för att konstruera minnesbanken har samma signaler som den färdiga minnesbanken har. Där CS* signalen är aktivt låg. Du ska indikera vilka adress/data-signaler som ska kopplas till de olika minneskapslarna. Minnesbanken ska vara 8Mbytes stort organiserat med en 16 bitars databuss. Minnesbanken sätts samman med hjälp av minneskomponenter som har 4-bitars databuss och 20 bitars adressbuss. A(19:0) D(3:0) CS RAM Minne

10. A) Konstruera en fullständig adressavkodare (fullständig adressavkodning) som realiserar adresskartan definierad i uppgiften. Implementera med hjälp av logiska grindar och avkodare (specificerad i Appendix) Komponent ROM1 ROM2 RAM KOMP_1 KOMP_2 KOMP_3 KOMP_4 Adressområde 00 0000-00FFFF 010000-01FFFF 04 0000-07 FFFF 80 0000-80 00FF 81 0000-81 00FF 82 0000-82 000F 83 0000-83 000F

B) Hur många bytes är definierat för varje komponent i adresskartan? Komponent Adressbitar som omfattas av komponent Storlek ROM1 A 15 - A 0 2 16 =2 6 kbyte = 64 kbyte ROM2 A 15 - A 0 2 16 =2 6 kbyte = 64 kbyte RAM A 17 - A 0 2 18 =2 8 kbyte = 256 kbyte KOMP_1 A 7 - A 0 2 8 byte = 256 byte KOMP_2 A 7 - A 0 2 8 byte = 256 byte KOMP_3 A 3 - A 0 2 4 byte = 16 byte KOMP_4 A 3 - A 0 2 4 byte = 16 byte 11. Skriv en subrutin som konverterar ett 32-bitars binärttal till en textsträng med nollor och ettor. In: D0 = Talet som ska omvandlas. A0 pekar på startadressen för strängen, dvs på det mest signifikanta bit-tecknet. Ut: En teckensträng med ettor och nollor som avslutats med en binär nolla i den sista positionen (A0+32) för att indikera strängslut. Exempel: Talet $4323 Ska ge textsträngen "00000000000000000100001100100011",0. ******************************************************************************* * Subroutine: binarytostring * * Input parameters: D0.L number to be converted into a string of '1' and '0' * A0 points to the start address of the string to be written * Output: A null terminated string will be written at start address of A0 ******************************************************************************* binarytostring: Loop: MOVEM.L D0-D2/A0,-(SP) * D0-D2 and A0 will be used and copied to the stack MOVE.B #32,D1 * Load counter for 32 bits ROL.L#1,D0 * Rotate left to get next bit MOVE.B D0,D2 * Take a copy ANDI.B #1,D2 * Only concider one bit ( bit 0 ) at a time ADDI.B #$30,D2 * Add the ascii code for a '0' to this bit MOVE.B D2,(A0) * Write this converted character to the string ADDQ.L #1,A0 * Increment the pointer to next character to be written SUBQ.B #1,D1 * count bits BNE Loop * branch as long as D1 > 0 MOVE.B #0,(A0) * zero terminates the string MOVEM.L (SP)+,D0-D2/A0 * Retrieve register D0-D2 and A0 RTS