Tentamen i EIT070 Datorteknik



Relevanta dokument
Lösningar till tentamen i EIT070 Datorteknik

Lösningar till tentamen i EIT070 Datorteknik

Lösningar till tentamen i EIT070 Datorteknik

Datorsystemteknik Föreläsning 7DAVA14

Polling (cyklisk avfrågning) Avbrott

Stack och subrutiner Programmeringskonventionen

Tentamen i EIT070 Datorteknik

Mål. Datorteknik. Introduktion. Innehåll. Verklig situation - pappaledighet. Introduktion (forts)

Institutionen för elektro- och informationsteknologi, LTH

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

Institutionen för elektro- och informationsteknologi, LTH

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

Datorteknik. Föreläsning 4. Polling och avbrott. Institutionen för elektro- och informationsteknologi, LTH. Mål

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

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

Tentamen. Datorteknik Y, TSEA28

Datorsystemteknik DVGA03 Föreläsning 8

Datorsystemteknik DVGA03 Föreläsning 5

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

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!!

Tentamen PC-teknik 5 p

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH.

Digital- och datorteknik

Datorteknik. Föreläsning 6. Processorns uppbyggnad, pipelining. Institutionen för elektro- och informationsteknologi, LTH. Mål

Tentamen. Datorteknik Y, TSEA28

A-del motsvarande KS1

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

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

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

Besvara de elektroniska frågorna (se kurshemsidan). Läs kapitel i kursbok.

Tentamen. Datorteknik Y, TSEA28

Ansvarig lärare: Olof Andersson, Telefon (besöker skrivsalen)

Tentamen. Datorteknik Y, TSEA28

Extra lab. Nu på fredag kl 8-12 Frivillig Enbart hjälp med projektuppgiften Ingen examination

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

Högskolan i Halmstad Digital- och Mikrodatorteknik 7.5p. Lista på registeruppsättningen i PIC16F877A Datablad TTL-kretsar 74-serien

Tentamen PC-teknik 5 p Lösningar och kommentarer

Tentamen. Datorteknik Y, TSEA28

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

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

Tentamen. Datorteknik Y, TSEA28

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

Grundläggande datavetenskap, 4p

F5: Högnivåprogrammering

F5: Högnivåprogrammering

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

Programexempel för FLEX

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

Mål. Datorteknik. Repetition av avbrott. Innehåll. Mätning och styrning. Datorer för mätning och styrning. timer. Datorsystem A/D. Analog insignal D/A

Svar till tentamen den 16 december 2013 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Föreläsning 2. Operativsystem och programmering

LEU240 Mikrodatorsystem

Digital- och datorteknik

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

Digitalteknik och Datorarkitektur

rd, rs, rt Digitalteknik och Datorarkitektur 5hp ALU register) 32 bit register b 5 bit 32 Registers 32 bit MIPS is a Register-toregister

Tentamen. Datorteknik Y, TSEA28

C++ Lektion Tecken och teckenfält

Provmoment: Ladokkod: Tentamen ges för: Tentamen TE111B El3. Namn: Personnummer: Tentamensdatum: Tid: 14:00-18:00.

CE_O3. Nios II. Inför lab nios2time

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

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

Tentamen (Exempel) Datorteknik Y, TSEA28

Kontrollskrivning Mikrodatorteknik CDT S2-704

DatorsystemteknikDAVA14 Föreläsning 9

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

Digital- och datorteknik

Datorsystemteknik DAV A14 Föreläsning 1

Institutionen för datavetenskap 2014/15

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

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

SVAR TILL TENTAMEN I DATORSYSTEM, HT2013

Tentamen Grundläggande programmering

Tentamen. Datorteknik Y, TSEA28

Tentamen'('Datastrukturer,'algoritmer'och'programkonstruktion.'

Tentamen den 18 mars svar Datorteknik, EIT070

Datorsystem. Tentamen

Tentamen. Datorteknik Y, TSEA28

Digitalteknik och Datorarkitektur 5hp

Föreläsning 1: Intro till kursen och programmering

3. Mikroprogrammering II

