Göm meny

Lektioner TSEA28

Lektioner i VT1

VT1 innehåller två lektionspass. Dessa lektioner är till för att introducera labbutrustningen och kunna ge svar på specifika frågor om utrustningen. Dessa består av en kortare genomgång samt därefter tid för frågor och diskussion.

2022vt1 Lektiorna genomförs på plats (se schema för lokal). Förutom detta kommer även någon av inspelningarna från förra året finnas tillgänglig i lisamkursrummet. Notera att inspelningarna från förra året saknar information om hur koppling ska göras.

Se laborationssidan för mer information om laborationsuppgiften i sig.

Tidsåtgång för labförberedelser

Vi har i många år sett att antalet studenter som klarar av laborationen på utsatt tid minskat stadigt och vi misstänker att detta beror på bristande förberedelser. I samband med en enkät 2011 visade det sig att det bara var 32% av studenterna som sade sig ha spenderat mer än 6 timmar på att förbereda sig inför laborationen. Detta trots att de högskolepoäng som laborationerna ger faktiskt motsvarar cirka 80 timmars arbete. Eftersom bara 20 av dessa är schemalagda så innebär det att ni har en tidsbudget på cirka 12 timmars förberedelsearbete per laboration! Om ni spenderar betydligt mindre tid än så på labförberedelser har ni sannolikt inte förberett er tillräckligt mycket!

Om du har frågor om labförberedelserna, försök att om möjligt fråga dessa i samband med den labförberedande lektionen. Om frågor uppstår i samband med förberedelsearbetet efter lektionen får ni också gärna besöka lektionsassistenter eller labassistenter på deras kontor.

Extra övningsuppgifter, datorteknik

Här nedan följer några övningsuppgifter som jag tror kan vara nyttiga att göra för de som känner att de behöver öva lite extra inför tentan och känner att de övningstentor som ligger på hemsidan inte är adekvata.

Jag tänker inte ge något facit till dessa uppgifter då de flesta uppgifter är enkla att kontrollera på DARMA-systemet eller LMIA. De återstående uppgifterna får ni helt enkelt kontrollera för hand (eller i värsta fall komma förbi mitt kontor och fråga om ni har fått fram rätt lösning).

Notera att det fortfarande är viktigt att ni läser teoriavsnitten i läroboken då jag inte har hunnit ordna några övningsuppgifter för dessa än. (Exempelvis cache, pipelining, MMU, arkitekturvariation, etc.)

Övningsuppgift 1 (DARMA)

Skriv ett program som skriver ut "Hello World!" och sedan avslutas. (Tips: Skriv en subrutin som tar en pekare till en adress i minnet där texten ska lagras och en längd på texten.)

Övningsuppgift 2 (DARMA)

Skriv ett program som läser in fyra tecken från terminalen. Om användaren skrev in sekvensen "4711" så ska du skriva ut "Correct password" (och avsluta programmet), annars "Incorrect password, try again" och börja om från början. (Tips: Använd rutinerna ifrån övningsuppgift 1.)

Övningsuppgift 3 (DARMA)

Ändra programmet i uppgift 2 så att det först skriver ut "Enter password: " och för varje siffra/tecken du skriver in så skriver den ut en stjärna.

Övningsuppgift 4 (DARMA)

