MIPS, registerallokering og MARS
|
|
- Marcus Johannsen
- 8 år siden
- Visninger:
Transkript
1 MIPS, registerallokering og MARS Torben Mogensen 2011 Resumé Vi beskriver modulerne Mips.sml og RegAlloc.sml, samt hvordan de bruges sammen med MIPS-emulatoren MARS. 1 MIPS modulet Modulet Mips.sml indeholder en datastruktur for en delmængde af MIPS instruktionssættet, som beskrevet i Appendix A.10 i [1]. Typen mips beskriver udvalgte instruktioner og assemblerdirektiver: datatype mips = LABEL of string EQU of string*string GLOBL of string TEXT of string DATA of string SPACE of string ASCII of string ASCIIZ of string ALIGN of string COMMENT of string LA of string*string LUI of string*string ADD of string*string*string ADDI of string*string*string SUB of string*string*string AND of string*string*string ANDI of string*string*string OR of string*string*string ORI of string*string*string XOR of string*string*string XORI of string*string*string SLL of string*string*string SRA of string*string*string SLT of string*string*string SLTI of string*string*string BEQ of string*string*string BNE of string*string*string J of string JAL of string * string list (* label + argumentregistre *) JALR of string * string list (* hopregister + argumentregistre *) JR of string * string list (* hopregister + resultatregistre *) 1
2 LW of string*string*string (* lw rd,i(rs) kodes som LW (rd,rs,i) *) SW of string*string*string (* sw rd,i(rs) kodes som SW (rd,rs,i) *) LB of string*string*string (* lb rd,i(rs) kodes som LB (rd,rs,i) *) SB of string*string*string (* sb rd,i(rs) kodes som SB (rd,rs,i) *) NOP SYSCALL Her følger en kort forklaring af instruktionerne LABEL angiver en label. EQU bruges til at definere konstanter. F.eks. bliver EQU ("x",-16") oversat til assemblerlinjen x = -16. Det andet argument er en tegnfølge, da det er muligt også at bruge hexadecimale tal (f.eks. 0xff) og symbolske konstanter (som f.eks. labels eller konstanter defineret med andre EQU er) på højresiden. GLOBL, TEXT, DATA, SPACE, ASCII, ASCIIZ og ALIGN svarer til direktiverne.globl,.text,.data,.space,.ascii,.asciiz og.align. COMMENT er en kommentar. LA er pseudoordren la, som lægger en adresse i et register. Registeret er enten et tal mellem 0 og 31 (angivet som tegnfølge uden $ foran) eller et variabelnavn, der vil blive allokeret i et numerisk register. Man kan ikke bruge de symbolske registernavne dom f.eks. v0 og a0, da alle registernavne, der ikke er tal, bliver registerallokeret. LUI...J er almindelige MIPS instruktioner. Registre angives som beskrevet herover. Talkonstanter er enten decimale tal (med muligt fortegn), hexadecimale tal eller symbolske konstanter. JAL er jal instruktionen. Udover labelen skal JAL af hensyn til registerallokatoren også have en liste args af de variable og registre, der er levende ved destinationen. Det vil typisk være argumentregistre og eventuelt registre, der bruges til globale variable. Hvis jal findes i kode, der ikke registerallokeres, bruges denne liste ikke, og den kan i givet fald lades tom. JR er jr instruktionen. Udover hopregistret skal JR af hensyn til registerallokatoren også have en liste af de registre og variabler, der er levende ved hoppet (typisk returværdiregistre og globale variabler). Hvis jr findes i kode, der ikke registerallokeres, bruges denne liste ikke, og den kan i givet fald lades tom. Bemærk, at JR er uegnet til indirekte funktionskald, brug i stedet JALR, som er beskrevet herunder. JALR er jalr instruktionen, der laver et funktionskald gennem et register. JALR (rs, args) gemmer returadressen i register 31 (link registret) og hopper til adressen i register rs. args parameteren er som beskrevet for JAL. LW, SW, LB og SB er lw, sw, lb og sb instruktionerne. Bemærk, at det konstante offset angives sidst i parameterlisten, så f.eks. lw $2,16($28) angives som LW ("2","28","16"). 2
3 NOP er nop, altså no operation. SYSCALL er systemkaldsinstruktionen syscall. Register $2 bruges til at angive operationen, evt. parametre angives i registrene $4 og $5 og en evt. returværdi vil lægges i $2. Se Appendix A.9 i [1] for mulige operationer. Udover de ovennævnte instruktioner definerer Mips.sml også pseudoinstruktioner, der oversættes til ORI-instruktioner: MOVE (x,y) oversættes til ORI (x,y,"0"). Registerallokatoren kan fjerne en move-instruktion, hvis x og y allokeres til samme register. LI (x,k) oversættes til ORI (x,"0",k). Et assemblerprogram vil blive bygget som en liste af instruktioner, dvs. noget af typen Mips.mips list. Mips definerer også en funktion pp list, der konverterer en liste af MIPS instruktioner til et format, der kan indlæses i MARS og SPIM. 2 Registerallokatoren Modulet RegAlloc.sml indeholder en registerallokator. Registerallokatoren arbejder med kroppen af en enkelt funktion og vil oversætte registernavne til registernumre. Registerallokatoren har typen val registeralloc : Mips.mips list -> string list -> int -> int -> int -> int -> Mips.mips list * string list * int * int registeralloc tager som argumenter en liste af MIPS instruktioner, en liste af registre, der er levende ved udgangen af koden, samt fire tal: Det mindste allokerbare register (i reglen 2), det største caller-saves register, det største allokerbare register (i reglen 25) samt antallet af allerede spillede variable. Det sidstnævnte er i reglen 0. Registre mellem de to første tal (begge inklusive) er caller-saves registre og de efterfølgende registre op til det tredje tal er callee-saves. Hvis man vil følge standardkaldkonventionen for MIPS skal tallene være 2, 15 og 25. Hvis man selv reserverer et register til f.eks. hopegepind, kan man bruge register 25 og dermed sætte grænsen for allokerbare registre til 24. registeralloc returnerer en modificeret liste af instruktioner, hvor navngivne registre er blevet erstattet med numeriske registre. For læselighedens skyld er hver modificeret instruktion efterfulgt af en kommentar, der viser den oprindelige instruktion. Udover at omdøbe registre, udkommenterer registerallokatoren MOVE instruktioner, hvor kilde- og destinationsregistrene er ens efter allokering. Udover den modificerede instruktionsliste returneres også en liste af variabler, der er levende ved indgangen til koden. Denne kan bruges til at finde fejl i koden, men vil for det meste blive ignoreret. Derefter returneres det største registernummer, der blev brugt til at allokere variabler i. Det kan bruges til i funktionsprologen at gemme præcis de callee-saves registre, der bliver brugt i funktionskroppen. 3
4 Til sidst returneres antallet af spillede variable. Dette tal skal bruges til at gøre plads på stakken til spillede variable. Registerallokatoren antager, at spillede variable ligger på stakken på offset 0, 4, osv. fra stakpegepinden (register 29). Hvis antallet af spillede variable f.eks. er 2, skal der gøres plads på stakken, så offset 0 og 4 kan bruges til disse. Hvis der er spillede variable, må funktionskroppen ikke flytte på stakpegepinden undtagen helt lokalt ved funktionskald, da offsets til spillede variable dermed ikke kommer til at passe længere. Spill vil sjældent forekomme, hvis registerallokatoren kan bruge 15 eller flere registre. 3 Brug af registerallokatoren ved oversættelse af funktioner Vi bruger en forenklet udgave af MIPS kaldkonventionen: Registrene $2... $15 er caller-saves og $16... $25 er callee-saves. Parametre overføres i registrene $2... $15 (efter behov) og resultatet findes efter kaldet i $2. Vi antager, at der aldrig er mere end 14 parametre, så alle parametre kan overføres i registre. Register $29 er stakpegepind. Stakken vokser nedad og stakpegepinden peger på det øverste stakelement (det med den laveste adresse). Vi bruger ikke nogen frame pointer. 3.1 Funktionskald Registerallokatoren implementerer caller-saves ved ikke at allokere variabler i callersaves-saves registre, hvis de er levend hen over et funktionskald. Så hvis vi har et kald t = f(x,y,z), kan vi oversætte det til instruktionerne [Mips.MOVE ("2","x"), Mips.MOVE ("3","y"), Mips.MOVE ("4","z"), Mips.JAL ("f",["2","3","4"]), Mips.MOVE ("t","2")] Bemærk, at listen af de registre, der bruges som parametre i kaldet, angives som et ekstra argument til JAL instruktionen. Et kald til en funktion, hvor adressen ligger i et register, oversættes med instruktionen JALR i stedet for JAL. Hvis man skal kunne håndtere flere end 14 parametre, skal de overskydende parametre lægges på stakken. 3.2 Prolog og epilog Vi antager, at vi har en definition f(x,y,z) = e og at vi har oversat kroppen e til en liste af MIPS-instruktioner i ML-variablen body, sådan at koden lægger sit resultat i variablen result. Vi skal nu tilføje kode til at overføre parametre og resultat fra funktionen: 4
5 val body2 = [Mips.MOVE ("x","2"), Mips.MOVE ("y","3"), Mips.MOVE [Mips.MOVE ("2","result")] Vi kalder nu registerallokatoren: val (body3,_,maxreg, spilled) = RegAlloc.registerAlloc body2 ["2"] Bemærk, at vi angiver, at $2 skal være levende ved udgangen af koden, da den jo indeholder returværdien. body3 indholder nu den allokerede krop. Bemærk, at det er sandsynligt, at de fleste af de MOVE-instruktioner, vi tilføjede herover, (og mange andre) er elimineret af registerallokatoren. maxreg indeholder det største allokerede register. Hvis det er over 15, er der brugt callee-saves registre, der så skal gemmes i aktiveringsposten og hentes bagefter. Vi vil i samme omgang gemme returadressen i den første plads i aktiveringsposten. Lad os antage, at maxreg er 17, så vi skal gemme register $31 (returadressen), register $16 og register $17 i aktiveringsposten. Vi antager endvidere, at der ikke forekommer spill, så spilled = 0: val prologue = [Mips.LABEL "f", Mips.ADDI ("29","29","-12"), Mips.SW ("31","29","0"), Mips.SW ("16","29","4"), Mips.SW ("17","29","8")] val epilogue = [Mips.LW ("31","29","0"), Mips.LW ("16","29","4"), Mips.LW ("17","29","8"), Mips.JR ("31",[]), Mips.ADDI ("29","29","12")] val body4 = epilogue Bemærk, at $29 er stakpegepinden, og at den modificeres med størrelsen af aktiveringsposten. Hvis spilled er forskellig fra 0 skal stakpegepinden yderligere flyttes med 4*spilled og offsets til gemte variabler tilsvarende modificeres. Her er et eksempel, hvor spilled=2: val prologue = [Mips.LABEL "f", Mips.ADDI ("29","29","-20"), Mips.SW ("31","29","8"), Mips.SW ("16","29","12"), Mips.SW ("17","29","16")] val epilogue = [Mips.LW ("31","29","8"), Mips.LW ("16","29","12"), 5
6 Mips.LW ("17","29","14"), Mips.ADDI ("29","29","20"), Mips.JR ("31",[])] val body4 = epilogue $31 er link-registret, som indeholder returadressen. Da JR bruges i kode, der ikke registerallokeres, er listen af resultatregistre ligegyldig og derfor tom. Eksemplet herover er specifik for en bestemt funktion. En oversætter skal håndtere forskellige funktioner, og vil derfor definere kode til at konstruere prolog og epilog ud fra funktionsnavnet og værdien af maxreg. Figur 1 viser et eksempel på hvordan en sådan kode kunne se ud. Hvis man skal håndtere flere parametre, end der kan overføres i registre, skal movepars udvides, så den henter de overskydende parametre fra stakken. 4 MARS MARS er en simulator for en delmængde af MIPS. MARS er kompatibel med SPIM simulatoren, som tidligere er brugt på kurset og som er beskrevet i Appendix A.9 i [1]. MARS er et javaprogram, der kan hentes på En vejledning til at køre MARS kan findes på SPIM kan køres fra kommandolinjen ved at skrive java -jar Mars.jar program.asm hvorefter indata og uddata læses og skrives på standard input og output. Man kan også køre MARS interaktivt, se dokumentationen. Det kan være en god ide at lægge Mars.jar i et særskilt filkatalog og lave et alias: alias mars java -jar stinavn/mars.jar Så man man skrive mars program.asm i stedet for java -jar Mars.jar program.asm. Der er nogle ting, man skal være opmærksom på i MARS: Registrene $1, $26 og $27 er reserveret til hhv. ekspansion af pseudoordrer (f.eks. la) og til operativsystemet. Stakpegepinden ($29) er initialiseret ved start af kørsel, og man bør ikke reinitialisere den. Stakken vokser nedad i lageret (til lavere adresser) og stakpegepinden peger på topelementet. Når der skal lægges en ny værdi på stakken bør det gøres med følgende sekvens: Træk størrelsen af værdien fra stakpegepinden, gem værdien på den adresse, stakpegepinden nu peger på. Plads til globale variabler, tabeller, hob og lignende er i datasegmentet, og bør vokse opad i lageret fra datasegmentets start. 6
7 val SP = "29" val RA = "31" fun translatefunction(name,parameters,bodyexp,ftable) = let val body = TransExp(bodyExp,emptyTable,ftable,"2") val body2 = movepars parameters body val (body3,_,maxreg,spilled) = RegAlloc.registerAlloc body2 ["2"] val (savecode,restorecode,framesize) = saverestore maxreg (4*spilled+4) val prologue = [Mips.LABEL name, Mips.ADDI (SP,SP,Int.toString (~framesize)), Mips.SW (RA,SP,int.toString savecode val epilogue = [Mips.LW (RA,SP,int.toString (4*spilled)), Mips.ADDI (SP,SP,Int.toString framesize), Mips.JR (RA,[])] in epilogue end and movepars [] _ = [] movepars (par::pars) reg = Mips.MOVE (par,int.tostring reg) :: movepars pars (reg+1) and saverestore reg size = if reg<16 then ([],[],size) else let val args = (Int.toString reg, SP, int.tostring size) val (save,restore,size1) = saverestore (reg-1) (size+4) in (Mips.SW args :: save, Mips.LW args :: restore, size1) end Litteratur Figur 1: Oversættelse af funktion [1] David A. Patterson and John L. Hennessy. Computer Organization & Design, the Hardware/Software Interface. Morgan Kaufmann,
MIPS modulet og registerallokatoren
MIPS modulet og registerallokatoren Værktøjer til oversætterdelen af K1 Dat1E 2001 MIPS modulet Den vigtigste del af modulet MipsData.sml er datatypen mips, som beskriver MIPS ordrer, se figur 1. Alle
Læs mereOversættere Skriftlig eksamen onsdag d. 25. januar 2006
Københavns Universitet Naturvidenskabelig Embedseksamen Oversættere Skriftlig eksamen onsdag d. 25. januar 2006 Eksamenstiden er to timer. Opgavernes vægt i procent er angivet ved hver opgave. Den skriftlige
Læs mereDATALOGI MASKINARKITEKTUR Blok 2 samt Reeksamination i DATALOGI MASKINARKITEKTUR Blok 1 og arkitekturdelen af DATALOGI 1E
Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI MASKINARKITEKTUR Blok 2 samt Reeksamination i DATALOGI MASKINARKITEKTUR Blok 1 og arkitekturdelen af DATALOGI 1E Vejledende løsninger til
Læs mereDATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004
Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Skriftlig eksamen torsdag den 3. juni 2004 Opgaverne vægtes i forhold til tidsangivelsen herunder, og hver opgaves besvarelse bedømmes
Læs mereSproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter 2006. Abstract
Sproget Six Til brug i rapportopgaven på kurset Oversættere Vinter 2006 Abstract Six er baseret på det sprog, der vises i figur 6.2 og 6.4 i Basics of Compiler Design. Den herværende tekst beskriver basissproget
Læs mereOversættere. Vejledende løsninger til Skriftlig eksamen onsdag d. 18. april 2007
Københavns Universitet Naturvidenskabelig Embedseksamen Oversættere Vejledende løsninger til Skriftlig eksamen onsdag d. 18. april 2007 Eksamenstiden er to timer. Opgavernes vægt i procent er angivet ved
Læs mereTo mikroarkitekturer til MIPS Karakteropgave på Maskinarkitektur 1B
To mikroarkitekturer til MIPS Karakteropgave på Maskinarkitektur 1B Martin Zachariasen 10. september 2004 1 Introduktion Dette er den karaktergivende rapportopgave på kurset Maskinarkitektur 1B, efterår
Læs mereOversættere Skriftlig eksamen onsdag d. 19. april 2006
Københavns Universitet Naturvidenskabelig Embedseksamen Oversættere Skriftlig eksamen onsdag d. 19. april 2006 Eksamenstiden er to timer. Opgavernes vægt i procent er angivet ved hver opgave. Den skriftlige
Læs mereOversættere Skriftlig eksamen onsdag d. 24. januar 2007
Københavns Universitet Naturvidenskabelig Embedseksamen Oversættere Skriftlig eksamen onsdag d. 24. januar 2007 Eksamenstiden er to timer. Opgavernes vægt i procent er angivet ved hver opgave. Den skriftlige
Læs mereOversættere. Vejledende løsninger til Skriftlig eksamen onsdag d. 25. januar 2006
Københavns Universitet Naturvidenskabelig Embedseksamen Oversættere Vejledende løsninger til Skriftlig eksamen onsdag d. 25. januar 2006 Eksamenstiden er to timer. Opgavernes vægt i procent er angivet
Læs mereIndhold. Maskinstruktur... 3. Kapitel 1. Assemblersprog...3. 1.1 Indledning...3 1.2 Hop-instruktioner... 7 1.3 Input og output...
Indhold Maskinstruktur... 3 Kapitel 1. Assemblersprog...3 1.1 Indledning...3 1.2 Hop-instruktioner... 7 1.3 Input og output... 9 Kapitel 2. Maskinkode... 13 2.1 Den fysiske maskine... 13 2.2 Assemblerens
Læs mereDATALOGI 1E. Skriftlig eksamen fredag d. 16. januar 2004
Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Skriftlig eksamen fredag d. 16. januar 2004 Opgaverne vægtes i forhold til tidsangivelsen herunder, og hver opgaves besvarelse bedømmes
Læs mereMaskinsprog. Martin Zachariasen, DIKU. Programmer og ordrer. Ordretyper. Operander og deres placering. Ordreformat. Procedurekald. Andre arkitekturer
Maskinsprog Martin Zachariasen, DIKU Litteratur: Patterson & Hennessy, kap. 3 Programmer og ordrer Ordretyper Operander og deres placering Ordreformat Procedurekald Andre arkitekturer 1 Stored-program
Læs mereSproget Rascal (v. 2)
Sproget Rascal (v. 2) Til brug i K1 på kurset Oversættere Opdateret 29/11 2004 Abstract Rascal er et simpelt Pascal-lignende imperativt sprog. Dette dokument beskriver uformelt Rascals syntaks og semantik
Læs mereDATALOGI 1E. Skriftlig eksamen fredag den 7. juni 2002
Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Skriftlig eksamen fredag den 7. juni 2002 Opgaverne vægtes i forhold til tidsangivelsen, og hver opgaves besvarelse bedømmes som en helhed.
Læs mereOversættere Vejledende løsninger til Skriftlig eksamen onsdag d. 24. januar 2007
Københavns Universitet Naturvidenskabelig Embedseksamen Oversættere Vejledende løsninger til Skriftlig eksamen onsdag d. 24. januar 2007 Eksamenstiden er to timer. Opgavernes vægt i procent er angivet
Læs mereDM13-3. Obligatorisk opgave E.05 Håndoptimering af SPARC assembler-kode
- 3. Obligatorisk opgave E.05 Håndoptimering af SPARC assembler-kode Jacob Aae Mikkelsen - 191076 12. december 2005 1 Indhold 1 Opgave beskrivelse 2 2 Muligheder for optimering 2 2.1 efter branch.........................
Læs mereComputerarkitektur Eksamen 2014Q2. Niels Olof Bouvin A. Studienummer Navn
Computerarkitektur Eksamen 2014Q2 Niels Olof Bouvin A Studienummer Navn Vejledning Eksamen varer en time fra kl. 9 til kl. 10. Husk at skrive studienummer og navn tydeligt på forsiden, inden eksamen afsluttes.
Læs mereDATALOGI 1E. Skriftlig eksamen mandag den 23. juni 2003
Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Skriftlig eksamen mandag den 23. juni 2003 Opgaverne vægtes i forhold til tidsangivelsen herunder, og hver opgaves besvarelse bedømmes
Læs mereEksamen Computerarkitektur 2013Q4. Niels Olof Bouvin. Studienummer Navn
Eksamen Computerarkitektur 2013Q4 Niels Olof Bouvin Studienummer Navn Vejledning Eksamen varer en time fra kl. 9 til kl. 10. Husk at skrive studienummer og navn tydeligt på forsiden, inden eksamen afsluttes.
Læs mereModuler i Standard ML
Moduler i Standard ML Hans Hüttel December 2001 I løbet af datalogikurset har vi haft glæde af en hel række forskellige standardmoduler som f.eks. Math, Int, Real og String. Disse moduler kan, har vi set,
Læs mereDATALOGI 1E. Vejledende løsninger til Skriftlig eksamen mandag den 28. maj 2001. 1 60 min. 2 60 min. 3 60 min. 4 60 min.
Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Vejledende løsninger til Skriftlig eksamen mandag den 28. maj 2001 Opgaverne vægtes i forhold til tidsangivelsen, og hver opgaves besvarelse
Læs mereComputerarkitektur Eksamen 2014Q3. Niels Olof Bouvin. Studienummer Navn
Computerarkitektur Eksamen 2014Q3 Niels Olof Bouvin Studienummer Navn Vejledning Eksamen varer en time fra kl. 9 til kl. 10. Husk at skrive studienummer og navn tydeligt på forsiden, inden eksamen afsluttes.
Læs mereSider og segmenter. dopsys 1
Sider og segmenter dopsys 1 Lokal vs global sideallokering (1) Med (a) som udgangspunkt giver (b) lokal hhv. (c) global allokering forskellige resultater dopsys 2 Lokal vs global sideallokering (2) Den
Læs mereSproget Limba. Til brug i G1 og K1. Dat1E 2003
Sproget Limba Til brug i G1 og K1 Dat1E 2003 Abstract Limba er et simpelt imperativt sprog med hoballokerede tupler. Dette dokument beskriver uformelt Limbas syntaks og semantik samt en fortolker for Limba,
Læs mereUniversity of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2
DM502 Forelæsning 2 Repetition Kompilere og køre Java program javac HelloWorld.java java HeloWorld.java Debugge Java program javac -g HelloWorld.java jswat Det basale Java program public class HelloWorld
Læs mereDATALOGI 1E. Vejledende løsninger til Skriftlig eksamen fredag den 7. juni 2002
Københavns Universitet Naturvidenskabelig Embedseksamen DTLOGI 1E Vejledende løsninger til Skriftlig eksamen fredag den 7. juni 2002 Opgaverne vægtes i forhold til tidsangivelsen, og hver opgaves besvarelse
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 20. april, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereSider og segmenter. dopsys 1
Sider og segmenter dopsys 1 Lokal vs global sideallokering (1) Med (a) som udgangspunkt giver (b) lokal hhv. (c) global allokering forskellige resultater dopsys 2 Lokal vs global sideallokering (2) Den
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 10. april, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereNiveauer af abstrakte maskiner
Mikroarkitektur Niveauer af abstrakte maskiner Spørgsmål... Hvordan realiseres IJVM maskinen (lev. 2), eller hvordan ser en IJVM-CPU ud? Opbygning (mikroarkitekturen Mic-1) Anvendelse (mikroprogrammet
Læs mereLær Python dag 1 - modul 1
Lær Python dag 1 - modul 1 Introduktion, basis python Steffen Berg Klenow Jonas Bamse Andersen Syddansk Universitet Indhold 1. Velkommen 2. Programmering i python 3. Typer, variabler og udtryk 1 Velkommen
Læs mereOversættere. Vejledende løsninger til Skriftlig eksamen onsdag d. 20. april 2005
Københavns Universitet Naturvidenskabelig Embedseksamen Oversættere Vejledende løsninger til Skriftlig eksamen onsdag d. 20. april 2005 Eksamenstiden er to timer. Opgavernes vægt i procent er angivet ved
Læs mereProgrammering og Problemløsning, 2017
Programmering og Problemløsning, 2017 Parsing med Højere-Ordens Funktioner Martin Elsman Datalogisk Institut Københavns Universitet DIKU 1. December, 2017 Martin Elsman (DIKU) Programmering og Problemløsning,
Læs mereKernealphaerne Indhold af G1
Kernealphaerne Indhold af G1 3 små opgaver: 1. Oversæt en kerne og afvikl den på en kernealpha 2. Håndoversæt en C/C++ funktion til alpha assembler 3. Implementer procedurer til dynamisk lagerallokering
Læs merePython programmering. Per Tøfting. MacFest
Python programmering MacFest 2005 Per Tøfting http://pertoefting.dk/macfest/ Indhold Måder at afvikle Python program på Variabler Data typer Tal Sekvenser Strenge Tupler Lister Dictionaries Kontrolstrukturer
Læs mereUgeseddel 4 1. marts - 8. marts
Ugeseddel 4 1. marts - 8. marts Læs følgende sider i kapitel 6 i lærebogen: s. 233 258 og s. 291 317 (afsnit 6.3 overspringes). Begynd at overveje, hvad afleveringsopgaven skal omhandle. Læs vejledningen,
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2017 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 6. april, 2017 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereEksamen dcomnet Q2/2010. Navn
2582 Eksamen dcomnet Q2/2010 ID Navn Example I A32-prg1 Betragt følgende program skrevet i IA-32 symbolsk maskinsprog:.section.data x:.long 2 r:.long 27.section.text.globl _start _start: pushl x movl $0,%ebx
Læs mereSkriftlig eksamen, Programmer som Data Onsdag 6. januar Spørgsmål 1 (20 %): Regulære udtryk og automater
Skriftlig eksamen, Programmer som Data Onsdag 6. januar 2010 Dette eksamenssæt har 5 sider. Tjek med det samme at du har alle siderne. Eksamens varighed er 4 timer. Der er fire spørgmål. For at få fuldt
Læs mereEn oversætter for 100
En oversætter for 100 Godkendelsesopgave på kurset Oversættere Vinter 2011/12 1 Introduktion Dette er projektopgaven på Oversættere, vinter 2011 2012. Opgaven skal løses i grupper på op til 3 personer.
Læs mereNavn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi Opgave: Brev til Sigurd Lære: John Austin Side 1 af 8 Dato: 14-05-2003
Side 1 af 8 Dato: 14-05-2003 Til Sigurd Som aftalt vil jeg her fremsende vores program til vores 80C535 kit og display. Det gik jo ud på at vi skulle starte med at få den til at intialiserer displayet,
Læs mereLageradministration Paging og segmentering
Lageradministration Paging og segmentering 1 Re: Logiske/fysiske adresser... Proces-struktur = kode og data for en proces 4G En proces tilgår sin proces-struktur via et logisk/virtuelt adresserum, fx 0,
Læs mereDATALOGI MASKINARKITEKTUR
Københavns Universitet Natrvidenskabelig Embedseksamen DATALOGI ASKINARKITEKTUR Skriftlig eksamen fredag den 29. oktober 24 kl. -2 Frederiksholms kanal 4B Der er fem opgaver i alt og disse giver følgende
Læs mereAAU, Programmering i Java Intern skriftlig prøve 18. maj 2007
AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007 Opgavebesvarelsen skal afleveres som enten en printerudskrift eller som et passende dokument sendt via email til fjj@noea.dk. Besvarelsen skal
Læs mereEksamen dcomnet Q2/2012. Studiekortsnummer Navn
Eksamen dcomnet Q2/2012 Studiekortsnummer Navn Vejledning Eksamen varer en time fra kl. 9 til kl. 10. Husk at skrive studienummer og navn tydeligt på forsiden, inden eksamen afsluttes. Der er ét rigtigt
Læs mereDat1E G2 - En enkelt/dobbelt-cyklus mikroarkitektur. Espen Højsgaard Rune Højsgaard Christian Iversen
Dat1E G2 - En enkelt/dobbelt-cyklus mikroarkitektur Espen Højsgaard Rune Højsgaard Christian Iversen 1 Indhold 1 Sammenfatning 3 2 Enkelt-cyklus mikroarkitektur 3 2.1 Tilføjelser til datastien.............................
Læs mereEksempel: Skat i år 2000
Kursus 02199: Programmering afsnit 2.1-2.7 Anne Haxthausen IMM, DTU 1. Værdier og typer (bl.a. char, boolean, int, double) (afsnit 2.4) 2. Variable og konstanter (afsnit 2.3) 3. Sætninger (bl.a. assignments)
Læs merePlanen for idag. Indhold af G1. Kernealphaerne. Alpha erne. Datalogi 1F Forår 2003
Planen for idag Datalogi 1F Forår 2003 G1 Et gensyn med KFirst G1 Jørgen Sværke Hansen cyller@diku.dk 2 Sidst så vi hvordan man starter den første proces KCurProc = KWaitQ.Get(); KFirst(KCurProc->sp);
Læs mereStudiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen
Studiepraktik Thomas Bøgholm boegholm@cs.aau.dk Mikkel Hansen mhan@cs.aau.dk Jacob Elefsen jelefs12@student.aau.dk 1 Studiepraktik -- program Program onsdag 10.00 10.15 Registrering af fremmøde og gennemgang
Læs mereLøsningsforslag Skriftlig eksamen 9. januar 2012
Løsningsforslag Skriftlig eksamen 9. januar 2012 Version 1, 2012-01-09 Spørgsmål 1 Spørgsmål 1.1 Først laver vi indlysende korrekt NFAer for hver af de to dele (ddd ddd) og (_ddd)* af det givne regulære
Læs mereCPUer og maskinkode DM534. Rolf Fagerberg
CPUer og maskinkode DM534 Rolf Fagerberg CPUers opbygning En CPU er bygget op af elektriske kredsløb (jvf. sidste forelæsning), som kan manipulere bits. En CPU manipulerer flere bits ad gangen, deres antal
Læs mereEksamen dcomnet 2012Q4. Årskortsnummer Navn
Eksamen dcomnet 2012Q4 Årskortsnummer Navn Vejledning Eksamen varer en time fra kl. 9 til kl. 10. Husk at skrive årskort og navn tydeligt på forsiden, inden eksamen afsluttes. Der er ét rigtigt svar per
Læs mereProgrammering og Problemløsning, 2017
Programmering og Problemløsning, 2017 Rekursion Towers of Hanoi og Liniegrafik Martin Elsman Datalogisk Institut Københavns Universitet DIKU 13. Oktober, 2017 Martin Elsman (DIKU) Programmering og Problemløsning,
Læs mereif (symbol == IDENTIFIER) { object = findprocedureobject(symboltable, identifier);
procedureimplementation() { struct item_t* item; struct object_t* object; item = malloc(sizeof(struct item_t)); returntype(item); if (symbol == IDENTIFIER) { object = findprocedureobject(symboltable, identifier);
Læs mereBinært LAS-format Denne indstilling import Laser scan datafiler, i LAS format.
Kvadratnetsmodel - Import af Laser Scan Datafiler Funktionen til at oprette kvadratnetsmodeller er nu blevet udvidet og omfatter nu også en funktion til at importere laser scanning datafiler. Metoden bag
Læs mereDat1E K1-1 - En pipelinet mikroarkitektur. Espen Højsgaard Rune Højsgaard Christian Iversen
Dat1E K1-1 - En pipelinet mikroarkitektur Espen Højsgaard Rune Højsgaard Christian Iversen 1 Indhold Indhold 2 1 Sammenfatning 5 1.1 Ambitioner................................... 5 1.2 Resultat.....................................
Læs mereSkriftlig eksamen i Datalogi
Roskilde Universitetscenter side 1 af 11 sider Skriftlig eksamen i Datalogi Modul 1 Sommer 2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 10% Opgave 2 10%
Læs mereDATALOGI 1E. Vejledende løsninger til Skriftlig eksamen torsdag den 16. januar 2003
Københavns Universitet Naturvidenskabelig Embedseksamen DATALOGI 1E Vejledende løsninger til Skriftlig eksamen torsdag den 16. januar 2003 Opgaverne vægtes i forhold til tidsangivelsen herunder, og hver
Læs mereForelæsning Uge 2 Torsdag
Forelæsning Uge 2 Torsdag Java syntax og style guide Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Brug
Læs mereprogram fibomain(input,output); var i, j,result : integer; var x, y: integer;
program fibomain(input,output); var i, j,result : integer; procedure fib(n : integer); var x, y: integer; begin if (n=0) or (n=1) then result := 1 else begin fib(n-1); x:= result; fib(n-2); y:= result;
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 20. marts, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereIt og informationssøgning Forelæsning september 2006 Nils Andersen. Underprogrammer og betingelser. Standardfunktioner, typeomsætning
It og informationssøgning Forelæsning 2 13. september 2006 Nils Andersen Underprogrammer og betingelser Standardfunktioner, typeomsætning Funktionskald Moduler, lange navne Brugerdefinerede funktioner
Læs mereInterrupt - Arduino. Programmering for begyndere Brug af Arduino. Kursusaften 6 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK
Programmering for begyndere Brug af Arduino Programmeringskursus Interrupt - Arduino EDR Hillerød Knud Krogsgaard Jensen / OZ1QK Interrupts Programmeringskursus Genbrug Interrupts Betyder blot at man afbryder
Læs mereYderligere udvidelser af oversætter for Minimal
Yderligere udvidelser af oversætter for Minimal Karakteropgave på kurset Oversættere Vinter 2005 1 Introduktion Dette er den anden del af rapportopgaven på Oversættere, vinter 2005. Opgaven skal løses
Læs mereForelæsning Uge 4 Torsdag
Forelæsning Uge 4 Torsdag Algoritmeskabeloner findone, findall, findnoof, findsumof (i mandags) findbest Levetid for variabler og parametre Virkefeltsregler Hvor kan man bruge de forskellige variabler?
Læs mereHent filoplysninger fra billeder og filer
Hent filoplysninger fra billeder og filer I denne vejledning bliver det gennemgået, hvordan man via Power Forespørgsel kan hente filoplysninger fra en mappe ind i Excel. Der skal opbygges følgende elementer:
Læs mereProgrammering for begyndere Lektion 2. Opsamling mm
Lektion 2 Opsamling mm God tone Der er indlagt spørge sessioner Lektion 2 - Agenda Programmering for Lidt ændringer til teknikken, herunder hvordan du genser en lektion Lidt generelle tilbagemeldinger
Læs mereMartin Olsen. DM507 Projekt Del I. 19. marts 2012 FOTO: Colourbox
Martin Olsen DM0 Projekt 0 Del I. marts 0 FOTO: Colourbox Indhold Indledning... Opgave... Opgave... Opgave... Opgave... Opgave... Opgave... Opgave... Kildekode til SimpleInv.java... Kildekode til MergeSort.java...
Læs merePUT og INPUT funktionerne
PUT og INPUT funktionerne Af: Peter Kellberg Danmarks Statistik Sejrøgade 11 DK-2100 København Ø pke@dst.dk PUT og INPUT-funktionerne Denne artikel er foranlediget af en henvendelse til vores interne SAS
Læs mereProgrammeringscamp. Implementer funktionerne én for én og test hele tiden.
Programmeringscamp De to opgaver træner begge i at lave moduler som tilbyder services der kan bruges af andre, samt i at implementere services efter en abstrakt forskrift. Opgave 1 beder jer om at implementere
Læs merePunktskrift eller Tale Via e-mail
Punktskrift eller Tale Via e-mail Send et dokument via e-mail og få det retur som forkortet punktskrift eller syntetisk tale. Det er ideen bag Sensus Braille Mail Robotten, en e-mail baseret tjeneste som
Læs mereSkriftlig eksamen i Datalogi
Roskilde Universitetscenter side 1 af 9 sider Skriftlig eksamen i Datalogi Modul 1 Vinter 1999/2000 Opgavesættet består af 6 opgaver, der ved bedømmelsen tillægges følgende vægte: Opgave 1 5% Opgave 2
Læs mereDM01 DM01. 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk. D12, Elias 18/3-2003. Side 1 af 11
DM01 DM01 3. Obl. Afl. Jacob Christiansen, 130282, jacob.ch@mail.tdcadsl.dk D12, Elias 18/3-2003 Side 1 af 11 DM01 Indholdsfortegnelse: BILAG:...2 1 FORMÅL:...3 2 KLASSER:...4 2.1 DILEMMA:...4 2.1.1 METODER:...4
Læs mereIntroduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer
Introduktion til datastrukturer Introduktion til datastrukturer Philip Bille Datastrukturer Datastruktur. Metode til at organise data så det kan søges i/tilgås/manipuleres effektivt. Mål. Hurtig Kompakt
Læs mereEt SML-program til at finde rødder i en kontinuert funktion
Et SML-program til at finde rødder i en kontinuert funktion Hans Hüttel Ole Høgh Jensen 11 januar 2002 Indhold 1 Om denne tekst 1 2 Hvad er bisektion? 1 3 Specifikation af vores program 2 4 SML-versionen
Læs mereForelæsning Uge 3 Mandag
Forelæsning Uge 3 Mandag Niveauer af programbeskrivelser Statiske / dynamiske beskrivelser ArrayList Collection med variabelt antal elementer Der er mange andre Collection typer (se Collection interfacet
Læs mereDM507 Algoritmer og datastrukturer
DM507 Algoritmer og datastrukturer Forår 2019 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 27. februar, 2019 Dette projekt udleveres i tre dele. Hver del har sin deadline, således
Læs mereuprocessorens hardware
uprocessorens hardware 8080 Architecture Kernen i en processor er ALUen. Det er den som kan udfører simple regne operationer. De tal den arbejdermed gemmes i en række registre. Når et tal skal hentes eller
Læs merePeter Kellberg. Rundt om Danmarks Statistiks makroer. Design, Standardisering, Teknik
Peter Kellberg Rundt om Danmarks Statistiks makroer Design, Standardisering, Teknik SAS Forum 2009 Ét makrobibliotek ca 50 makroer, vi selv har lavet mange andre fx CLAN Autocall makroer en makro er et
Læs mereDivide-and-Conquer algoritmer
Divide-and-Conquer algoritmer Divide-and-Conquer algoritmer Det samme som rekursive algoritmer. Divide-and-Conquer algoritmer Det samme som rekursive algoritmer. 1. Opdel problem i mindre delproblemer
Læs mereProcessoren: Enkelt-cyklus implementation
Processoren: Enkelt-cyklus implementation Martin Zachariasen, DIKU Litteratur: Patterson & Hennessy, afsnit 5.1 5.3 Historisk tilbageblik MIPS-arkitekturen/delmængde Klokning og byggeklodser Opbygning
Læs mereKlasse 1.4 Michael Jokil 03-05-2010
HTX I ROSKILDE Afsluttende opgave Kommunikation og IT Klasse 1.4 Michael Jokil 03-05-2010 Indholdsfortegnelse Indledning... 3 Formål... 3 Planlægning... 4 Kommunikationsplan... 4 Kanylemodellen... 4 Teknisk
Læs mereProgrammering C RTG - 3.3 09-02-2015
Indholdsfortegnelse Formål... 2 Opgave formulering... 2 Krav til dokumentation af programmer... 3 ASCII tabel... 4 Værktøjer... 5 Versioner af ASCII tabel... 6 v1.9... 6 Problemer og mangler... 6 v2.1...
Læs mereTredjepart webservices
Tredjepart webservices 4. juni 2015 USS Dok. Klik her for at angive tekst. 1/12 Indholdsfortegnelse Introduktion... 3 Miljøer... 3 Adgang... 3 API kald... 4 GET: /authorizations... 4 Input 4 Output 4 Output
Læs mereComputerarkitektur. - en introduktion til computerarkitektur med LINDA
Computerarkitektur - en introduktion til computerarkitektur med LINDA faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen Roskilde Universitetscenter Naturvidenskabelig
Læs mereIntroduktion til datastrukturer. Introduktion til datastrukturer. Introduktion til datastrukturer. Datastrukturer
Introduktion til datastrukturer Introduktion til datastrukturer Philip Bille Datastrukturer Datastruktur. Metode til at organise data så det kan søges i/tilgås/manipuleres effektivt. Mål. Hurtig Kompakt
Læs mereKapitel 4 Løkker i C#
Kapitel 4 Løkker i C# Løkker en vigtig del af alle programmeringssprog, og C# er ikke andeles. En løkke er en måde at udføre en del af koden gentagne gange. Ideen er at du fortsætter med at udføre en opgave
Læs mereVejledning INSTALLATION AF ZHC5010 BETJENINGSTRYK MED FIBARO HOME CENTER. ZHC5010 Firmware Version: 1.0
Vejledning INSTALLATION AF ZHC5010 BETJENINGSTRYK MED FIBARO HOME CENTER. ZHC5010 Firmware Version: 1.0 Indledning Denne vejledning beskriver hvordan det er muligt at oprette Z-Home Controls ZHC5010 Betjeningstryk
Læs mereComputeren inderst inde
Computeren inderst inde DM534 Rolf Fagerberg Bits Information = valg mellem forskellig muligheder. Simpleste situation: valg mellem to muligheder. Kald dem 0 og. Denne valgmulighed kaldes en bit. Bits
Læs mereGIS. Guide til indlæsning af data i ArcGIS herunder KMS-data fra internettet
GIS Af Anders Bartholdy Guide til indlæsning af data i ArcGIS herunder KMS-data fra internettet Baggrundskort fra KMS er en rigtig god resurse der er tilgængelig via ArcGIS. Derfor starter vi med at gennemgå
Læs mereVirkefeltsregler i Java
Virkefeltsregler i Java int i; int k; Sequence s; int j; What s in a name? Brian spillede blændende i søndags! Skolen ligger i Viby Ring til Kirsten og sig at... Et navn fortolkes i en kontekst og konteksten
Læs mereForelæsning Uge 2 Mandag
Forelæsning Uge 2 Mandag Sætninger Simple sætninger (assignment, interne og eksterne metodekald) Sammensatte sætninger (blok, selektion, gentagelse) Udtryk og operatorer Java syntax og style guide Afleveringsopgave:
Læs mereISCC. IMM Statistical Consulting Center. Brugervejledning til beregningsmodul til robust estimation af nugget effect. Technical University of Denmark
IMM Statistical Consulting Center Technical University of Denmark ISCC Brugervejledning til beregningsmodul til robust estimation af nugget effect Endelig udgave til Eurofins af Christian Dehlendorff 15.
Læs mereProgrammering og Problemløsning, 2017
Programmering og Problemløsning, 2017 Martin Elsman Department of Computer Science University of Copenhagen DIKU September 27, 2017 Martin Elsman (DIKU) Programmering og Problemløsning, 2017 September
Læs mereLærevejledning. - en introduktion til maskinarkitektur. faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen
Lærevejledning - en introduktion til maskinarkitektur faraz@butt.dk Faraz Butt mads@danquah.dk Mads Danquah doktor@dyregod.dk Ulf Holm Nielsen Roskilde Universitetscenter Naturvidenskabelig Basisuddannelse
Læs mereDenne artikel er en detaljeret gennemgag af det fundamentale i batchfiler til hjemmebrug :-) FEEL THE POWER! ;-)
Denne guide er oprindeligt udgivet på Eksperten.dk Batch genopfriskning Denne artikel er en detaljeret gennemgag af det fundamentale i batchfiler til hjemmebrug :-) FEEL THE POWER! ;-) Skrevet den 03.
Læs mereIntroduktion til datastrukturer
Introduktion til datastrukturer Datastrukturer Stakke og køer Hægtede lister Dynamiske tabeller Philip Bille Introduktion til datastrukturer Datastrukturer Stakke og køer Hægtede lister Dynamiske tabeller
Læs mereAbstrakte datatyper C#-version
Note til Programmeringsteknologi Akademiuddannelsen i Informationsteknologi Abstrakte datatyper C#-version Finn Nordbjerg 1/9 Abstrakte Datatyper Denne note introducerer kort begrebet abstrakt datatype
Læs mereDivide-and-Conquer algoritmer
Divide-and-Conquer algoritmer Divide-and-Conquer algoritmer Det samme som rekursive algoritmer. Divide-and-Conquer algoritmer Det samme som rekursive algoritmer. 1. Opdel problem i mindre delproblemer
Læs mere