Datorsystemteknik DVGA03 Föreläsning 5



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

Institutionen för elektro- och informationsteknologi, LTH

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

Stack och subrutiner Programmeringskonventionen

Lösningar till tentamen i EIT070 Datorteknik

Lösningar till tentamen i EIT070 Datorteknik

Lösningar till tentamen i EIT070 Datorteknik

Datorsystemteknik Föreläsning 7DAVA14

Datorsystemteknik DVGA03 Föreläsning 8

Programmering av inbyggda system. Kodningskonventioner. Viktor Kämpe

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

Polling (cyklisk avfrågning) Avbrott

Tentamen i EIT070 Datorteknik

F5: Högnivåprogrammering

F5: Högnivåprogrammering

Datorsystemteknik DVG A03 Föreläsning 3

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

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

DatorsystemteknikDAVA14 Föreläsning 9

Tentamen i EIT070 Datorteknik

Laboration 2 i Datorteknik- Assemblerprogrammering II

Digital- och datorteknik

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

Datorsystemteknik DAV A14 Föreläsning 1

Institutionen för elektro- och informationsteknologi, LTH

Datorteknik. Föreläsning 5. Realtidssystem och realtidsprogrammering. Institutionen för elektro- och informationsteknologi, LTH.

CE_O3. Nios II. Inför lab nios2time

Mål. Datorteknik. Introduktion. Innehåll. Verklig situation - pappaledighet. Introduktion (forts)

TSEA28 Datorteknik Y (och U)

Dataminne I/O Stack 0x005D 0x3D SP low byte 0x005E 0x3E SP high byte

Programräknaren visar alltid på nästa instruktion som skall utföras. Så fort en instruktion har hämtats så visar programräknaren på nästa instruktion.

Assemblerprogrammering - fördjupning

TSEA28 Datorteknik Y (och U)

Institutionen för elektro- och informationsteknologi, LTH

Digital- och datorteknik

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

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

Digitalteknik och Datorarkitektur

Exempelsamling Assemblerprogrammering

Assemblerprogrammering, ARM-Cortex M4 del 3

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

TSEA28 Datorteknik Y (och U)

Datorsystem Laboration 2: Minnesmappade bussar

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

IS1200 Datorteknik. Övning CE_O4 Maskinnära programmering med C Förberedelser till hemlaboration 1

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

F8: Undantagshantering

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

Mål. Datorteknik. Repetition av avbrott. Innehåll. Mätning och styrning. Datorer för mätning och styrning. timer. Datorsystem A/D. Analog insignal D/A

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

Datorteknik. Föreläsning 4. Polling och avbrott. Institutionen för elektro- och informationsteknologi, LTH. Mål

Assemblerprogrammering del 3

Övning2 Datorteknik, HH vt12 - Programmering

LEU240 Mikrodatorsystem

Assemblerprogrammering för ARM del 2

Datorteknik. Tomas Nordström. Föreläsning 6. För utveckling av verksamhet, produkter och livskvalitet.

F4: Assemblerprogrammering

TENTAMEN. Datorteknik. D1/E1/Mek1/Ö Hjälpmedel: Häfte "ARM-instruktioner", A4-format, 17 sidor. Maxpoäng:

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

Övningsuppgifter i Datorteknik, EIT070

CE_O2. Nios II. Subrutiner med mera.

Övningsuppgifter i Mikrodatorteknik 4p/5p

Föreläsning 10. Pekare (Pointers)

Datorsystemteknik DAVA14 Föreläsning 10

Institutionen för datavetenskap 2014/15

Tentamen. Datorteknik Y, TSEA28

Datorsystemteknik D. Lösningar till tentamen i kursen EDA330 14/1 2000

Kontrollskrivning Mikrodatorteknik CDT S2-704

Operativsystem ID2200 Tentamen TEN1 3.8 hp :00-18:00

Tentamen. Datorteknik Y, TSEA28

Digital- och datorteknik

Digital- och datorteknik

Programexempel för FLEX

Lösningsförslag till tentamen i IS1500 Datorteknik

Datorsystemteknik DAV A14 Föreläsning 1

Datorarkitekturer med operativsystem ERIK LARSSON