Tentamen OOP

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

Övningsuppgifter i Mikrodatorteknik 4p/5p

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Övningsuppgifter STYRNING - i Mikrodatorteknik för U2 2010

Introduktion till programmering och Python Grundkurs i programmering med Python

Föreläsning 1: Intro till kursen och programmering

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

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Föreläsningsanteckningar 3. Mikroprogrammering II

Digital- och datorteknik

Datorsystem Laboration 2: Minnesmappade bussar

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

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

HI1024 Programmering, grundkurs TEN

Transkript:

Tentamen i EIT070 Datorteknik Institutionen för Elektro- och informationsteknik, LTH Onsdagen den 10 mars 2010, klockan 08:00 13:00 å Victoriastadion 1 och 2. Tillåtna hjälpmedel: på tentan utdelad formelsamling, miniräknare. Skriv lösningar till varje uppgift på separata ark och använd endast ena sidan på varje ark. Ange namn, program och startår på varje ark. Motivera dina svar tydligt, kommentera all kod du skriver, samt redogör för alla antaganden du gör. Skriv tydligt och läsbart. Betygsgränserna är normalt 20 p för betyg 3, 30 p för betyg 4, och 40 p för betyg 5, av totalt 50 möjliga poäng. Uppgift 1 Ideon Science Park har nya låskodsläsare med RFID-taggar. Läsare finns installerade för alla dörrar på Ideon. Mjukvaran i läsarna är dock inte korrekt. Du ska hjälpa till att designa en fungerande lösning. Läsaren fungerar så att först håller man taggen nära läsaren. När taggen har identifierats avger läsaren ett kort pip. Man ska då knappa in en privat fyrsiffrig kod. Om koden är rätt låses dörren upp. Läsaren har en RFID-enhet som skickar en signal när en tag är tillräckligt nära för att kunna läsas av. Läsaren har en knappsats som skickar en signal varje gång en knapp trycks in. När en RFID-tag läses av blir ett trettiotvåbitars värde tillgängligt på en inport. Inportens adress är definierad av konstanten RFIDVAL. Knappsatsen har knapparna 0-9. När en knapp är intryckt finns ett åttabitars värde tillgängligt på en inport. Inportens adress är definierad av konstanten BUTTVAL. Det finns en ljudenhet som avger ett svagt pip när man skriver en etta till porten BEEPADR. Det finns en realtidsklocka som skickar tidsavbrott 100 gånger i sekunden, på avbrottsingång INT1. För varje RFID-värde finns en motsvarande korrekt fyrsiffrig kod. Denna tabell ligger lokalt i läsarens minne. När tabellen ändras skickas en ny version ut via Internet till samtliga läsare, men du behöver inte ta hänsyn till detta i din lösning. Du kan anta att en korrekt tabell redan finns i datorns minne. Läsaren styrs av en MIPS-processor. Rita ett flödesschema för styrning av en läsare. Du behöver inte använda någon särskild syntax för ditt schema, men det ska klart framgå vilka olika steg som finns, samt vilka in- och utsignaler som används, (4 p). Vilka insignaler bör kopplas till avbrott och vilka bör kopplas till inportar som läses på initiativ av programmet? Lista samtliga insignaler och ange om de ska kopplas till avbrott eller inport. Beskriv även vilka utsignaler som finns, (3 p). Nuvarande läsare är felaktigt programmerade. Om man håller taggen i samma hand som den man trycker på knapparna med, händer det att läsaren läser taggen på nytt, mitt i inknappningen av en kod, varefter koden inte matchar till taggen. Förklara vad som troligen är fel och hur det kan rättas till, (3 p). Uppgift 2 I C finns en standardfunktion strcpy som kopierar en teckensträng (f) till en annan (t). Den är deklarerad så här: char *strcpy(char *t, char *f) { int i = 0; while (f[i]!= 0) { t[i] = f[i]; i++; } t[i] = 0; return t; } Argumenten t och f är vektorer av tecken (char) och en sträng avslutas genom att sista tecknet har värdet noll. Inuti strcpy anropas subrutinen countcalls, för att räkna antalet anrop till strcpy. Talet 18 talar om för countcalls att det är just funktionen strcpy som blivit anropad. Skriv en version av strcpy i MIPS-assembler. Du ska skriva komplett assemblerkod, inklusive direktiv, och använda alla MIPS programmeringskonventioner. Kommentera noggrant, (10 p). Sidan 1 av 8. Uppgifter finns på båda sidorna.

