2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F31 IS1200 Datorteknik Föreläsning CE F3 Metoder / subrutiner Kursboken, delar av kapitel 4.

Slides:



Advertisements
Liknande presentationer
Visual Basic - Genomgång
Advertisements

Simulering av MIPS32 4K med TLB och CACHE Andrei Krougliak Simon Olsson Luleå tekniska universitet 2005.
EDA Digital och Datorteknik
Fastighetsboxar. 2 Är du för eller emot att man slutar dela ut posten vid varje dörr från år 2011 och istället delar ut posten i fastighetsboxar som fastighetsägaren.
Datorarkitekturer och operativsystem
EDA Digital och Datorteknik
EDA Digital och Datorteknik
Programmeringsteknik I: F1 1 Föreläsning 1: Intro till kursen och programmering Kursens hemsida Studentportalen.
William Sandqvist Datorteknik övning 2 Subrutinanrop William Sandqvist
PC-teknik Repetition enligt önskemål som inkommit via mail. (täcker alltså inte alla moment i kursen)
IS1500 Datorteknik och komponenter
IS1200 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer
23 August 2014 IS1200 Datorteknik vt09, föreläsning 10, (E och I mfl)1 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory.
1 2G1518 Datorteknik Föreläsning 5, våren 2007 Bussar In- och utmatning – I/O Pollning Handskakning.
Denna föreläsning zVad kursen handlar om zKursupplägg, litteratur, bra att veta zPrestanda - ämnet för dagen.
En vanlig femstegspipeline FDEMW FDEMW FDEMW FDEMW tid.
IS1500 Datorteknik och komponenter
9 September 2014IS1200 Datorteknik, förel 101 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory Access 3. Byte-code i JAVA.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 13: I/O-system.
Pekare och speciell programstruktur i inbyggda system
Styrteknik: Programmering med MELSEC IL PLC2A:1
William Sandqvist C:s minnesmodell.
1 Joomla © 2009 Stefan Andersson 1. 2 MÅL 2 3 Begrepp Aktör: en användare som interagerar med webbplatsen. I diagrammet till höger finns två aktörer:
Abelli, B. (2004). Programmeringens Grunder – med exempel i C#. Lund: Studentlitteratur 1 De bifogade OH-bilderna är bara utkast till vad som kan vara.
Digital och Datorteknik – EDA / Mikroprogrammering EDA Digital och Datorteknik 2009/2010 Mikroprogrammering Arbetsboken, avsnitt 28.
2G1510 Datorteknik fk Föreläsning 1, hösten 2003.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Styrteknik: MELSEC FX och numeriska värden PLC2C:1
William Sandqvist PIC PIC (Peripheral Interface Computer) är en datorkrets med ”allt i ett”. Prog Mem. Programminnet är 2048 instruktioner.
Lågnivåprogrammering Översikt av I/O-mekanismer i hårdvara Olika språkkrav och modeller för komponent- hantering(device driving) Modeller för komponent-hantering.
31 March 2015IS1200 Datorteknik, förel 101 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory Access 3. Byte-code i JAVA.
31 March 2015 IS1500 Datorteknik o k, föreläsning CE - F61 IS1500 Datorteknik och komponenter Föreläsning 6 Bushantering In- och utmatning, I/O Programstyrd.
William Sandqvist Övning 8 Minnessystem Lokalitet Cacheminnen William Sandqvist
31 March 2015 IS1200 Datorteknik ht2009 föreläsning 2, (D2)1 IS1200 Datorteknik Föreläsning 2 Vi bygger en processor Kursboken, valda delar av kapitel.
IS1200 Datorteknik Föreläsning CE F2 Vi bygger en processor Kursboken, delar av kapitel 7 31 March IS1200 Datorteknik föreläsning CE – F2.
1 386 Från s bits adressbuss –=>4GB minne kan adresseras 32 bits databuss max klockfrekvens: 40MHz Protected mode –virtuellt minne –segmentering.
Anders Sjögren Går det att simulera vår värld med 1:or och 0:or ?
Pipelining Föreläsning 4. T exe — CPU-exekveringstid I — Antalet exekverade instruktioner CPI — Genomsnittligt antal klockcykler per instruktion T c —
Minnesarkitektur Problem: Snabbare och snabbare processorer men minnena hänger inte med. Lösning: Minneshierarkier.
2 April 2015 IS1200 Datorteknik föreläsning CE - F71 IS1200 Datorteknik och komponenter Föreläsning 7 Exceptions Interrupts - Traps.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
2G1518 Datorteknik Föreläsning 5 Bussar In- och utmatning (Input/Output, I/O) Programstyrd pollning hösten 2005 för D3 och CLMDA m fl.
3 April 2015IS1200 Datorteknik, föreläsning 61 IS1200 Datorteknik Föreläsning 6 Bushantering In- och utmatning, I/O Programstyrd pollning.
3 April 2015 IS1500 Datorteknik o k, föreläsning CE - F41 IS1500 Datorteknik och komponenter Föreläsning CE F4 Programutveckling & Intro till lab 1, nios2time.
Procedurellt potpurri Dagens samtalsämnen –Klipp (Cut) –If-then-else –fail/0 –repeat/0 Att läsa –The Art of Prolog, kapitel 11 –Relevant avsnitt i Learn.
William Sandqvist PWM Sinusoidal Hur tillverkar man en sinusformad spänning? En PWM-signal kan ge en sinusapproximation. Efter filtrering.
22 April 2015IS1200 Datorteknik, föreläsning 11 IS1200 Datorteknik Föreläsning 1 Introduktion.
William Sandqvist Datorteknik övning 1 Introduktion till assemblerprogrammering av Nios II William Sandqvist
1 June 20152G1502, föreläsning 3, vt G1502 Datorteknik allmän kurs Föreläsning 3 Metoder och subrutiner Kursboken, valda delar av kapitel 4 version.
1 June G1518, Förel 10, ht2005 (D3/CLMDA)1 2G1518 Datorteknik, ht 2005 version för D3 och CLMDA Föreläsning Processorkonstruktion 2. DMA, Direct.
1 June G1502, Föreläsning 9, vt2004 för IT1 2G1502 Datorteknik allmän kurs Föreläsning 9 1. Processorkonstruktion 2. DMA, Direct Memory Access 3.
2 June G1518, Föreäsning 7, vt 2007 (D2)1 2G1518 Datorteknik Föreläsning 7 Exceptions ht vt 2006 (period 2-3) för D2.
2 June G1502, Föreläsning 8, vt2004 för E och I1 2G1502 Datorteknik allmän kurs Föreläsning 8 Processorkonstruktion DMA, Direct Memory Access.
6/3/2015© Mats Brorsson1 Hur mycket snabbare blir det med PC133 SDRAM jämfört med PC100 SDRAM?... blir det med en 1,4 GHz Athlon- processor jämfört.
Föreläsning 1 Introduktion till kursen. Algoritmer
10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)1 2G1518 Datorteknik Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4 vt 2007.
William Sandqvist Övning 10 Processorkonstruktion med pipe-line.
1 2G1502 Datorteknik allmän kurs Föreläsning 3 Programmering med hopp Programmering av Nios.
14 July 2015 IS1200/2G1518 Datorteknik, föreläsning 2, ht2007 (D2)1 IS1200 Datorteknik Föreläsning 2 Vi bygger en processor Kursboken, valda delar av kapitel.
16 July 2015 IS1500 Datorteknik och komponeneter, föreläsning DC-F2 1 IS1500 Datorteknik och komponenter Föreläsning DC F2 Kretsar med återkoppling Minnen.
30 July 2015 IS1200 Datorteknik föreläsning CE - F11 IS1200 Datorteknik Föreläsning CE F1 Computer Engineering Introduktion.
31 July 2015IS1200 Datorteknik, förel 101 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory Access 3. Byte-code i JAVA.
4 August 2015 IS1200 Datorteknik föreläsning CE - F91 IS1200 Datorteknik Övning 10.
11 August 2015IS1200 Datorteknik, föreläsning 41 IS1200 Datorteknik Föreläsning 4 Programutveckling, Intro till lab 1 Kursboken, kapitel 1, 4, 5 och 8.
William Sandqvist Övning 10 Processorkonstruktion med pipe-line.
15 August 2015 IS1200 Datorteknik föreläsning CE - F11 IS1200 Datorteknik Föreläsning CE F1 Computer Engineering Introduktion.
3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)1 IS1200 Datorteknik Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4.
Grundläggande datavetenskap, 4p
Presentationens avskrift:

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F31 IS1200 Datorteknik Föreläsning CE F3 Metoder / subrutiner Kursboken, delar av kapitel 4

