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.

Slides:



Advertisements
Liknande presentationer
IT för personligt arbete F5
Advertisements

Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
EDA Digital och Datorteknik
Programstruktur: C för enchipsdatorer
Funktioner och programorganisation
2D1311 Programmeringsteknik med PBL
EDA Digital och Datorteknik
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)
Algoritmer och datastrukturer
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.
Programmeringsteknik K och Media
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.
Programmering i C# 3. Klasser.
Pekare och speciell programstruktur i inbyggda system
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Styrteknik: Programmering med MELSEC IL PLC2A:1
William Sandqvist C:s minnesmodell.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
William Sandqvist PIC PIC (Peripheral Interface Computer) är en datorkrets med ”allt i ett”. Prog Mem. Programminnet är 2048 instruktioner.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
31 March 2015IS1200 Datorteknik, förel 101 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory Access 3. Byte-code i JAVA.
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
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.
Pipelining Föreläsning 4. T exe — CPU-exekveringstid I — Antalet exekverade instruktioner CPI — Genomsnittligt antal klockcykler per instruktion T c —
Stack och Kö -Implementering -Tilllämpningar -- Kapitel 16, 11.
Minnesarkitektur Problem: Snabbare och snabbare processorer men minnena hänger inte med. Lösning: Minneshierarkier.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
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.
Programmeringsteknik Föreläsning 17 Skolan för Datavetenskap och kommunikation.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
Lennart Edblom & Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 2: Variabler och datatyper Variabler Bindning Typkontroll Några viktiga datatyper.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
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.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: -Exekveringstrådar.
William Sandqvist PWM Sinusoidal Hur tillverkar man en sinusformad spänning? En PWM-signal kan ge en sinusapproximation. Efter filtrering.
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.
2G1502 Datorteknik allmän kurs
2 June G1518, föreläsning 4, ht2006 (D2)1 2G1518 Datorteknik Föreläsning 4 Programutveckling, Intro till lab 1 Kursboken, kapitel 1, 4, 5 och 8 ht.
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.
4 June G1518, Föreläsning 9, vt07 (IT/ME/2IT)1 2G1518 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till hemlab 3) version.
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.
13 June 2015 IS1200/2G1518 Datorteknik, föreläsning 7, vt2008 (Kista)1 IS1200 Datorteknik Föreläsning 7 Exceptions vt 2008 (period 3) för IT/ME och Hing/Kand.
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.
1 IS1200 Datorteknik, övning 4 Maskinnära programmering med C Förberedelser till hemlaboration 1.
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.
1 August 2015 IS1200 Datorteknik föreläsning CE - F91 IS1200 Datorteknik Föreläsning 9 zDel 1. CPU-scheduling zDel 2. Semaforer zInför föreläsning 10 zSammanfatting.
William Sandqvist Datorteknik övning 3 stackhantering subrutin som anropar subrutin programutveckling.
3 August 2015IS1200 Datorteknik föreläsning 71 IS1200 Datorteknik Föreläsning 7 Exceptions Interrupts - Traps.
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.
12 October 2015 IS1200 Datorteknik föreläsning CE - F71 IS1200 Datorteknik och komponenter Föreläsning 7 Exceptions Interrupts - Traps.
13 October 2015 IS1200 Datorteknik ht2009, föreläsning 7, (D2)1 IS1200 Datorteknik Föreläsning 7 Exceptions ht 2009 – vt 2010 (period 2-3) för D-2.
17 October 2015 IS1200 Datorteknik föreläsning CE - F91 IS1200 Datorteknik Föreläsning 9 Del 1. CPU-scheduling Del 2. Semaforer (förberedelse till hemlab.
Grundläggande datavetenskap, 4p
Presentationens avskrift:

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 ht 2009 – vt 2010 (period 2-3) För D-2

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)2 F1F2F3F4F5F7F8F9F10Ö2Ö1Ö3LAB-1Hemlab-1Ö4Ö7LAB-3Hemlab-2Ö8Hemlab-3Ö9TentamenÖ10 Assemblerkod 4 stegs pipeline Nios2time C-kod Nios2io Nios2int Cache-minnen CPU-scheduling IS1200 Datorteknik Hösten 2009 Våren 2010 F6Ö5Ö6LAB-2

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)3 Föreläsning 3 Innehåll  4-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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)4 Litteraturhänvisningar &Kursboken, valda delar av kapitel 4 & principer, ej MIPS-kod &4.5 Subrutiner och Stack

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)5 Viktiga delar i en dator CPU MEM BUS I/O program data

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)6 Programexekvering i två steg (decode) EXECUTE FETCH (update PC)

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)7 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+k/ PC+Imm RWM

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)8 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)9 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” ...

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)10 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)11 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)12 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 !!!)

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)13 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 görs med ADDI !!! (case sensitive !!!)

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)14 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 !!!)

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)15 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 ?)

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)16 Något om Nios-II Nios-II-processorn Varje instruktion i Nios-II upptar 32 bitar ! Det finns endast 3 olika instruktionsformat  R-format  I-format  J-format

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)17 add rC, rA, rB#rC  rA + rB INSTRUKTIONSFORMAT Nios-II: R-type ABOPXOPC Andra exempel: sub, and, or, xor,...

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)18 addi rB, rA, IMM16#rB  rA + sext(IMM16) INSTRUKTIONSFORMAT Nios-II: I-type ABIMM16OP Andra exempel: subi, andi, ori, orhi, xori,...

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)19 call label#PC  (PC :IMM26x4) INSTRUKTIONSFORMAT Nios-II: J-type 26 6 OPIMM26 Enda exempel: call !!! (och snart JMPI)

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)20 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)21 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)22 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)23 Imm1 16 Hjälp från översättaren %hi (value) %lo (value) Imm2 16 = value 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)24 MOVIA Rdest, Addr Nios-II macro Skriv makro för ladda register med 32 bitars värde.macroMOVIA reg, value ORHI\reg, r0, %hi(\value) ORI\reg, \reg, %lo(\value).endm OBS att inga registerinnehåll “förstörs”

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)25 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)26 LOAD och STORE i 4 stegs pipeline Vi kan utföra instruktionerna LDWR dst, (R addr ) STW R src, (R addr )

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)27 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)28 Programvariabler placeras samlade i minnet zVariabler int i; int j; int k; zläggs efter varann i minnet av kompilatorn minne i j k

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)29 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)30 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)31 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)32 LOAD och STORE I Nios-II finns instruktionerna LDWR dst, Offset (R addr ) STW R src, Offset( R addr ) (De kan inte utföras i en 4 stegs pipeline utan behöver en 5 stegs pipeline som presenteras senare i kursen)

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)33 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)34 Nios-II hopp-instruktion JMP rA zKopiera innehållet i angivet register till PC

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)35 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)36 Metoder, funktioner, subrutiner  Hur sker anrop ?  Med “hopp”-instruktion !  Hur sker återhopp ?  Med “hopp”-instruktion !  Returadress måste lagras ! Var ?  I register eller minne !

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)37 Subrutinanrop CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … RETURN

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)38 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)39 Subrutinanrop, rekursion CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … CALL RUT RETURN

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)40 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)41 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 !

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)42 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”

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)43 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)44 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)45 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 + -

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)46 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)47 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)48 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 !

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)49 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)50 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” (och leder till exception)

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)51 Allmänt: Var placeras Returadress vid subrutinanrop zI ett speciellt register (fördel/nackdel) zI valfritt register (fördel/nackdel) zI minnet på speciell plats (fördel/nackdel) zI minnet på valfri plats (fördel/nackdel) zI minnet på en stack med PUSH (fördel/nackdel) zI första ordet i subrutinen (fördel/nackdel)

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)52 Parameterplats till och från subrutin zI register (fördel/nackdel) zI minnet på fast adress (fördel/nackdel) zI minnet på en stack (fördel/nackdel)

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)53 Exempel på parameteröverföring Nios-II: i r2-r3 och r4-r7  Anroparen lagrar parametrar i r4-r7  Anroparen gör CALL eller CALLR varvid returadress sparas i r31  Parametrar finns i r4-r7  Det finns 8 ”lediga” register, r8-r15  Returvärde ska placeras i r2-r3  Returadress i r31, retur ska göras med RET

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)54 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 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 r2-r3 och r4-r7 måste hanteras rätt

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)55 Activation Record vid Funktionsanrop Stacken används vid funktionsanrop för att i ett aktiveringsblock lagra informationen zInparametrar zÅterhoppsadress zLokala variabler z...

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)56 old top push param-n... push param-2 push param param-1 param-2 … param-n Stack Pointer SP Activation Record lagring av inparametrar

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)57 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)58 old top method: push ra + - param-1 param-2 … param-n Stack Pointer SP Activation Record Save return address retaddr

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)59 old top method: push ra move fp, sp + - param-1 param-2 … param-n Stack Pointer SP Activation Record Frame Pointer retaddr Frame Pointer FP

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)60 Frame Pointer FP + - locvar-2 locvar-1 retaddr param-1 param-2 … param-n Stack Pointer SP Activation Record Local variables old top method: push ra move fp, sp subisp, sp, n*4

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)61 Adressering 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)62 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)63 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)64 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

3 October 2015 IS1200 Datorteknik ht2009 föreläsning 3, (D2)65 Föreläsning 3 Innehåll  4-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