Uppgift 3 Studera följande instruktioner i MIPS-assembler:.set noreorder beq t0, t1, cont add t0, t0, t2 Beskriv hur beq-instruktionen fungerar och vad den utför, (3 p). I vilka fall kommer add-instruktionen att utföras, (2 p)? Beskriv vilka fält maskinkoden för beq-instruktionen består av, och vilka värden fälten innehåller, (3 p). I instruktionen finns ett läge, cont. Beskriv vad som egentligen finns lagrat i motsvarande maskinkod, (2 p). Uppgift 4 Vilken skillnad är det på instruktionerna add t0, t1, t2 och addu t0, t1, t2, (2 p)? Vilken matematisk operation motsvarar det att man skiftar ett heltal 2 steg åt höger med instruktionen sra, (2 p)? Hur kan man slå på och av samtliga användardefinierade avbrott i en MIPS-processor, (2 p)? När ett avbrott i MIPS är betjänat av avbrottsrutinen, skall man hoppa tillbaks till exekveringen av det program som avbröts. Hur vet man vart man ska hoppa, (2 p)? Vad är den typiska skillnaden mellan CISC och RISC när det gäller maskininstruktionernas längd, (2 p)? Uppgift 5 Studera följande kod, skriven av den ökände MIPS-hackern Mr Larsson. Han har försökt att skriva en subrutin patch, som lägger in hackerns egen kod i ett existerande, färdigkompilerat program. Förklara hur det går till, (6 p). Det finns emellertid en bugg i koden. Vilken är den, (4 p)? Mr Larsson är också dålig på att skriva kommentarer. Han är ju trots allt en hacker. instr: jal mysub nop.globl patch.ent patch patch: la t0, instr la t1, mysub lw t2, 0(a0) lw t3, 4(a0) sw t2, 0(t1) sw t3, 4(t1) lw t2, 0(t0) lw t3, 4(t0) sw t2, 0(a0) sw t3, 4(a0).end patch.globl mysub.ent mysub mysub: nop nop # my secret code here....end mysub Lycka till! Sidan 2 av 8. Uppgifter finns på båda sidorna.

