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

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

Datorsystemteknik DVGA03 Föreläsning 8

Lösningar till tentamen i EIT070 Datorteknik

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

CE_O1. Nios II. Enkla assembler-instruktioner.

Institutionen för datavetenskap 2014/15

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

Lösningar till tentamen i EIT070 Datorteknik

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

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

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

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

Erfarenheter från labben

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

Assemblerprogrammering för ARM del 2

Tentamen. Datorteknik Y, TSEA28

Tentamen. Datorteknik Y, TSEA28

Stack och subrutiner Programmeringskonventionen

Erfarenheter från labben

Tentamen. Datorteknik Y, TSEA28

Digitala System: Datorteknik ERIK LARSSON

CPU. Carry/Borrow IX. Programräknare

Tentamen den 12 januari 2017 Datorarkitektur med operativsystem, EDT621

Tentamen i Introduktion till programmering

Programexempel för FLEX

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

Institutionen för elektro- och informationsteknologi, LTH

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

Lösningar till tentamen i EIT070 Datorteknik

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

Digitalteknik och Datorarkitektur 5hp

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

F4: Assemblerprogrammering

Tentamen i EIT070 Datorteknik

Tentamen. Datorteknik Y, TSEA28

DatorsystemteknikDAVA14 Föreläsning 9

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

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

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

Datorarkitekturer med operativsystem ERIK LARSSON

Digital- och datorteknik

Exempelsamling Assemblerprogrammering

Kontrollskrivning Mikrodatorteknik CDT S2-704

Tentamen. Datorteknik Y, TSEA28

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

Digital- och datorteknik

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

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

Digitalteknik EIT020. Lecture 15: Design av digitala kretsar

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

TSEA28 Datorteknik Y (och U)

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

TDIU01 - Programmering i C++, grundkurs

Tentamen (Exempel) Datorteknik Y, TSEA28

Grundläggande datavetenskap, 4p

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

Assemblerprogrammering del 1

Föreläsning 2. Operativsystem och programmering

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

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

Styrenheten styrsignalsekvenser programflödeskontroll

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

Tentamen. Datorteknik Y, TSEA28

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Digital- och datorteknik

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

729G04 Programmering och diskret matematik. Python 3: Loopar

CE_O3. Nios II. Inför lab nios2time

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

Tentamen den 18 mars svar Datorteknik, EIT070

Tentamen den 14 januari 2015 Datorarkitekturer med operativsystem, EDT621, 7,5 poäng

Digital- och datorteknik

Skillnader mellan Python och Java

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

TSEA28 Datorteknik Y (och U)

Tentamen. Datorteknik Y, TSEA28

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:

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

Digital- och datorteknik

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python vecka 41-42: Individuell programmering

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Tentamen. Datorteknik Y, TSEA28

Exempeltentamen Datorteknik, EIT070,

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.

Programmering i maskinspråk (Maskinassemblering)

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

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

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

Programmering i maskinspråk (Maskinassemblering)

Digital- och datorteknik

Digital- och datorteknik

TDIU01 - Programmering i C++, grundkurs

TDDC77 Objektorienterad Programmering

Foto: Rona Proudfoot (some rights reserved) Datorarkitektur 1. Datapath & Control. December

Transkript:

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

Erfarenheter från projektstart Läs på i Downey om klasser och objekt! När kan/ska man använda self? När bollarna krockar så fastnar de i varandra Hur placera flera bollar slumpvis så de inte överlappar?

Användning av self self används enbart när man definierar en metod till en klass. self ska vara första parametern till varje metod, även till init () I metodkroppen representerar self det objekt som används vid metodanropet

class Ball():.. def krock(self,otherball):.. theball = Ball(...) self -> theball otherball -> redball redball = Ball(...) theball.krock(redball)

class Ball():.. def move(self): for otherball in ballist: if self.krock(otherball):.. def krock(self,otherball):.. ballist =... for ball in ballist: ball.move()

Krock: distansen mellan centra är mindre än summan av radierna och bollarna är på väg mot varandra Avståndet minskar om bollarna får köra ett steg till: dist(add(b1.pos, b1.velocity)), add(b2.pos, b2.velocity))) ska vara mindre än dist(b1.pos, b2.pos)

Krock: distansen mellan centra är mindre än summan av radierna och bollarna är på väg mot varandra Avståndet minskar om bollarna får köra ett steg till: dist(add(b1.pos, b1.velocity)), add(b2.pos, b2.velocity))) ska vara mindre än dist(b1.pos, b2.pos)

Krock: distansen mellan centra är mindre än summan av radierna och bollarna är på väg mot varandra Avståndet minskar om bollarna får köra ett steg till: dist(add(b1.pos, b1.velocity)), add(b2.pos, b2.velocity))) ska vara mindre än dist(b1.pos, b2.pos)

Placera bollar så de inte överlappar

Placera bollar så de inte överlappar def overlaps(newpos,ball): ## will a new ball at newpos overlab the ball ball? return distance(ball.pos, newpos < 2*ball.radius)