Extrauppgifter för CPU12

TDIU01 - Programmering i C++, grundkurs

Lösningsförslag till Tenta i Mikrodator

PC-teknik, 5 p LABORATION ASSEMBLERINTRODUKTION

Fö 5+6 TSEA81. Real-time kernel + Real-time OS

Algoritmer och datastrukturer H I HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 14

Operativsystem ID2206 Tentamen TEN1 4.5 hp :00-18:00

Tentamen PC-teknik 5 p

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Maskinorienterad programmering

Digital- och datorteknik

Lösningsförslag till Tenta i Mikrodator

Digital- och datorteknik

Tentamen i Digitalteknik och Datorarkitektur DV1 5p

Omtentamen i CDT204 - Datorarkitektur

CE_O1. Nios II. Enkla assembler-instruktioner.

TDP002 - Imperativ programmering

Datorsystemteknik för D/E

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Transkript:

Datorsystemteknik DVGA03 Föreläsning 5 Stack och subrutiner Programmeringskonventionen Större delen av materialet framtaget av :Jan Eric Larsson, Mats Brorsson och Mirec Novak IT-inst LTH

Registren i MIPS - återblick REG NAMN $0 zero KOMMENTAR alltid noll $1 at används av assemblern $2-$3 v0-v1 returvärden från funktioner $4-$7 a0-a3 argument till subrutiner $8-$15 t0-t7 temporära register $16-$23 s0-s7 får ej förändras av subrutiner $24-$25 t8-t9 temporära register $26-$27 k0-k1 används av operativsystem/avbrott $28 gp $29 sp $30 s8/fp $31 ra global datapekare stackpekare ibland frame pointer return address: återhoppsadress

Lab 1.data var1: var2:.word 0.word 0 Minnet.set noreorder.text.globl start.ent start start: addi t0,zero,17 addi t1,zero,9 sw t0,var1 sw t1,var2.end start Statiska data var1 Program addi t0,zero,17 Höga adresser Låga adresser

Subrutinanrop - hur går det till? Huvudprogram Subrutin Subrutinen ska hoppa tillbaka till olika ställen beroende på varifrån den anropades. Återhoppsadressen måste alltså sparas! (Reg $31) MIPS-namn jal label jalr $rs jr $31 Kommentar Hoppa till label. Kom ihåg återhoppsadressen i register $31. Hoppa till adressen som finns i register $rs. Kom ihåg återhoppsadressen i register $31. Hoppa tillbaka från subrutin

Vid subrutinanrop: Programmet som anropar lägger parametrarna i register a0-a3 Hoppa till subrutinen med jal-instruktionen Subrutinen utför sin uppgift Subrutinen lägger eventuellt returvärde i register v0 (och ev. v1) Subrutinen hoppar tillbaka med jr ra

Subrutinanrop: sqr.data var:.word 0.set noreorder.text.globl start.ent start start: addi a0,zero,17 # a0=17 jal sqr # v0=17*17 nop sw v0,var.end start.globl sqr.ent sqr sqr: add t0,a0,zero mult t0,t0 mflo v0 nop nop jr ra nop.end sqr

Kan subrutiner se ut hur som helst? Vi kan ha mera komplexa situationer Subrutiner som anropar andra subrutiner kan ställa till problem. VARFÖR?? Vi tittar på ett exempel:

Subrutinen silly.globl silly.ent silly silly: addiu t0,zero,0 #Nollställ.. jal sillier #Sparar #återhoppsadress i ra! nop sw v0,16(t0) jr ra.end silly.globl sillier.ent sillier sillier: addi t1,t1,7 jr ra.end sillier OM EN RUTIN ANROPAR silly BLIR DET FEL - VARFÖR??? VAD BLIR ÅTERHOPPSADRESSEN NÄR VI HOPPAR TILLBAKA FRÅN silly?

Subrutinen silly - analys Subrutinen silly anropar en annan subrutin Genom jal-instruktionen i silly skrivs ra över Det är omöjligt att komma tillbaka till den rutin som anropade silly Register ra måste sparas undan någonstans. Men var?