IS1200 Datorteknik Assemblerprogram C In- och utmatning Avbrott och "trap" Cacheminnen Trådar, synkronisering CE F1 CE F3 CE F4 CE F5 CE F6 CE F7 CE F8 CE F9 CE F2 CE Ö4 CE Ö1 CE Ö2 CE Ö3 CE Ö7 CE Ö8 CE Ö9 CE Ö5CE Ö6 lab nios2time hemlab C lab nios2io lab nios2int hemlab cache hemlab trådar CE F10CE Ö10 tentamen 2 April IS1200 Datorteknik o k, föreläsning CE - F3

”Öppet hus” välkommen Öppet hus i labbsalen: torsdag 19 januari kl har vi öppet hus i sal 648. Ingen bokning behövs för det här tillfället. - Du kan få hjälp att provköra labprogramvara på de stationära datorer som finns i salen - Vi svarar på frågor om labbarna och kursen. - Du kan få hjälp att installera labprogramvara - Du kan testa att din bärbara dator fungerar med vår hårdvara. 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F33

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F34 Föreläsning 3 Innehåll  4- (och 5-) stegs PIPE-LINE, repetition  Nios-II, Instruktioner och -format  MACRO, pseudo-instruction,exempel  Load och Store med indexerad adress  Stack med SP samt PUSH och POP  Subrutiner, anrop, retur, parametrar  Activation Record, aktiveringsblock

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F35 Litteraturhänvisningar &Kursboken, valda delar av kapitel 4 & principer, ej MIPS-kod &4.5 Subrutiner och Stack

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F36 4 Viktiga delar i en dator CPU MEM BUS I/O program data

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F37 Programexekvering i två steg (decode) EXECUTE FETCH (update PC)

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F38 Programexekvering i fyra steg EXecute/ MEMory Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU ADD Register File 32 x 32 Register File 32 x 32 PC NVZC Logik för villkorligt hopp op-code Cond true/false PC+4 PC+Imm RWM