Placera bollar så de inte överlappar def overlaps(newpos,ball): ## will a new ball at newpos overlab the ball ball? return distance(ball.pos, newpos < 2*ball.radius) def isgood(pos): ## will a new ball at pos stay clear of all balls? for ball in ballist: if overlaps(ball,pos): return False return True

Placera bollar så de inte överlappar def overlaps(newpos,ball): ## will a new ball at newpos overlab the ball ball? return distance(ball.pos, newpos < 2*ball.radius) def isgood(pos): ## will a new ball at pos stay clear of all balls? for ball in ballist: if overlaps(ball,pos): return False return True def placeball(ball): ## find a good place for ball while True: newpos = randomly generate new position if isgood(newpos): ball.pos = newpos break

Placera bollar så de inte överlappar def overlaps(newpos,ball): ## will a new ball at newpos overlab the ball ball? return distance(ball.pos, newpos < 2*ball.radius) def isgood(pos): ## will a new ball at pos stay clear of all balls? for ball in ballist: if overlaps(ball,pos): return False return True def placeball(ball): ## find a good place for ball while True: newpos = randomly generate new position if isgood(newpos): ball.pos = newpos break ballist = [] for i in range(15): # Generate and place 15 balls ball = Ball(...) placeball(ball) ballist.append(ball)

Mål Efter godkänd kurs ska den studerande kunna: övergripande kunna förklara principerna för hur en dator är uppbyggd och arbetar. Denna vecka: en provtur i assemblerprogrammering

Inuti en dator

Moderkort

Processor

Dopad kiselkristall

Floor plan

CMOS transistorer

Transistor

Transistor

Logiska grindar (Gates)

Logiska nätverk

Aritmetik

Minnen (1 bit)

Processorkärnor

Datavägen Register ALU! 7 8! Databussar

Datavägen Register ALU! 7! 8 Databussar

Datavägen Register ALU!! 15 Databussar

Datavägen Register ALU!! 15 Databussar

Exekveringscykeln!! *)+#,-.,)! "#$%#&'! (&)&! Instruktion Instruktion Instruktion! Minne

Exekveringscykeln!! *)+#,-.,)! Instruktion "#$%#&'! (&)&! Instruktion Instruktion! Minne

Exekveringscykeln!! Styrsignaler Styrsignaler: Välj rätt register Välj rätt ALU-operation *)+#,-.,)! Instruktion "#$%#&'! (&)&! Instruktion Instruktion! Minne

Exekveringscykeln!! Styrsignaler: Välj rätt register Välj rätt ALU-operation *)+#,-.,)! "#$%#&'! (&)&! Instruktion Instruktion! Minne

Instruktionstyper Registerinstruktioner Aritmetik Flytt mellan register Ladda register med tal Minnesinstruktioner Läs från minnet till register Skriv till minnet från register Programflödesinstruktioner (för att bestämma vilken instruktion som ska utföras härnäst)

Maskinkod Varje instruktion är ett ord = 32 bitar Ex: 0000000111110000100010000010000 betyder addera register nr 15 och 16, lagra resultatet i register 17 Ett program är en linjär sekvens sådana ord 0000000111110000100010000010000 0010000111110000100010000010000 0000000111110000100010110010000 0100000110110000100010000010000 0100000111110000100010110010000 0000000111110000100010000010000...

Kompilator Högnivåkod Maskinkod def hist_max(): loopvar = 1 maximum = 0 var_max = 1 while loopvar <= 50: print "x"*cl(loopvar) if cl(loopvar) > maximum: maximum = cl(loopvar) var_max = loopvar Kompilatorn översätter automatiskt 0000000111110000100010000010000 0010000111110000100010000010000 0000000111110000100010110010000 0100000110110000100010000010000 0100000111110000100010110010000 0000000111110000100010000010000 0000000111110000100010000010000 0010000111110000100010000010000 0000000111110000100010110010000 0100000110110000100010000010000 0100000111110000100010110010000 0000000111110000100010000010000

Assemblerspråk Textformat för maskinkod. add $r17, $r15, $r16 0000000111110000100010000010000 En koncis rad -> En maskininstruktion

Assemblator Assemblerkod Maskinkod inloop: li $v0, 5 syscall move $s0, $v0 beq $s0, 0, continue sw $s0, ($s1) add $s1, $s1, 4 j inloop Assemblatorn översätter automatiskt 0000000111110000100010000010000 0010000111110000100010000010000 0000000111110000100010110010000 0100000110110000100010000010000 0100000111110000100010110010000 0000000111110000100010000010000 0000000111110000100010000010000 0010000111110000100010000010000 0000000111110000100010110010000 0100000110110000100010000010000 0100000111110000100010110010000 0000000111110000100010000010000

Assemblerprogram Program = Linjär lista av instruktioner Instruktion = operation följt av operander Operationer indelas i typer. Registerinstruktioner Minnesinstruktioner Flödesinstruktioner Operander kan vara registerreferenser eller heltal

Register Mips har 32 stycken, $r0... $r31 Vart och ett är 32 bitar. Kan lagra heltal mellan -2 31 och +2 31-1 En del används för speciella ändamål En del har speciella namn $sp, $a0,... Vi kan lugnt använda de 8 registren $s0,..., $s7