Komplexa situationer som kan förekomma vid subrutinanrop Subrutiner som anropar andra subrutiner Subrutiner med fler än fyra parametrar Subrutinen kan använda register a0-a3, v0-v1, t0-t9 (enligt konventionen) men vad händer om fler register behövs? Subrutinen behöver kanske använda sig av lokala variabler eller datastrukturer

Minnesorganisation Höga adresser sp Stack Stack. Växer nedåt Ledigt minne Dyn. data Heap. Växer uppåt Statiska data Variabler etc..data Låga adresser Program Programkod.text

Stacken En subrutin lägger upp data på stacken. När subrutinen är klar tas data bort från stacken igen. För att krångla till det: Stacken i vår dator växer nedåt (varför?) Pil nederst i stacken (håller reda på stackens topp) är ett register: stackpekaren (sp).

Subrutiner och stacken Vilka element kan en subrutin vilja spara undan? - ra: registret med återhoppsadressen (om rutinen anropar något annat) - s0-s8: subrutinregistren ska sparas om de används - lokala variabler och datastrukturer - plats för argument till anropad subrutin (minst 4)

Aktiveringsblock Register som ska sparas läggs på stacken Utrymme för lokala variabler och plats för argument allokeras på stacken Totala allokerade mängden data ska vara jämnt delbart med 8 (konvention) Det allokerade utrymmet kallas AKTIVERINGSBLOCK

Aktiveringsblocket Sp Plats för argument Sp Ev. sparade argument ra andra reg. Lokala var argument

Exempel: Subrutiner i C int stacktest(int x, int y) { int a,b; int level1(int x) { int a; } a=level1(x); b=level1(y); return a+b; /* Subrutinen stacktest anropar */ level1 som i sin tur anropar level2 a=level2(x+4); return a+4; } int level2(int x) { return x+1; }

Exempel: Subrutiner i assembler BÖRJA MED level2: - Anropar inga subrutiner - Behöver inte spara register om bara t0-t9 används.globl level2.ent level2 level2: addi t0,a0,1 or v0,t0,zero jr ra.end level2 int level1(int x) { int a; a=level2(x+4); return a+4; } int level2(int x) { return x+1; } ENKELT...

Exempel: Subrutiner i assembler FORTSÄTT MED level1: PROLOG - allokera aktiveringsblocket! - level1 har en paremeter och vi kan eventuellt spara undan den. - level1 anropar en subrutin - level2. - Aktiveringsblocket består av fyra delar: (1) återhoppsadress (ra), (2) subrutinvariabler (s0, s1), (3) lokal variabel och (4) argument för subrutin som vi kallar på (level2, fyra argument). - Totalt 8*4=32 bytes. Jämnt delbart med 8 OK..globl level1.ent level1 level1: sw a0,0(sp) # Spara undan parametern subu sp,sp,32 # Plats på stacken sw ra,28(sp) # Återhoppsadressen sw s0,24(sp) # Register s0 sw s1,20(sp) # Register s1 # Lokal variabel på 16(sp) # Plats för argument a0-a3 på 0(sp)

Exempel: Subrutiner i assembler level1: SUBRUTINENS FUNKTION... addi a0,a0,4 # Räkna fram rätt argument jal level2 # Hoppa till subrutinen nop sw v0,16(sp) # Spara resultatet i lokal variabel lw s0,16(sp) # Hämta igen (lite dumt, men...) nop addi s1,s0,4 # Beräkna a+4 or v0,s1,zero # Flytta s1 till v0...

Exempel: Subrutiner i assembler level1: EPILOG (ÅTERSTÄLL REGISTER OCH ÅTERLÄMNA AKTIVERINGSBLOCK)... lw s1,20(sp) lw s0,24(sp) lw ra,28(sp) addiu sp,sp,32 lw a0,0(sp) jr ra.end level1 # Och så är det dags att återställa # Återställ s1 # Återställ s0 # Återställ ra # Återställ stacken # Återställ a0

Hur skriver man en subrutin? - Deklarera subrutinen - Allokera aktiveringsblocket - Spara register på stacken - Gör det som ska göras i rutinen - Återställ registren - Återlämna aktiveringsblock - Hoppa tillbaka