Villkorliga hopp Kvar att fundera över zNär beräknas hoppadress zNär ”beräknas” villkor zVar finns all kontroll-logik och avkodning av instruktioner Detta diskuteras i boken och tas eventuellt upp senare i kursen 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F39

September 15, 2010 IS1500 Datorteknik o k, föreläsning CE - F210 CPU med 5 stegs PIPE-LINE Register File 32 x 32 Program Memory n x 16 ALU PC ADD IR0 IR1 IR2 IR3 +2 Register File 32 x 32 RWM PC+n PC+Imm ALU/EXE FO MEM FI WB NYTT 2 April IS1200 Datorteknik o k, föreläsning CE - F3

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F311 Instruktioner i ”vår” 4-stegs CPU èADDR dst, R srcA, R srcB # SUB/AND/OR/XOR èADDIR dst, R srcA, Imm # SUBI/ANDI/ORI/XORI èJMP / BR# ovillkorliga hopp èLDWR dst, (R src )# LOAD èSTWR src, (R dst ) # STORE èCMPRsrcA, RsrcB èCMPIRsrcA, Imm èBCond# villkorliga hopp èR0 = 0 ger ytterligare funktioner, NOP, CLR, COPY/MOVE

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F312 Innehåll i register r0 om det alltid är 0  Det medför att  ADD r0, r0, r0 utför NOP, No OPeration  ADD rA, r0, r0 utför CLR rA, CLeaR reg  ADD rA, rB, r0 utför COPY rA  rB, MOV  ADDI rA, rB, 0 utför ”MOV rA, rB”  ADDI rA, r0, Imm utför ”MOVI rA, Imm” ...

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F313 Instruktioner Nios-II-Instruktioner èMOVR dst, R src èMOVIR dst, Imm 16 # ADDI/SUBI èADDR dst, R srcA, R srcB # SUB/AND/OR/XOR èADDIR dst, R srcA, Imm # SUBI/ANDI/ORI/XORI èBR / JMP / BCond èLDWR dst, offset(R src )# indexerad adress èSTWR src, offset(R dst) # indexerad adress èCMPCondRdst, RsrcA, RsrcB # CMPICond/Set on Cond èForts.

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F314 CMP: ”Set on Condition” Nios-II-instructions  CMPEQ Rdst, rA, rB if rA==rB then Rdst := 1 else Rdst := 0  CMPcond Rdst, rA, rB if ”true” then Rdst := 1 else Rdst := 0 cond = EQ, NE, GT, GE,... 1 = ”True”, 0 = ”False”

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F315 Branch on Condition Nios-II-instructions  BEQ rA, rB, Label if rA==rB then PC:=PC+Imm 16 else PC:=PC+4  Bcond rA, rB, Label if ”true” then PC:=PC+Imm 16 else PC:=PC+4 cond = EQ, NE, GT, GE,... Label = PC BEQ Imm 16 Imm 16 = Label - PC BEQ - 4

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F316 Macro-instruction Pseudo-instruktion TYPEXEMPEL – MALL.macroNOP ADDr0, r0, r0.endm Effekt: man kan använda en ny (pseudo-) instruktion NOP – No Operation – som inte gör något mer än att förbruka tid (case sensitive !!!)

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F317 Macro-instruction Pseudo-instruktion TYPEXEMPEL – MALL.macroCLR reg MOVI\reg, 0x0.endm Effekt: man kan använda en ny (pseudo-) instruktion CLR ri för att nollställa register ri MOVI implementeras med ADDI !!! (case sensitive !!!)

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F318 NEG reg Skriv makro för NEG-instruktion.macroNEG reg SUB\reg, r0, \reg.endm Effekt: man kan använda en ny (pseudo-) instruktion NEG rA, för att ta fram 2-komplementet av innehållet i ett register, rA (case sensitive !!!)

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F319 SWAPR regA, regB (utmaning) Skriv makro för swap-instruktion med 2 register.macroSWAPR reg1, reg2 XOR\reg1, \reg1, \reg2...#här saknas en del...#icketrivial kod.endm Effekt: man kan använda en ny (pseudo-) instruktion SWAPR rA, rB för att byta plats på innehåll i rA och rB (begräsningar ?)

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F320 Något om Nios-II Instruktionsformat Nios-II-processorn Varje instruktion i Nios-II upptar 32 bitar ! Det finns endast 3 olika instruktionsformat  R-format  I-format  J-format

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F321 add rC, rA, rB#rC  rA + rB INSTRUKTIONSFORMAT Nios-II: R-type ABOPXOPC Andra exempel: sub, and, or, xor,...

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F322 addi rB, rA, IMM16#rB  rA + sext(IMM16) INSTRUKTIONSFORMAT Nios-II: I-type ABIMM16OP Andra exempel: subi, andi, ori, orhi, xori,...

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F323 call label#PC  (PC :IMM26x4) INSTRUKTIONSFORMAT Nios-II: J-type 26 6 OPIMM26 Enda exempel: call !!! (och snart JMPI)

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F324 ori rB, rA, IMM16 #rB  rA | (0x0000:IMM16) ori rB, rA, IMM16 Instruktion i Nios-2, I-type ABIMM16OP Komplettera IMM16 med nollor i de 16 mest signifikanta bitarna. Gör or-operation med innehåll i rA Skriv resultat till rB

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F325 orhi rB, rA, IMM16 #rB  rA | (IMM16:0x0000) orhi rB, rA, IMM16 Instruktion i Nios-2, I-type ABIMM16OP Komplettera IMM16 med nollor i de 16 minst signifikanta bitarna. Gör or-operation med innehåll i rA Skriv resultat till rB

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F326 Ladda ett register med ett konstant värde, Nios-II  16-bitars värde MOVI rB, IMMED movi r6, -30#sign extension to 32 bits ”movi is implemented as addi rB, r0, IMMED”  32-bitars värde MOVIA rB, Value#Value is any 32 bits might be implemented as (but it is not!?) orhirB, r0, %hi(Value)#fyller ut med nollor orirB, rB, %lo(Value) #fyller ut med nollor

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F327 Imm1 16 Hjälp från översättaren %hi (value) %lo (value) Imm2 16 = value 32 orhirB, r0, %hi(Value)#fyller ut med nollor orirB, rB, %lo(Value) #fyller ut med nollor orhirB, r0, Imm1#fyller ut med nollor orirB, rB, Imm2 #fyller ut med nollor

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F328 MOVIA Rdest, Addr Nios-II macro Skriv makro för ladda register med 32 bitars värde.macroMOVI32 reg, value ORHI\reg, r0, %hi(\value) ORI\reg, \reg, %lo(\value).endm OBS att inga registerinnehåll “förstörs” MOVIA är implementerad på annat sätt!

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F329 LOAD och STORE i fyra stegs pipeline EXecute/ MEMory Fetch Operand Write Back Fetch Instruction Program Memory m x 8 ALU ADD Register File 32 x 32 Register File 32 x 32 PC NVZC Logik för villkorligt hopp op-code CCR true/false PC+k/ PC+Imm RWM

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F330 LOAD och STORE i 4 stegs pipeline Vi kan utföra instruktionerna LDWR dst, (R addr ) STW R src, (R addr )

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F331 Behov av indexerad adress zProgramvariabler ligger samlade zEtt register pekar ut variabelarean zVarje LOAD/STORE behöver först en adressberäkning med ADD zIndexerad adress LOAD R2 ← 8(R28); R2 ← hm(r28 + 8) zSparar en klockcykel vid varje LOAD/STORE

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F332 Programvariabler placeras samlade i minnet zVariabler int i; int j; int k; zläggs efter varann i minnet av kompilatorn minne i j k

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F333 Ett register pekar ut variabelarean zVid programstart tilldelas registret adressen till variabelarean i minnet zGlobal pointer är r26 i Nios-II minne i j k register r26

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F334 Varje LOAD/STORE behöver adressberäkning med ADD zk ska hämtas till R2 zR17 är ledigt  ADDI R17 <- R  LOAD R2 <- (R17) zEn extra instruktion zEn extra klockcykel zExtra krångel i programkoden minne i j k register r26

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F335 Indexerad adress zAddition i LOAD- instruktionen zLOAD R2 ← 8(R26) zinnebär R2 ← hm(r26+8) zInnehåll i R26, plus talet 8, blir minnesadress minne i j k register r26

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F336 LOAD och STORE I Nios-II finns instruktionerna LDWR dst, Offset (R addr ) STW R src, Offset( R addr ) (De kan utföras i en 5 stegs pipeline)

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F337 Typisk hopp-instruktion JUMP (R addr ) zKopiera registerinnehåll till PC zRegister med 32 bitar betyder att 32 bits adress kan användas zHur får man 32 bits adress till registret ? zMOVIA R addr, Imm 32 eller motsvarande

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F338 Nios-II hopp-instruktion JMP rA zKopiera innehållet i angivet register till PC

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F339 Om man vill kan man införa eget makro: JUMPA addr # Ladda ett 32 bitars värde till PC # Hopp med absolutadressering.macroJUMPA addr MOVIAr1, \addr JMPr1.endm OBS att innehåll i reg r1 “förstörs” r1 kallas även “at” – assembler temporary

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F340 Metoder, funktioner, subrutiner  Hur sker anrop ?  Med “hopp”-instruktion !  Hur sker återhopp ?  Med “hopp”-instruktion !  Returadress måste lagras ! Var ?  I register eller minne !

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F341 Subrutinanrop CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … RETURN

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F342 Subrutinanrop i flera nvåer (nested procedures) CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … CALL FKN RETURN FKN:MUL … CALL NEW RETURN

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F343 Subrutinanrop, rekursion CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … CALL RUT RETURN

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F344 metoder, funktioner, subrutiner, Hur sker parameteröverföring Var lagras parametrar (register/minne) zfrån anropare till rutinen, inparametrar zfrån rutinen till anroparen, returvärden Olika typ av parameter zvärde zpekare

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F345 Nios-II hopp-instruktion CALLR rA Liknar JMP rA med tillägg att  Returadress sparas i register r31 Returadressen är adressen till instruktionen närmast efter CALLR dvs adress till CALLR ökat med 4 !

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F346 Om man vill kan man införa eget makro: CALLA addr # Subrutinanrop med absolutadressering.macroCALLA addr MOVIAr1, \addr CALLRr1.endm # OBS att innehåll i reg r1 “förstörs”

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F347 Nios-II hopp-instruktion CALL Label Liknar CALLA med begränsning att Label måste ligga inom det 256MB område som anges av de 4 mest signifikanta bitarna i PC

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F348 Stackhantering  Stack är speciell reserverad plats i minnet  stack-pekare pekar på plats i stacken  PUSH-operation, lägg på stack  POP-operation, hämta från stack

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F349 STACK operationer PUSH och POP Stack Pointer SP PUSH op: SP  sp - n mem(sp)  op POPdst: dst  mem(sp) SP  sp + n n = antal bytes + -

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F350 Nios-II: PUSH reg #Pusha ett register på stacken.macroPUSH reg SUBIsp, sp, 4#sp = r27 STW\reg, 0(sp).endm #PUSH sp är inte bra

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F351 Nios-II: POP reg #Poppa ett register från stacken.macroPOP reg LDW\reg,0(SP) ADDIsp, sp, 4#sp = r27.endm # POP sp är förödande

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F352 Nios-II: Stack Reservera plats, initiera SP Stack Pointer SP.equ size, 256.data.align2 stack:.fill size, 4, 0....text … movia sp, stack+size*4 + - stack: Behöver / SKA inte göras i laborationsprogramvaran !

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F353 Nios-II stöd för stack  Stack Pointer = r27 = sp  Finns det Stack-operationer ? Nej ! Jo!  LDW reg, offset(sp)  STW reg, offset(sp)  Ingen PUSH- eller POP-instruktion  Inga subrutinanrop och returhopp med returadress på stack

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F354 Nios-II stöd för subrutiner  Anrop med CALLR reg, returadress i register r31 = ra  Retur med RET som medför att r31 kopieras till PC  JMP r31 är “illegal” (ger fel vid översättning eller vid exekvering)

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F355 Allmänt: Var placeras Returadress vid subrutinanrop zI ett speciellt register (fördel/nackdel) zI minnet på en stack med ”PUSH” (fördel/nackdel)

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F356 Parameterplats till och från subrutin zI register (fördel/nackdel) zI minnet på en stack (fördel/nackdel)

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F357 Exempel på parameteröverföring Nios-II: i r4-r7 och r2-r3  Anroparen lagrar in-parametrar i r4-r7  Anroparen gör CALL eller CALLR varvid returadress sparas i r31  In-Parametrar finns i r4-r7  Det finns 8 ”lediga” register, r8-r15  Returvärde ska placeras i r2-r3  Returadress finns i r31, retur ska göras med RET

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F358 Anrop av subrutin från subrutin ”nested subroutine call”  Viktiga registerinnehåll måste skyddas  Stacken används för att skydda register.  Speciellt returadress i r31/ra måste skyddas  Anroparen, caller, har ansvar för register r8-r15 caller saved. De får förstöras av den anropade.  Den anropade, callee, har ansvar att inte förändra innehåll i r16-r23, callee saved  Parametrar i r4-r7 och r2-r3 måste hanteras rätt

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F359 Activation Record vid Funktionsanrop Stacken används av många kompilatorer vid funktionsanrop för att i ett aktiveringsblock lagra informationen zInparametrar zÅterhoppsadress zLokala variabler z...

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F360 old top push param-n... push param-2 push param param-1 param-2 … param-n Stack Pointer SP Activation Record lagring av inparametrar

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F361 old top push param-n... push param-2 push param-1 callmethod + - param-1 param-2 … param-n Stack Pointer SP Activation Record funktionsanrop, returadress

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F362 old top method: push ra + - param-1 param-2 … param-n Stack Pointer SP Activation Record Spara return address retaddr

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F363 old top method: push ra move fp, sp + - param-1 param-2 … param-n Stack Pointer SP Activation Record Skapa en Frame Pointer retaddr Frame Pointer FP Frame pointer är r28 i Nios-II

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F364 Frame Pointer FP + - locvar-2 locvar-1 retaddr param-1 param-2 … param-n Stack Pointer SP Activation Record Reservera plats för Local variables old top method: push ra move fp, sp subisp, sp, n*4

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F365 Operandutpekning i metoden Adress relativt frame pointer Frame Pointer FP param-1 = 1n(fp) param-2 = 2n(fp) param-k = kn(fp)... locvar-1 = -1n(fp) locvar-2 = -2n(fp) + - locvar-2 locvar-1 retaddr param-1 param-2 … param-n Stack Pointer SP

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F366 Frame Pointer FP + - locvar-2 locvar-1 retaddr param-1 param-2 … param-n Stack Pointer SP Activation Record return operation old top method: push ra move fp, sp subisp, sp, n*4 ”work” movsp, fp popra ret X X

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F367 old top push param-n... push param-2 push param-1 callmethod + - param-1 param-2 … param-n Stack Pointer SP Activation Record after return to caller

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F368 old top push param-n... push param-2 push param-1 callmethod addi sp, sp, 4*n + - param-1 param-2 … param-n Stack Pointer SP Activation Record after return to caller

2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F369 Föreläsning 3 Innehåll  4- och 5-stegs PIPE-LINE, repetition  Nios-II, Instruktioner och -format  MACRO, pseudo-instruction,exempel  Load och Store med indexerad adress  Stack med SP samt PUSH och POP  Subrutiner, anrop, retur, parametrar  Activation Record, aktiveringsblock

Spara returadress-register vid nestade anrop # use r8 to r15, do no use r16- r23 subrutin:pushr31... callannan1# use r8 to r15 callannan2# use r8 to r15... popr31 ret 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F370

Spara arbets-register vid nestade anrop, alt 1 # use r8 to r15, do no use r16- r23 subrutin:pushr31 use r8 to r15... pushr8 to r15 callannan1#use r8 to r15 callannan2#use r8 to r15 popr15 to r8... use r8 to r15 popr31 ret 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F371

Spara register vid nestade anrop, alt 2 # use r8 to r15, do no use r16- r23 subrutin:pushr31 pushr16 to r23 user16 to r23 callannan1#use r8 to r15 callannan2#use r8 to r15 use r16 to r23 popr23 to r16 popr31 ret 2 April 2015 IS1200 Datorteknik o k, föreläsning CE - F372