Registerinstruktioner Aritmetik: add, sub, mul, div Alltid tre operander: destination, op1, op2 Operanderna är register. op2 får också vara heltal. add $s0, $s1, $s2 sub $s7, $s7, 4 add $s2, $s2, $s2 s0 = s1+s2 s7 = s7 4 s2 = s2+s2

Vad gör följande pgm? add $s3, $s0, $s1 add $s3, $s3, $s2 div $s3, $s3, 3

Vad gör följande pgm? add $s3, $s0, $s1 add $s3, $s3, $s2 div $s3, $s3, 3 s3 blir medelvärdet av s0,s1,s2

move Kopierar innehållet från ett register till ett annat move $s3, $s1 s3 = s1 li (load immediate) Lägger ett tal i ett register li $s2, 17 s2 = 17

syscall Anrop till operativsystemet Används för att Läsa in data Skriva ut data Avsluta program Instruktionen syscall har inga operander. Istället ska registret v0 laddas med rätt anropskod.

Inmatning li $v0, 5 # anropskod för input syscall Läser in ett heltal. Det lagras i v0

Utmatning li $v0, 1 syscall # anropskod för output # skriv ut talet i a0 Skriver ut det tal som ligger i a0

Programslut li $v0, 10 syscall

Anropskoder v0 gör 5 1 Inmatning av heltal till v0 Utmatning av heltal från a0 10 Avslutar programmet

Exempel: vad gör? main: li $v0, 5 syscall move $s0, $v0 li $v0, 5 syscall add $s0, $s0, $v0 li $v0, 1 move $a0, $s0 syscall li $v0, 10 syscall körexempel

Flödesinstruktioner För att referera till platser i ett assemblerprogram används etiketter (labels) En etikett avslutas med kolon och ska stå först (eller ensamt) på en rad. Ex: loop: Hoppinstruktioner kan medföra att ordinarie linjära körning bryts och att programmet hoppar till, dvs fortsätter vid en given etikett Ex: j loop # hoppa till etikett loop

En oändlig loop main: li $v0, 5 syscall move $s0, $v0 li $v0, 5 syscall add $s0, $s0, $v0 li $v0, 1 move $a0, $s0 syscall j main

Villkorshopp Testar ett enkelt villkor och hoppar bara om det är uppfyllt Inte uppfyllt -> hoppa inte utan fortsätt med nästa instruktion som vanligt Villkor: Jämföra två register eller ett register och ett heltal

Villkor beq bne bgt bge blt ble ==!= > >= < <= Exempel beq $s0, $s1, end Hoppa till etikett end om innehållet i s0 och s1 är lika

Indelat i ord. Minnet 1 ord = 4 byte = 32 bit, dvs kan lagra som ett register (alt. en maskininstruktion) Varje byte har en adress. Första byte har adress 0, andra adress 1, etc. Adressen till ett ord är adressen till dess första byte. Första ord har adress 0, andra adress 4, etc 2 30-4 Det finns storleksordning 109 ord 4 8 0 { 32 bit

Datasegmentet I ett assemblerprogram kan man allokera en mängd minne ur det så kallade datasegmentet.data # anger datasegmentet.space 40 # allokera 40 byte = 10 ord.data och.space är så kallade direktiv, alltså inte assemblerinstruktioner.

Minnesinstruktioner lw sw load word, läs från minne till register store word, skriv till minne från register Tar två operander: 1. Ett register 2. En minnesplats En minnesplats kan vara endera av 1. En etikett i datasegmentet 2. Ett register inom parantes: betyder att det registret anger adressen. la load address, lägg minnesadress i ett register

Exempel lw $s0, base add $s0, $s0, $s0 sw $s0, base.data base:.space 40

Vad gör detta? la $s1, base lw $s0, ($s1) add $s1, $s1, 4 lw $s2, ($s1) add $s0, $s0, $s2

Inför nästa lab Läs på labinstruktionen. Inget annat material denna gång! Välj ny partner, för sista gången! Kolla att du kan starta PCSpim och köra något enkelt exempel

Individuellt prov Sker i labsal i halvklass: A1 - A2 - B1 - B2. Samma typ av uppgifter som labbarna fast enklare. Ingen assembler. Individuell, tyst programmering. Ingen hjälp från lärare. Vi examinerar bara. Samma hjälpmedel som på labbarna tillåtna. Egen dator tillåten. Förbered: Kolla att du kan logga in och öppna filerna words.txt och hamlet.txt. Kodhygien ett krav Graderat betyg som på en lab Uppgifterna får ej avslöjas. Uppgifterna kan variera. Alla får inte säkert precis samma uppgifter.

Projektredovisning Boka tid med respektive labledare. En grupp = 10 minuter. Förbered presentation vid dator om 5 minuter. Visa körning och kod. Bägge ska medverka. Egen dator tillåten. Labledaren kan ställa kontrollfrågor och provköra. Graderade betyg. Kriterier: Hur mycket funktionalitet som implementerats, kodens struktur och hygien, presentationens tydlighet.