10 June 2015 2G1518, 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.

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)
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.
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; }
Vektorer (klassen Vector) Sortering
Styrteknik: Programmering med MELSEC IL PLC2A:1
William Sandqvist C:s minnesmodell.
Modulär programutveckling
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
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.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
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.
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.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
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 2015IS1200, Förel 9, vt08 (Kista)1 IS1200 Datorteknik Föreläsning 9 1. CPU-scheduling 2. Semaforer (förberedelse till hemlab 3) vt 2008 (period.
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 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.
Föreläsning 1 Introduktion till kursen. Algoritmer
12 June G1518, Föreäsningl 8, vt07 (E/I/CL)1 2G1518 Datorteknik Föreläsning 8 Cache Memory vt 2007 (period 3-4) för E, I och CLMDA.
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.
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.
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.
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
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.
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.
Python.
Grundläggande datavetenskap, 4p
Presentationens avskrift:

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 (period 3-4) för E, I och CLMDA

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)2 F1F2F3F4F5F6F7F8F9F10Ö2Ö1Ö3Ö4Ö5LAB-1LAB-2Hemlab-1Ö6Ö7LAB-3Hemlab-2Ö8Hemlab-3Ö9TentamenÖ10 Assemblerkod 4 stegs pipeline Nios2time Nios2io C-kod Nios2int Cache-minnen CPU-scheduling 2G1518 Datorteknik

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)3 Föreläsning 3 Innehåll  4-stegs PIPE-LINE, repetition  MACRO, pseudo-instruction  Några MACRO-exempel  Load och Store med indexerad adress  Stack med SP samt PUSH och POP  Subrutiner, anrop, retur, parametrar,

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)4 Litteraturhänvisningar &Kursboken, valda delar av kapitel 4 & principer, ej MIPS-kod &4.5 Subrutiner och Stack

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)5 Viktiga delar i en dator CPU MEM BUS I/O program data

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)6 Programexekvering i två steg (decode) EXECUTE FETCH (update PC)

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)8 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, (R src ) èSTWR src, (R dst ) èCMPCondRdst, RsrcA, RsrcB # CMPICond

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)9 Branch on Condition Nios-II-instructions  BEQ rA, rB, Label if rA==rB then PC:=PC+Imm else PC:=PC+4  Bcond rA, rB, Label if ”true” then PC:=PC+Imm else PC:=PC+4 cond = EQ, NE, GT, GE,... Label = PC BEQ Imm Imm = Label - PC BEQ - 4

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)10 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 (case sensitive !!!)

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)11 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 !!!)

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)12 SWAPR regA, regB (utmaning) Skriv makro för swap-instruktion med 2 register.macroSWAPR reg1, reg2 ADD\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 ?)

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)13 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)14 add rC, rA, rB#rC  rA + rB INSTRUKTIONSFORMAT Nios-II: R-type ABOPXOPC Andra exempel: sub, and, or, xor,...

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)15 addi rB, rA, IMM16#rB  rA + sext(IMM16) INSTRUKTIONSFORMAT Nios-II: I-type ABIMM16OP Andra exempel: subi, andi, ori, orhi, xori,...

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)16 call label#PC  (PC :IMM26x4) INSTRUKTIONSFORMAT Nios-II: J-type 26 6 OPIMM26 Enda exempel: call !!!

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)17 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)18 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)19 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)20 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)21 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”

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)22 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)23 LOAD och STORE i 4 stegs pipeline Vi kan utföra instruktionerna LDWR dst, (R addr ) STW R src, (R addr )

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)24 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)25 Programvariabler samlade i minnet zVariabler int i; int j; int k; zläggs efter varann i minnet av kompilatorn minne i j k

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)26 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)27 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)28 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)29 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)

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)30 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)31 Nios-II hopp-instruktion JMP rA zKopiera innehållet i angivet register till PC

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)32 Nios-II-Makrot 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)33 Metoder, funktioner, subrutiner  Hur sker anrop ?  Med “hopp”-instruktion !  Hur sker återhopp ?  Med “hopp”-instruktion !  Returadress måste lagras ! Var ?  I register eller minne !

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)34 Subrutinanrop CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … RETURN

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)35 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)36 Subrutinanrop, rekursion CALL RUT RET1:ADD … CALL RUT RET2:SUB... RUT:ADD … CALL RUT RETURN

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)37 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)38 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 !

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)39 Nios-II-Makrot CALLA addr # Subrutinanrop med absolutadressering.macroCALLA addr MOVIAr1, \addr CALLRr1.endm # OBS att innehåll i reg r1 “förstörs”

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)40 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)41 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)42 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 + -

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)43 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)44 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)45 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 inte göras i laborationsprogramvaran !

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)46 Nios-II stöd för stack  Stack Pointer = r27 = sp  Finns det Stack-operationer ?  LDW reg, offset(sp)  STW reg, offset(sp)  Ingen PUSH- eller POP-instruktion  Inga subrutinanrop och returhopp med returadress på stack

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)47 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)

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)48 Allmänt 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)

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)49 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)

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)50 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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)51 Anrop av subrutin från subrutin  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

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)52 Programexempel - subrutin ta fram max av val1 och val2 zExempel på C-liknande kod torde kunna vara... int val1, val2, result; /* variabler */... extern int max (int val1, int val2); /* prototyp */... result = max ( val1, val2); /* anrop */

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)53 Programexempel - subrutin ta fram max av val1 och val2 zint val1=0, val2=0, result=0; kan översättas till (av kompilator).data.align2#adress multipel av 2 2 val1:.word0 val2:.word0 result:.word0...

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)54 anrop av max (val1, val2) inparametrar i register #result = max ( val1, val2) kan översättas till.text moviar4, val1# adress till val1 i r4 ldwr4, 0(r4)# värde val1 till r4 från minnet moviar5, val2# adress till val2 i r5 ldwr5, 0(r5) # värde val2 till r5 från minnet movia r1, max# subrutin-adress till ett register callrr1# anropa subrutin moviar1, result# adress till result i r1 stwr2, 0(r1)# returvärde i r2 kopieras till minnet

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)55 Programexempel - subrutin ta fram max av val1 och val2 int max (int val1, int val2); { int tmp; tmp = val1; if (val2 > val1 ) tmp = val2; return (tmp); } kan översättas till (kompileras till)

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)56 int max (int val1, int val2) inparametrar i register max:movr2, r4# kopiera r4 till returplats bgtr4, r5, foo# hoppa om r4 > r5 movr2, r5# bara om r5 >=r4 foo:ret# PC := r31

10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)57 Föreläsning 3 Innehåll  4-stegs PIPE-LINE, repetition  MACRO, pseudo-instruction  Några MACRO-exempel  Load och Store med indexerad adress  Stack med SP samt PUSH och POP  Subrutiner, anrop, retur, parametrar,