Tentamen i EIT070 Datorteknik Institutionen för Elektro- och informationsteknik, LTH Onsdagen den 10 mars 2010, klockan 08:00 13:00 å Victoriastadion 1 och 2. Tillåtna hjälpmedel: på tentan utdelad formelsamling, miniräknare. Skriv lösningar till varje uppgift på separata ark och använd endast ena sidan på varje ark. Ange namn, program och startår på varje ark. Motivera dina svar tydligt, kommentera all kod du skriver, samt redogör för alla antaganden du gör. Skriv tydligt och läsbart. Betygsgränserna är normalt 20 p för betyg 3, 30 p för betyg 4, och 40 p för betyg 5, av totalt 50 möjliga poäng. Uppgift 1 Ideon Science Park har nya låskodsläsare med RFID-taggar. Läsare finns installerade för alla dörrar på Ideon. Mjukvaran i läsarna är dock inte korrekt. Du ska hjälpa till att designa en fungerande lösning. Läsaren fungerar så att först håller man taggen nära läsaren. När taggen har identifierats avger läsaren ett kort pip. Man ska då knappa in en privat fyrsiffrig kod. Om koden är rätt låses dörren upp. Läsaren har en RFID-enhet som skickar en signal när en tag är tillräckligt nära för att kunna läsas av. Läsaren har en knappsats som skickar en signal varje gång en knapp trycks in. När en RFID-tag läses av blir ett trettiotvåbitars värde tillgängligt på en inport. Inportens adress är definierad av konstanten RFIDVAL. Knappsatsen har knapparna 0-9. När en knapp är intryckt finns ett åttabitars värde tillgängligt på en inport. Inportens adress är definierad av konstanten BUTTVAL. Det finns en ljudenhet som avger ett svagt pip när man skriver en etta till porten BEEPADR. Det finns en realtidsklocka som skickar tidsavbrott 100 gånger i sekunden, på avbrottsingång INT1. För varje RFID-värde finns en motsvarande korrekt fyrsiffrig kod. Denna tabell ligger lokalt i läsarens minne. När tabellen ändras skickas en ny version ut via Internet till samtliga läsare, men du behöver inte ta hänsyn till detta i din lösning. Du kan anta att en korrekt tabell redan finns i datorns minne. Läsaren styrs av en MIPS-processor. Rita ett flödesschema för styrning av en läsare. Du behöver inte använda någon särskild syntax för ditt schema, men det ska klart framgå vilka olika steg som finns, samt vilka in- och utsignaler som används, (4 p). Vilka insignaler bör kopplas till avbrott och vilka bör kopplas till inportar som läses på initiativ av programmet? Lista samtliga insignaler och ange om de ska kopplas till avbrott eller inport. Beskriv även vilka utsignaler som finns, (3 p). Nuvarande läsare är felaktigt programmerade. Om man håller taggen i samma hand som den man trycker på knapparna med, händer det att läsaren läser taggen på nytt, mitt i inknappningen av en kod, varefter koden inte matchar till taggen. Förklara vad som troligen är fel och hur det kan rättas till, (3 p). Sidan 3 av 8. Uppgifter finns på båda sidorna.

Lösning 1 Programmet skall bevaka följande avbrottssignaler: Avbrott från RFID-enheten som kommer när en tag är i närheten. Avbrott från knappsatsen som kommer när en knapp trycks in. Avbrott från klockenheten Ovanstående tre signaler kopplas till avbrottsingångar. Programmet skall läsa följande inportar: RFID-identitet i form av trettiotvå bitar. Denna läses efter att avbrottet tag i närheten kommit. Identitet (siffervärde) för intryckt knapp. Denna läses efter att avbrottet för intryckt knapp kommit. Programmet skall skriva följande utsignaler: Aktivera pip, efter att RFID-identiteten lästs. Markerar för användaren att han kan börja knappa in sin fyrsiffriga kod. Öppna dörr, om den inmatade koden och RFIDidentiteten stämmer överens. När avbrottet tag i närheten har kommit och läsaren håller på att läsa in RFID-koden, ska avbrotten från knappsatsen vara avstängda. När läsaren väntar på inknappning, ska avbrottet från tag i närheten vara avstängt. Det bör finnas en timeout, som gör att användaren får börja om, om det dröjer mer än 4-5 sekunder innan nästa knapptryckning. Felet med nuvarande läsare är troligen att under den tid som inknappningen av den fyrsiffriga koden sker, är avbrottet från tag i närheten inte avstängt. Om användaren håller taggen i samma hand som han knappar in koden med, kommer taggen lätt för nära läsaren, som då vill början om med första siffran igen. Lösningen är att (som ovan rekommenderats) slå av avbrottet för tag i närheten under tiden användaren knappar in sin kod. Uppgiften är verklighetsbaserad. Felet med taggen som läses om och om igen när den kommer nära, trots att man håller på att knappa in koden, verkade finnas i det system som används på Ideon, men är numera rättat. Verkligheten är full av undermåliga tekniska lösningar. Sidan 4 av 8. Uppgifter finns på båda sidorna.