Skriv ett program som implementerar avkodning av ett Caesarchiffer. Den kodade texten skrivs in på terminalen och den avkodade skrivs ut till terminalen. Programmet ska avslutas när man trycker på *. Använd sedan ditt program till att koda av följande meddelande: GDWRU WHNQL NYDUH QUROL JNXUV Notering: Caesarchiffer bygger på att ett A kodas som ett D, ett B kodas som ett E, och så vidare. När du kommer till slutet av alfabetet börjar du om från början (det vill säga, ett X kodas som ett A, ett Y som ett B och Z som C). (Det går även att hantera svenska tecken om man vill, men då måste man ta hänsyn till att de inte ligger efter Z i ascii-tabellen.

Övningsuppgift 5

Multiplicera följande tvåkomplementstal med hjälp av penna och papper:
       11101
      *10001
      ------
Tips: Gör en rimlighetskoll på din lösning genom att omvandla faktorerna och produkten till decimala tal.

Övningsuppgift 6

Multiplicera följande tvåkomplementstal med hjälp av penna och papper:
      1111111111111101
     *1111111111110001
     -----------------
(Tips: Tänk till! Du kan antagligen lösa detta utan att krångla särskilt mycket. Det borde vara ganska lätt att lösa detta tal utan penna och papper, speciellt om du nöjer dig med att ange svaret decimalt.)

Övningsuppgift 7 (MIA)

På den labdator som ni använde under mikroprogrammeringen, implementera instruktionshämtning och två adresseringslägen, förslagsvis omedelbar och absolut adressering. Implementera sedan följande instruktioner:
LOAD GRx, Operand
STORE GRx, Operand
CMP GRx, Operand
BEQ Adress
HALT
Gör detta utan att referera till den mikrokod ni skrivit tidigare! Uppgiften blir mer tentarealistisk om ni inte refererar till uppgift 1 i mikroprogrammeringen (där mikrokoden för hämtning/avkodning/adresseringslägen och så vidare är nerskriven.) Använd sedan dessa instruktioner till att skriva ett assemblerprogram som jämför om värdet i GR0 och GR1 är lika. Är dessa tal lika ska GR2 få värdet 1, annars ska GR2 få värdet 0.

Det är däremot helt OK att referera till de sidor i labhäftet som diskuterar vad de olika fälten i mikroinstruktionsordet gör.

Övningsuppgift 8 (MIA)

Implementera följande instruktion:
ADDVEKT8 GRx, Adress
Denna instruktion ska börja på adressen som anges i instruktionen (ange absolut adresseringsmod i instruktionen), summera ihop dessa och lägga svaret i GRx. Det vill säga, om PM har följande innehåll och vi kör instruktionen ADDVEKT8 GR2, 59 så ska GR2 få värdet 592.
58: 532
59: 123
60: 11
61: 234
62: 10
63: 0
64: 95
65: 9
66: 110
67: 543

Övningsuppgift 9 (MIA)

Implementera följande instruktion:
FFO GRx, Operand   ; Find First One
Denna instruktion ska hitta den första ettan (räknat från MSB-biten) i operanden och lagra positionen för denna i GRx. Om ingen etta hittades i talet ska värdet 0 lagras i GRx och Z-flaggan ska sättas.

Övningsuppgift A (MIA)

Implementera följande instruktion:
SETBIT GRx, Operand
Denna instruktion skall, räknat ifrån LSB, sätta den bit som anges i operanden till 1. Exempel: Om GR3 innehåller värdet $1040 och PM innehåller värdet 14 på adress 95 så ska innehållet i GR3 ändras till $5040 efter att instruktionen SETBIT GR3,95 har körts.

Svårare uppgifter

Här nedan följer ett gäng uppgifter av mer utmanande karaktär. Om ni klurat på dom ett tag och inte lyckats lösa dessa så får ni gärna maila mig för att be om tips. I detta mail bör ni skicka med en kort beskrivning över hur ni resonerat när ni försökt lösa dessa uppgifter, speciellt om det är så att ni har en vag ide om hur ni skulle kunna lösa det men inte är säker på hur ni ska gå vidare med den.

Övningsuppgift C (DARMA)

I r0 finns det ett 32 bitars tal och i r1 finns det ett annat 32 bitars tal. Skriv ut "R0" till terminalen om talet i r0 är störst. Skriv ut "R1" till terminalen om talet i r1 är störst. De enda villkorliga hoppinstruktioner du får använda är BNE och BEQ! (I övrigt inga begränsningar på vad du får göra.)

Övningsuppgift D (MIA)

Implementera instruktionen ADDVEKT8 ifrån uppgift 8 så att den kan köras på maximalt 30 klockcykler.

Övningsuppgift E (DARMA)

Samma som övningsuppgift C, men du får inte använda något villkorligt hopp över huvudtaget.

Informationsansvarig: Kent Palmkvist
Senast uppdaterad: 2022-01-11