Pipelining med direkt adressering
Jag förstår men undrar över :
I.o.m. "direkt adressering" så skulle adressen till operanden ligga i instruktionen (vet dock inte om det är nödvändigt att påpeka det). Själva instruktionen skulle se ut på följande vis
och skulle ta
När jag kikar på facit läser jag
"Instruktionen skulle ta följande tid: 100 ns för att läsa in A, 100 ns för att läsa B, 1
ns för att beräkna additionen, och 100 ns för att skriva resultatet till minnet. Total
tid: 100+100+1+100=301 ns.".
Måste det inte vara flera instrukioner då?
Jag blir alltid skeptisk till kvaliteten på frågor i böcker när det är stavfel i dem: "komiplator".
Det är ovanligt att en instruktion innehåller adresser till flera operander på en gång. Jag skulle tro att
ADD R1,C
vore en möjlig instruktion. Men jag är inte bekant med de senaste arkitekturerna (däremot allt mellan 1980 och 2000). Jag måste läsa på hur ARM fungerar.
Även då måste man ju ladda värdet, så bara 4 ns kan det inte bli, såvida det inte rör sig om att B och C är konstanter, som kompilatorn har placerat i minnet i det första fallet. Men det brukar kallas "immediate", inte "direct addressing". Men jag kanske behöver fräscha upp min kunskap om terminologin också.
Men det var din fundering, antar jag. Det som facit säger verkar rätt. De har bytt ut
LOAD R2,C
ADD R1, R2
mot
ADD R1,C
Men då jämför jag med uppgift :
Här är flera instruktioner och om nu de bara har bytt ut till ADD R1, C istället så tycker jag inte att det gör att hela blir en instruktion. Det står tydligt att det är fyra instruktioner på .
Plugghingsten skrev:Men då jämför jag med uppgift :
Här är flera instruktioner och om nu de bara har bytt ut till ADD R1, C istället så tycker jag inte att det gör att hela blir en instruktion. Det står tydligt att det är fyra instruktioner på .
Ordet "instruktionen" antyder förstås att det bara blir en instruktion, och det struntade jag i. Om vi inte struntar i det så måste alla adresser stå i instruktionen, t.ex.
ADD A,B,C
och sådana instruktioner har nog funnits i äldre arkitekturer (nu måste jag läsa på om x86 också). Det måste vara det de menar. Visar facit inte hur instruktionen ser ut? (C kan ju vara först lika gärna, det beror på hur man har valt att konstruera assemblern.)
Ju mer jag googlar på "direct addressing", desto mer förvirrad blir jag. Vad säger din lärobok att det betyder?
Men jag förstår inte hur allt sker i en och samma intruktion (viktigt då det står i uppgiften "direkt adressering" vilket betyder allt i en instruktion.
Det som står i föreläsningarna är kort:
"Direkt adressering
ADD R1,x //R1 <- R1+[x] Adressen till operanden ligger i
instruktionen. (på adress x finns värdet som adderas)"
Instruktionerna i en CISC-dator (complex instruction set computer) är ofta själva implementerade med en enklare sorts instruktioner som kallas mikrokod. Mikrokoden för ADD A,B,C ser antagligen ut ungefär som de enkla instruktionerna i början, men kanske också med inlagda pauser för att data ska hinna komma till registren, och med minnesinstruktionerna uppdelade i en som hämtar adressen och en annan som hämtar indirekt via den hämtade adressen. RISC-datorer (reduced instruction set computer) har oftast ingen mikrokod, utan det är instruktionerna själva som är det lägsta lagret, och är så enkla att de kan göras i en processorcykel (plus väntetid för minnesaccesser).
Svarade jag på nånting du frågade om?
Det blev nu lite tydligare, tack!. Koordinerade mig lite bättre i föreläsningarna men tråkigt att man behöver googla upp så mycket.
Det här då!
Jag tolkar det nu som om det måste finnas åtminstone två instruktioner. Tolkar jag det fel?
Plugghingsten skrev:Det här då!
Jag tolkar det nu som om det måste finnas åtminstone två instruktioner. Tolkar jag det fel?
Ja, rentav fyra. Det ser ut som i första exemplet då.