Uppgift 2 I C finns en standardfunktion strcpy som kopierar en teckensträng (f) till en annan (t). Den är deklarerad så här: char *strcpy(char *t, char *f) { int i = 0; while (f[i]!= 0) { t[i] = f[i]; i++; } t[i] = 0; return t; } Argumenten t och f är vektorer av tecken (char) och en sträng avslutas genom att sista tecknet har värdet noll. Inuti strcpy anropas subrutinen countcalls, för att räkna antalet anrop till strcpy. Talet 18 talar om för countcalls att det är just funktionen strcpy som blivit anropad. Skriv en version av strcpy i MIPS-assembler. Du ska skriva komplett assemblerkod, inklusive direktiv, och använda alla MIPS programmeringskonventioner. Kommentera noggrant, (10 p). Lösning 2.globl strcpy.ent strcpy strcpy: subu sp, sp, 16 sw ra, 8(sp) sw a0, 4(sp) sw a1, 0(sp) repeat: lb t0, 0(a1) sb t0, 0(a0) beq t0, zero, ready addi a0, a0, 1 addi a1, a1, 1 b repeat ready: ori a0, zero, 18 jal countcalls lw a1, 0(sp) lw a0, 4(sp) lw ra, 8(sp) addu sp, sp, 16 or v0, a0, a0.end strcpy # strcpy is a global name # strcpy is a subroutine # reserve 4 words on the stack # save return address # save first argument, t # save second argument, f # fetch next char from string f # store char in string t # ready if char is null # set a0 to point at next char in t # set a1 to point at next char in f # repeat # place 18 as argument # call subrutine countcalls # restore second argument # restore first argument # restore return address # return stack space # strcpy should return address to t # jump back to caller # that s all, folks Den här versionen av strcpy anropar en okänd subrutin countcalls. Man måste därför följa samtliga programmeringskonventioner för MIPS. Man vet ju inte vilka register som används inne i countcalls eller andra subrutiner som eventuellt anropas från den. Subrutinen strcpy är en existerande standardrutin i C, och är definierad som i uppgiften. Metoden att använda värdet noll för att markera slutet på en textsträng är standardmetoden för enkla textsträngar i språket C och operativsystemet Unix (och därför alltså även Linux). Sidan 5 av 8. Uppgifter finns på båda sidorna.

Uppgift 3 Studera följande instruktioner i MIPS-assembler:.set noreorder beq t0, t1, cont add t0, t0, t2 Beskriv hur beq-instruktionen fungerar och vad den utför, (3 p). I vilka fall kommer add-instruktionen att utföras, (2 p)? Beskriv vilka fält maskinkoden för beq-instruktionen består av, och vilka värden fälten innehåller, (3 p). I instruktionen finns ett läge, cont. Beskriv vad som egentligen finns lagrat i motsvarande maskinkod, (2 p). Lösning 3 Studera följande instruktioner i MIPS-assembler:.set noreorder beq t0, t1, cont add t0, t0, t2 Beskriv hur beq-instruktionen fungerar och vad den utför, (3 p). Instruktionen jämför innehållen i register t0 och t1. Om de är lika hoppar exekveringen till läget cont, och annars fortsätter den bara med följande instruktioner. I vilka fall kommer add-instruktionen att utföras, (2 p)? Den utförs alltid. Om exekveringen ska hoppa till cont, körs ändå den instruktion som ligger direkt efter beq. Notera att det är direktivet noreorder som gäller. Beskriv vilka fält maskinkoden för beq-instruktionen består av, och vilka värden fälten innehåller, (3 p). Maskininstruktionen innehåller fyra fält: Fält 1: operationskoden för instruktionen beq, sex bitar, värde 000100. Fält 2: nummer på första registret, fem bitar, värde 8 eller 01000, (t0 = $8). Fält 3: nummer på andra registret, fem bitar, värde 9 eller 01001, (t1 = $9). Fält 4: ett tal som anger hopp ett antal instruktioner framåt eller bakåt, sexton bitar. Uppgiften innehåller inte tillräckligt med information för att ange ett binärt värde för Fält 4. I instruktionen finns ett läge, cont. Beskriv vad som egentligen finns lagrat i motsvarande maskinkod, (2 p). Ett sexton bitars heltal i tvåkomplement, som anger hur många instruktioner framåt eller bakåt vi ska hoppa, från nästa instruktion. Assemblern räknar ut detta värde vid assembleringen. Sidan 6 av 8. Uppgifter finns på båda sidorna.

Uppgift 4 Vilken skillnad är det på instruktionerna add t0, t1, t2 och addu t0, t1, t2, (2 p)? Vilken matematisk operation motsvarar det att man skiftar ett heltal 2 steg åt höger med instruktionen sra, (2 p)? Hur kan man slå på och av samtliga användardefinierade avbrott i en MIPS-processor, (2 p)? När ett avbrott i MIPS är betjänat av avbrottsrutinen, skall man hoppa tillbaks till exekveringen av det program som avbröts. Hur vet man vart man ska hoppa, (2 p)? Vad är den typiska skillnaden mellan CISC och RISC när det gäller maskininstruktionernas längd, (2 p)? Lösning 4 Vilken skillnad är det på instruktionerna add t0, t1, t2 och addu t0, t1, t2, (2 p)? Instruktionen add testar resultatet för aritmetiskt fel (overflow), men det gör inte addu. Vilken matematisk operation motsvarar det att man skiftar ett heltal 2 steg åt höger med instruktionen sra, (2 p)? Division med fyra. Hur kan man slå på och av samtliga användardefinierade avbrott i en MIPS-processor, (2 p)? Man sätter den minst signifikanta biten i statusregistret till 1 (avbrott på) eller 0 (avbrott av). Biten kallas Interrupt Enable, IE. När ett avbrott i MIPS är betjänat av avbrottsrutinen, skall man hoppa tillbaks till exekveringen av det program som avbröts. Hur vet man vart man ska hoppa, (2 p)? Registret EPC innehåller adressen till den instruktion där exekveringen ska återupptas. Man hoppar dit med instruktionen jr. Vad är den typiska skillnaden mellan CISC och RISC när det gäller maskininstruktionernas längd, (2 p)? I en CISC-processor kan instruktionerna vara olika långa, men i en RISC-processor har de alla samma längd. Sidan 7 av 8. Uppgifter finns på båda sidorna.

Uppgift 5 Studera följande kod, skriven av den ökände MIPS-hackern Mr Larsson. Han har försökt att skriva en subrutin patch, som lägger in hackerns egen kod i ett existerande, färdigkompilerat program. Förklara hur det går till, (6 p). Det finns emellertid en bugg i koden. Vilken är den, (4 p)? Mr Larsson är också dålig på att skriva kommentarer. Han är ju trots allt en hacker. instr: jal mysub nop.globl patch.ent patch patch: la t0, instr la t1, mysub lw t2, 0(a0) lw t3, 4(a0) sw t2, 0(t1) sw t3, 4(t1) lw t2, 0(t0) lw t3, 4(t0) sw t2, 0(a0) sw t3, 4(a0).end patch.globl mysub.ent mysub mysub: nop nop # my secret code here....end mysub Lösning 5 Subrutinen patch lägger in ett anrop (jal) till subrutinen mysub, någonstans i maskinkoden till ett befintligt program. Subrutinen får en viss adress som argument i register a0. Först flyttas den instruktion som ligger på adressen a0 och nästföljande instruktion till början av subrutinen mysub, där det finns plats i form av två noppar. Sedan läggs två andra instruktioner in på de tomma platserna, nämligen jal och nop. Effekten blir att när det existerande programmet körs, och exekveringen kommer till adressen som angavs i a0, hoppar exekveringen till mysub, där det första som händer är att de två flyttade instruktionerna körs. Sedan körs den kod hackern placerat vid # my secrect code here... Till sist hoppar exekveringen tillbaks till det ursprungliga programmet. Detta är ett sätt att lägga in hemlig kod i ett existerande program, en så kallad trojansk häst. Metoden används också för att skicka uppdateringar till levererad programvara, och kallas då en patch. Hackern har dock slarvat. Hoppinstruktionen jal skriver ju över registret $31 eller ra. Om det existerande programmet vill använda värdet i ra kan det ha blivit förstört. För att göra en fungerande patch borde hackern ha lagt in en instruktion som sparade ra före jal-instruktionen. Sidan 8 av 8. Uppgifter finns på båda sidorna.