DM13-3. Obligatorisk opgave E.05 Håndoptimering af SPARC assembler-kode

Størrelse: px
Starte visningen fra side:

Download "DM13-3. Obligatorisk opgave E.05 Håndoptimering af SPARC assembler-kode"

Transkript

1 - 3. Obligatorisk opgave E.05 Håndoptimering af SPARC assembler-kode Jacob Aae Mikkelsen december

2 Indhold 1 Opgave beskrivelse 2 2 Muligheder for optimering efter branch Beregning af hukommelses adresse Unødvendig I/O Undlade at oprette nyt registervindue Analyse Quicksort metoden Partition Implementation 3 5 Afprøvning 5 6 Konklusion 6 7 bilag Den optimerede assemblerkode Den kommenterede ikke-optimerede partition Den oprindelige assemblerkode O2 optimeret assemblerkode

3 1 Opgave beskrivelse Det udleverede c-program for quicksort algoritmen skal først ved hjælp af gcc oversættes til SPARC assembler kode, hvorefter den del der har med metoden partition at gøre skal optimeres manuelt. Opgaven består i at analysere assemblerkoden, samt beskrive implementationen og afprøvningen. Analysen skal indeholde en beskrivelse af hvordan den oprindelige kode fungerer og dennes brug af registre. Implementations afsnittet skal indeholde overvejelser med hensyn til den optimerede kode, og dokumentation af denne. Koden ønskes endvidere udførligt dokumenteret. Afprøvningens resultater skal vedlægges som dokumentation for korrekthed. 2 Muligheder for optimering 2.1 efter branch Da SPARC maskinen benytter en pipelined opbygning, vil kommandoen lige efter en branch instruktion blive udført lige meget om der hoppes eller ej. Assembleren løser dette ved at indsætte en 1. Denne instruktion kan visse steder benyttes til at udføre kode, og derved spare en instruktion. Det kræver dog at der findes en instruktion der kan flyttes; ofte hoppes der jo på grund af en branch, og det må ikke være en linie, som branchen afhænger af. 2.2 Beregning af hukommelses adresse Det tager to instruktioner at lave en addresse til hukommelsen på en SPARC maskine, fordi en hukommelses adresse er på 32 bit, og en instruktion maksimalt kan holde 22 bit. Det er derfor en fordel at beregne en adresse én gang, og gemme denne i et register, som der så kan refereres relativt til, når det er fx et array der skal hentes oplysninger i. Assemblerens kode beregner denne adresse mange gange, uden at gemme den, så her er der mulighed for at optimere en del. 2.3 Unødvendig I/O Tilgang til hukommelsen er en af de tidsbekostelige instruktioner, specielt hvis ikke dataene findes i cachen. Det kan derfor betale sig at begrænse I/O aktiviteten, og i stedet gemme midlertidige værdier i et register. 2.4 Undlade at oprette nyt registervindue Hvis den metode der håndoptimeres er en leaf-procedure, en metode der ikke kalder andre metoder og kun bruger et begrænset antal variabler, kan 1 - no operation, udfører ingenting 2

4 det lade sig gøre ikke at oprette et nyt sæt registre, og på den måde spare for en del flytten rundt af pointere i stacken. 3 Analyse 3.1 Quicksort metoden Det første der bemærkes i quicksort, er at der her oprettes et nyt sæt registre, det vil altså sige at det kun er hertil vi behøver at koncentrere os om indholdet af registrene. Ved gennemgang af metoden ser vi at den kun benytter registrene %i0 og %i1 af ind-registrene, samt %o0 og %o1 af udregistrene, og det er disse registre den sender til partition som parametre. Vi ser også at den skal have resultatet leveret i %o Partition Den uoptimerede assemblerkode for partition er på 103 instruktioner. Der er 7 steder den sammensætter adressen på num-arrayets første element, ved sethi og or kombinationen. Dette er 14 liniers kode, hvor kun 2 er nødvendig, hvis blot man opbevarer adressen i et register. Der er ligeledes 7 gange at følgende kombination forekommer: ld [%fp+68], %o1 mov %o1, %o2 Her kunne lige så godt loades direkte ind i det rigtige register, og herved må der kunne spares alle mov linierne..ll7,.ll16 og.ll17 består kun af hop instruktioner, og der kunne der lige så godt være hoppet direkte til det rigtige sted, i stedet for denne omvej. Ellers følger assembler koden ret lineært c-koden, se i bilag 7.2, hvor partition metoden er vedlagt, kommenteret på hvad der sker. 4 Implementation Vi ønsker altså helt konkret at lave en implementeret udgave, hvor der kun benyttes de eksisterende ud registre, fra %o0 til %o5 2, idet %06 og %07 har en speciel funktion som bl.a. %sp[2] Da vi ved ikke at oprette et nyt sæt registre ved at p og r befinder sig i %o0 og %o1, er det første vi gør at finde adressen på num arrayet og gemme denne i %o2: 2 De globale registre %g0 til %g7 kunne også benyttes, men det er ikke nødvendigt 3

5 partition: sethi %hi(num), %o2 or %o2, %lo(num), %o2 Når nu man ved at adresserne vi søger efter i arrayet ligger med spring på 4, kan vi lige så godt lave denne omregning én gang for alle, og dermed spare de sll kommandoer der er hver gang vi skal hente noget i arrayet. Blot skal der trækkes 4 fra eller lægges 4 til i stedet for 1. Vi venstreskifter derfor både r og p med 2, som er det samme som at gange med 4. sll %o0, 2, %o0 sll %o1, 2, %o1 Pivot elementet er det der ligger på plads p i arrayet, og det henter vi ud og gemmer i %o3: ld [%o2+%o0], %o3 I forhold til den udleverede C-kode, finder vi nu i og j. Da vi ikke skal bruge p og r til noget længere, kan vi placere i i register %o0 og j i %o1. add %o0, -4, %o0 add %o1, 4, %o1 Vi er nu nået til den første løkke, der jo kun stoppes, når den brydes for at returnere. Den startes med en j=j-1, og denne instruktion genbruges i den kommende løkke..ll9: add %o1, -4, %o1 Det næste vi møder er en ny start på en løkke, vi henter derfor num[j] ud af arrayet, gemmer i %o4 og sammenligner med pivot elementet i %o3. Hvis pivot er den mindste kører løkken endnu en iteration. Da der ikke er noget vi kan flytte til lige efter branch en bliver vi nødt til at indsætte en. 3 ld [%o2+%o1], %o4 cmp %o4, %o3 bg.ll9 Den næste blok er så starten på den tredje løkke, hvori = i+1 genbruges, og num[i] sammenlignes med pivot elementet. Her slipper vi dog for en instruktion efter branchen, da cmp ikke ændrer på noget hvis den skulle blive udført når der hoppes. 3 Kunne også syntaktisk indføre en br,a i stedet for br med en efter, men dette er af kosmetisk betydning, det har ingen indflydelse på kørslen af det oversatte program. 4

6 .LL11: add %o0, 4, %o0 ld [%o2+%o0], %o5 cmp %o5, %o3 bl.ll11 Sammenligningen i < j er enkel, da vi har begge i registrene %o0 og %o1, og hvis det ikke sandt, hoppes til slutningen, og alle løkkerne er færdige. Her er heller ikke nogen instruktioner der kan passe ind, så vi indsætter en. Hvis ikke udføres ombytningen af de to elementer, og der springes til den første af løkkerne. Efter dette branch kan vi gemme den sidste af værdierne i ombytningen, da denne skal udføres under alle omstændigheder. cmp %o0, %o1 bge.ll8 st %o5, [%o2+%o1] b.ll9 st %o4, [%o2+%o0] Slutteligt er der bare at placere j i register %o0, i stedet for register %o1, men da denne skal højreskiftes tilbage igen giver dette ingen ekstra kommanda, men kan derimod indsættes efter retl kommandoen, der jo er en hop kommando..ll8: retl srl %o1,2, %o0 Register Brug %o0 p og i %o1 r og j %o2 adressen på num-arrayet %o3 pivot elementet %o4 Arbejds register %o5 Arbejds register Tabel 1: Oversigt over de benyttede registre 5 Afprøvning For at afprøve programet skal den optimerede kode compileres, og udskriften vedlægges. Følgende er hvad resultatet blev: Input: 42, 10, 18, 19, 18, 12, 8, 3, 15, 20, 3, 17, 25, 11, 23, 12, 0, -8,-13, 9, 5

7 Output: -13, -8, 0, 3, 3, 8, 9, 10, 11, 12, 12, 15, 17, 18, 18, 19, 20, 23, 25, 42, Det ser ud til at være korrekt sorteret. Med et så lille datasæt kan det ikke vurderes om køretiden faktisk er forbedret, men eftersom den ikke optimerede assemblerkode fylder 103 instruktioner, og den optimerede fylder 24, er det ikke urealistisk at tro at det fakisk er tilfældet. For at se om sorteringsalgoritmen i virkeligheden får sorteret alle elementerne rigtigt, køres den optimerede kode derfor også med et datasæt fra -10 til 9, indsat i bagvendt rækkefølge. Alle tallene i arrayet skal hermed flyttes, og resultatet er her: Input: 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9,-10, Output: -10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, Testen er lavet ved at udskifte værdierne i num: øverst i assemblerkoden. Da denne test også er bestået, konkluderes at korrektheden er i orden. Hvis der skal testes om det er tilfredsstillende optimeret, kan vi sammenligne med en optimeret version af assemblerkoden, ved at oversætte den med kommandoen: gcc -S -O2 quicksort.c. Denne er vedlagt i bilag 7.4, og som det ses, er partition på 44 linier. Vores håndoptimerede kode på 24 linier vurderes derfor som tilfredsstilende. Den maskin optimerede benytter endvidere g-registrene, det gøres ikke i den håndoptimerede. 6 Konklusion Quicksort algoritmen er oversat til assembler kode, og metoderne quicksort og partition er analyseret. Partition er håndoptimeret, og resultatet er testet og vurderet at være tilfredsstillende. Selve optimeringsprocessen er beskrevet. Alle delopgaver er derfor løst, og processen er dokumenteret her. Skulle man filosofere en anelse over optimeringen, kan man lægge mærke til at metoden quicksort kalder sig selv rekursivt 2 gange for hver gang den kalder partition. Derfor vil der blive oprettet mange registervinduer, selvom vi ikke gør det i partition. Dette kunne ændres ved at lave en iterativ udgave af quicksort i stedet for en rekursiv som vi har set på. Den iterative implementation er til gengæld mere kompliceret at programmere.[3] Hvor vidt det reelt vil ændre køretiden væsentligt skal være usagt, og det skal mere betragtes som en strøtanke i denne afsluttende del af denne opgave. 6

8 Litteratur [1] Tanenbaum, Andrew S., Structured Cmputer Organization, 5th ed. [2] Sun Microsystems, Inc., Assembly Languge Reference Manual for SPARC [3] 7

9 7 bilag 7.1 Den optimerede assemblerkode. f i l e " quicksort. c" gcc2_compiled. :. global num. section ". data". type num,# object. s i z e num,80 num:. uaword 42. uaword 10. uaword 18. uaword 19. uaword 18. uaword 12. uaword 8. uaword 3. uaword 15. uaword 20. uaword 3. uaword 17. uaword 25. uaword 11. uaword 23. uaword 12. uaword 0. uaword 8. uaword 13. uaword 9. section ". rodata". align 8.LLC0:. asciz "%3d,". section ". text ". global writearray. type writearray,#function. proc 020 writearray :!#PROLOGUE# 0 st %i0, [%fp +68] st %i1, [%fp +72] save %sp, 112, %sp!#prologue# 1 st %i0, [%fp +68] st %i1, [%fp +72]. LL3 : 8

10 . LL5 :. LL4 :. LL2 : ld [%fp +72], %o1 cmp %o0, %o1 ble. LL5 b. LL4 sethi %hi (num), %o0 or %o0, %lo (num), %o1 mov %o0, %o3 s l l %o3, 2, %o2 sethi %hi (.LLC0), %o3 or %o3, %lo (.LLC0), %o0 ld [%o1+%o2 ], %o1 c a l l printf, 0 add %o0, 1, %o1 st %o1, [%fp +68] b. LL3 ret restore. LLfe1 :. s i z e writearray,. LLfe1 writearray. global partition. type partition,#function. proc 04 partition : sethi %hi (num), %o2 or %o2, %lo (num), %o2 s l l %o0, 2, %o0 s l l %o1, 2, %o1 ld [%o2+%o0 ], %o3 add %o0, 4, %o0 add %o1, 4, %o1. LL9 : add %o1, 4, %o1 ld [%o2+%o1 ], %o4 cmp %o4, %o3 bg. LL9. LL11 : add %o0, 4, %o0 ld [%o2+%o0 ], %o5 cmp %o5, %o3 9

11 bl. LL11 cmp %o0, %o1 bge. LL8 st %o5, [%o2+%o1 ] b. LL9 st %o4, [%o2+%o0 ]. LL8 : r e t l s r l %o1,2, %o0. LLfe2 :. s i z e partition,. LLfe2 partition. global quicksort. type quicksort,#function. proc 020 quicksort :!#PROLOGUE# 0 save %sp, 120, %sp!#prologue# 1 st %i0, [%fp +68] st %i1, [%fp +72] ld [%fp +72], %o1 cmp %o0, %o1 bge. LL19 ld [%fp +72], %o1 c a l l partition, 0 st %o0, [%fp 20] ld [%fp 20], %o1 c a l l quicksort, 0 ld [%fp 20], %o0 add %o0, 1, %o1 mov %o1, %o0 ld [%fp +72], %o1 c a l l quicksort, 0. LL19 :. LL18 : ret restore. LLfe3 :. s i z e quicksort,. LLfe3 quicksort. section ". rodata" 10

12 .LLC1:.LLC2:. align 8. asciz "Input : ". align 8. asciz "\noutput : ". align 8.LLC3:. asciz "\n". section ". text ". global main. type main,#function. proc 04 main :!#PROLOGUE# 0 save %sp, 112, %sp!#prologue# 1 sethi %hi (.LLC1), %o1 or %o1, %lo (.LLC1), %o0 c a l l printf, 0 mov 0, %o0 mov 19, %o1 c a l l writearray, 0 mov 0, %o0 mov 19, %o1 c a l l quicksort, 0 sethi %hi (.LLC2), %o1 or %o1, %lo (.LLC2), %o0 c a l l printf, 0 mov 0, %o0 mov 19, %o1 c a l l writearray, 0 sethi %hi (.LLC3), %o1 or %o1, %lo (.LLC3), %o0 c a l l printf, 0. LL20 :. LLfe4 : ret restore. s i z e main,. LLfe4 main. ident "GCC: (GNU) ( release )" 11

13 7.2 Den kommenterede ikke-optimerede partition partition :!#PROLOGUE# 0 save %sp, 128, %sp!#prologue# 1 st %i0, [%fp +68] p gemmes st %i1, [%fp +72] r gemmes sethi %hi (num), %o1 or %o1, %lo (num), %o0 Adressen på num ld [%fp +68], %o1 hent p mov %o1, %o2 f l y t p s l l %o2, 2, %o1 p 4 ld [%o0+%o1 ], %o0 pivot elementet st %o0, [%fp 28] gem pivot hent p add %o0, 1, %o1 i = r 1 st %o1, [%fp 20] gem i ld [%fp +72], %o0 hent r add %o0, 1, %o1 j = r + 1 st %o1, [%fp 24] gem j. LL7 : b. LL9 hop t i l. LL09 b. LL8 Her kommer vi ikke t i l. LL9 : ld [%fp 24], %o0 hent j add %o0, 1, %o1 j = j 1 st %o1, [%fp 24] gem j. LL10 : sethi %hi (num), %o1 or %o1, %lo (num), %o0 Adressen på num ld [%fp 24], %o1 hent j mov %o1, %o2 f l y t j s l l %o2, 2, %o1 j 4 ld [%o0+%o1 ], %o0 hent num[ j ] ld [%fp 28], %o1 hent pivot cmp %o0, %o1 Sammenlign bg. LL12 hop hvis større b. LL11 hop. LL12 : ld [%fp 24], %o0 hent j add %o0, 1, %o1 j = j 1 st %o1, [%fp 24] gem j b. LL10 hop 12

14 . LL11 :. LL13 :. LL15 :. LL14 : ld [%fp 20], %o0 hent i add %o0, 1, %o1 i = i + 1 st %o1, [%fp 20] gem i sethi %hi (num), %o1 Adressen på num or %o1, %lo (num), %o0 ld [%fp 20], %o1 hent i mov %o1, %o2 f l y t i s l l %o2, 2, %o1 i 4 ld [%o0+%o1 ], %o0 hent num[ i ] ld [%fp 28], %o1 hent pivot cmp %o0, %o1 sammenlign bl. LL15 hop hvis mindre end b. LL14 hop ld [%fp 20], %o0 hent i add %o0, 1, %o1 i = i+1 st %o1, [%fp 20] gem i b. LL13 hop ld [%fp 20], %o0 hent i ld [%fp 24], %o1 hent j cmp %o0, %o1 sammenlign bge. LL16 hop større end e l l e r l i g med sethi %hi (num), %o1 or %o1, %lo (num), %o0 adressen på num ld [%fp 20], %o1 hent i mov %o1, %o2 f l y t i s l l %o2, 2, %o1 i 4 ld [%o0+%o1 ], %o0 hent num[ i ] st %o0, [%fp 32] gem num[ i ] sethi %hi (num), %o1 or %o1, %lo (num), %o0 adressen på num ld [%fp 20], %o1 hent i mov %o1, %o2 f l y t i s l l %o2, 2, %o1 i 4 sethi %hi (num), %o3 or %o3, %lo (num), %o2 adressen på num ld [%fp 24], %o3 hent j mov %o3, %o4 f l y t j s l l %o4, 2, %o3 j 4 ld [%o2+%o3 ], %o2 hent num[ j ] 13

15 . LL16 :. LL17 :. LL8 :. LL6 : st %o2, [%o0+%o1 ] gem [ j ] sethi %hi (num), %o1 adressen på num or %o1, %lo (num), %o0 ld [%fp 24], %o1 hent j mov %o1, %o2 f l y t j s l l %o2, 2, %o1 j 4 ld [%fp 32], %o2 hent num[ i ] st %o2, [%o0+%o1 ] gem num[ i ] b. LL17 hop b. LL8 hop b. LL7 hop ld [%fp 24], %o0 hent j mov %o0, %i0 f l y t j b. LL6 hop ret restore tilbage 7.3 Den oprindelige assemblerkode. f i l e " quicksort. c" gcc2_compiled. :. global num. section ". data". type num,# object. s i z e num,80 num:. uaword 42. uaword 10. uaword 18. uaword 19. uaword 18. uaword 12. uaword 8. uaword 3. uaword 15. uaword 20. uaword 3. uaword 17. uaword 25. uaword 11 returner f l y t r e g i s t r e 14

16 . uaword 23. uaword 12. uaword 0. uaword 8. uaword 13. uaword 9. section ". rodata". align 8.LLC0:. asciz "%3d,". section ". text ". global writearray. type writearray,#function. proc 020 writearray :!#PROLOGUE# 0 save %sp, 112, %sp!#prologue# 1 st %i0, [%fp +68] st %i1, [%fp +72]. LL3 :. LL5 :. LL4 :. LL2 : ld [%fp +72], %o1 cmp %o0, %o1 ble. LL5 b. LL4 sethi %hi (num), %o0 or %o0, %lo (num), %o1 mov %o0, %o3 s l l %o3, 2, %o2 sethi %hi (.LLC0), %o3 or %o3, %lo (.LLC0), %o0 ld [%o1+%o2 ], %o1 c a l l printf, 0 add %o0, 1, %o1 st %o1, [%fp +68] b. LL3 ret restore 15

17 . LLfe1 :. s i z e writearray,. LLfe1 writearray. global partition. type partition,#function. proc 04 partition :!#PROLOGUE# 0 save %sp, 128, %sp!#prologue# 1 st %i0, [%fp +68] st %i1, [%fp +72] sethi %hi (num), %o1 or %o1, %lo (num), %o0 ld [%fp +68], %o1 mov %o1, %o2 s l l %o2, 2, %o1 ld [%o0+%o1 ], %o0 st %o0, [%fp 28] add %o0, 1, %o1 st %o1, [%fp 20] ld [%fp +72], %o0 add %o0, 1, %o1 st %o1, [%fp 24]. LL7 : b. LL9 b. LL8. LL9 : ld [%fp 24], %o0 add %o0, 1, %o1 st %o1, [%fp 24]. LL10 : sethi %hi (num), %o1 or %o1, %lo (num), %o0 ld [%fp 24], %o1 mov %o1, %o2 s l l %o2, 2, %o1 ld [%o0+%o1 ], %o0 ld [%fp 28], %o1 cmp %o0, %o1 bg. LL12 b. LL11. LL12 : ld [%fp 24], %o0 16

18 . LL11 :. LL13 :. LL15 :. LL14 : add %o0, 1, %o1 st %o1, [%fp 24] b. LL10 ld [%fp 20], %o0 add %o0, 1, %o1 st %o1, [%fp 20] sethi %hi (num), %o1 or %o1, %lo (num), %o0 ld [%fp 20], %o1 mov %o1, %o2 s l l %o2, 2, %o1 ld [%o0+%o1 ], %o0 ld [%fp 28], %o1 cmp %o0, %o1 bl. LL15 b. LL14 ld [%fp 20], %o0 add %o0, 1, %o1 st %o1, [%fp 20] b. LL13 ld [%fp 20], %o0 ld [%fp 24], %o1 cmp %o0, %o1 bge. LL16 sethi %hi (num), %o1 or %o1, %lo (num), %o0 ld [%fp 20], %o1 mov %o1, %o2 s l l %o2, 2, %o1 ld [%o0+%o1 ], %o0 st %o0, [%fp 32] sethi %hi (num), %o1 or %o1, %lo (num), %o0 ld [%fp 20], %o1 mov %o1, %o2 s l l %o2, 2, %o1 sethi %hi (num), %o3 or %o3, %lo (num), %o2 ld [%fp 24], %o3 mov %o3, %o4 17

19 . LL16 :. LL17 :. LL8 :. LL6 : s l l %o4, 2, %o3 ld [%o2+%o3 ], %o2 st %o2, [%o0+%o1 ] sethi %hi (num), %o1 or %o1, %lo (num), %o0 ld [%fp 24], %o1 mov %o1, %o2 s l l %o2, 2, %o1 ld [%fp 32], %o2 st %o2, [%o0+%o1 ] b. LL17 b b. LL8. LL7 ld [%fp 24], %o0 mov %o0, %i0 b. LL6 ret restore. LLfe2 :. s i z e partition,. LLfe2 partition. global quicksort. type quicksort,#function. proc 020 quicksort :!#PROLOGUE# 0 save %sp, 120, %sp!#prologue# 1 st %i0, [%fp +68] st %i1, [%fp +72] ld [%fp +72], %o1 cmp %o0, %o1 bge. LL19 ld [%fp +72], %o1 c a l l partition, 0 st %o0, [%fp 20] 18

20 . LL19 :. LL18 : ld [%fp 20], %o1 c a l l quicksort, 0 ld [%fp 20], %o0 add %o0, 1, %o1 mov %o1, %o0 ld [%fp +72], %o1 c a l l quicksort, 0 ret restore. LLfe3 :. s i z e quicksort,. LLfe3 quicksort. section ". rodata". align 8.LLC1:. asciz "Input : ". align 8.LLC2:. asciz "\noutput : ". align 8.LLC3:. asciz "\n". section ". text ". global main. type main,#function. proc 04 main :!#PROLOGUE# 0 save %sp, 112, %sp!#prologue# 1 sethi %hi (.LLC1), %o1 or %o1, %lo (.LLC1), %o0 c a l l printf, 0 mov 0, %o0 mov 19, %o1 c a l l writearray, 0 mov 0, %o0 mov 19, %o1 c a l l quicksort, 0 sethi %hi (.LLC2), %o1 or %o1, %lo (.LLC2), %o0 c a l l printf, 0 19

21 . LL20 :. LLfe4 : mov 0, %o0 mov 19, %o1 c a l l writearray, 0 sethi %hi (.LLC3), %o1 or %o1, %lo (.LLC3), %o0 c a l l printf, 0 ret restore. s i z e main,. LLfe4 main. ident "GCC: (GNU) ( release )" 7.4 -O2 optimeret assemblerkode. f i l e " quicksort. c" gcc2_compiled. :. global num. section ". data". type num,# object. s i z e num,80 num:. uaword 42. uaword 10. uaword 18. uaword 19. uaword 18. uaword 12. uaword 8. uaword 3. uaword 15. uaword 20. uaword 3. uaword 17. uaword 25. uaword 11. uaword 23. uaword 12. uaword 0. uaword 8. uaword 13. uaword 9. section ". rodata". align 8.LLC0:. asciz "%3d," 20

22 . section ". text ". global writearray. type writearray,#function. proc 020 writearray :!#PROLOGUE# 0 save %sp, 112, %sp!#prologue# 1 cmp %i0, %i1 bg. LL4 sethi %hi (num), %o0 or %o0, %lo (num), %l1 sethi %hi (.LLC0), %l0 s l l %i0, 2, %o0. LL7 :. LL4 : ld [% l1+%o0 ], %o1 c a l l printf, 0 or %l0, %lo (.LLC0), %o0 add %i0, 1, %i0 cmp %i0, %i1 ble. LL7 s l l %i0, 2, %o0 ret restore. LLfe1 :. s i z e writearray,. LLfe1 writearray. global partition. type partition,#function. proc 04 partition :!#PROLOGUE# 0!#PROLOGUE# 1 sethi %hi (num), %g2 mov %g2, %g1 or %g2, %lo (num), %g2 s l l %o0, 2, %g3 add %o1, 1, %o1 ld [%g2+%g3 ], %o4 mov %g2, %o5 add %o0, 1, %o2 s l l %o1, 2, %o3. LL11 : add %o3, 4, %o3 ld [%o3+%o5 ], %g2 add %o2, 1, %o0 cmp %g2, %o4 21

23 . LL14 :. LL13 :. LL24 :. LL23 :. LL10 : ble. LL13 add %o1, 1, %o1 or %g1, %lo (num), %g3 add %o3, 4, %o3 ld [%g3+%o3 ], %g2 cmp %g2, %o4 bg. LL14 add %o1, 1, %o1 mov %o0, %o2 s l l %o2, 2, %g2 ld [%o5+%g2 ], %g3 cmp %g3, %o4 bge. LL23 cmp %o2, %o1 or %g1, %lo (num), %o0 add %o2, 1, %o2 s l l %o2, 2, %g2 ld [%o0+%g2 ], %g3 cmp %g3, %o4 bl, a. LL24 add %o2, 1, %o2 cmp %o2, %o1 bge. LL10 s l l %o2, 2, %g2 ld [%o5+%g2 ], %o0 ld [%o3+%o5 ], %g3 st %g3, [%o5+%g2 ] b. LL11 st %o0, [%o3+%o5 ] r e t l mov %o1, %o0. LLfe2 :. s i z e partition,. LLfe2 partition. global quicksort. type quicksort,#function. proc 020 quicksort :!#PROLOGUE# 0 save %sp, 112, %sp!#prologue# 1 cmp %i0, %i1 bge. LL26 mov %i1, %o1 22

24 . LL26 : c a l l partition, 0 mov %i0, %o0 mov %o0, %l0 mov %i0, %o0 c a l l quicksort, 0 mov %l0, %o1 add %l0, 1, %o0 c a l l quicksort, 0 mov %i1, %o1 ret restore. LLfe3 :. s i z e quicksort,. LLfe3 quicksort. section ". rodata". align 8.LLC1:. asciz "Input : ". align 8.LLC2:. asciz "\noutput : ". align 8.LLC3:. asciz "\n". section ". text ". global main. type main,#function. proc 04 main :!#PROLOGUE# 0 save %sp, 112, %sp!#prologue# 1 sethi %hi (.LLC1), %o0 c a l l printf, 0 or %o0, %lo (.LLC1), %o0 mov 0, %o0 c a l l writearray, 0 mov 19, %o1 mov 19, %o1 c a l l quicksort, 0 mov 0, %o0 sethi %hi (.LLC2), %o0 c a l l printf, 0 or %o0, %lo (.LLC2), %o0 mov 0, %o0 c a l l writearray, 0 mov 19, %o1 sethi %hi (.LLC3), %o0 23

25 . LLfe4 : c a l l printf, 0 or %o0, %lo (.LLC3), %o0 ret restore. s i z e main,. LLfe4 main. ident "GCC: (GNU) ( release )" 24

DM13-1. Obligatorisk opgave E.05. Jacob Aae Mikkelsen

DM13-1. Obligatorisk opgave E.05. Jacob Aae Mikkelsen DM13-1. Obligatorisk opgave E.05 Jacob Aae Mikkelsen - 191076 26. september 2005 Indhold Analyse af problemstillingen........................ 2 Spørgsmål 1................................. 3 Spørgsmål

Læs mere

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen

Sekvensafstand DM34 - Eksamensopgave. Jacob Aae Mikkelsen Sekvensafstand DM34 - Eksamensopgave Jacob Aae Mikkelsen 19 10 76 kokken@grydeske.dk 27. maj 2005 Resumé Rapporten her beskriver tre forskellige rekursive metoder til at sammenligne tekst strenge med.

Læs mere

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer:

Sortering. De n tal i sorteret orden. Eksempel: Kommentarer: Sortering Sortering Input: Output: n tal De n tal i sorteret orden Eksempel: Kommentarer: 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 Sorteret orden kan være stigende eller faldende. Vi vil i dette kursus

Læs mere

Indhold. 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... 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 mere

Algoritmer og invarianter

Algoritmer og invarianter Algoritmer og invarianter Iterative algoritmer Algoritmen er overordnet set een eller flere while eller for-løkker. Iterative algoritmer Algoritmen er overordnet set een eller flere while eller for-løkker.

Læs mere

DATALOGI 1E. Skriftlig eksamen torsdag den 3. juni 2004

DATALOGI 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 mere

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden Sortering 1 / 32 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 2 / 32 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden

Læs mere

Sortering af information er en fundamental og central opgave.

Sortering af information er en fundamental og central opgave. Sortering Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 Mange opgaver er hurtigere i sorteret information (tænk på ordbøger, telefonbøger,

Læs mere

Programmering i C. Lektion oktober 2008

Programmering i C. Lektion oktober 2008 Programmering i C Lektion 2 20 oktober 2008 Historie Processen At kompilere 2 / 23 Fra sidst 1 Historie 2 Processen 3 At kompilere Historie Processen At kompilere 3 / 23 ALGOL 60 1963 CPL 1966 BCPL 1969

Læs mere

Sortering. Eksempel: De n tal i sorteret orden

Sortering. Eksempel: De n tal i sorteret orden Sortering 1 / 34 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 9 2 / 34 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden

Læs mere

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen.

Invarianter. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af) dens udførelse. Udgør ofte kernen af ideen bag algoritmen. Invariant: Et forhold, som vedligeholdes af algoritmen gennem (dele af)

Læs mere

uprocessorens hardware

uprocessorens 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 mere

Sider og segmenter. dopsys 1

Sider 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 mere

Sortering af information er en fundamental og central opgave.

Sortering af information er en fundamental og central opgave. Sortering 1 / 36 Sortering Input: Output: Eksempel: n tal De n tal i sorteret orden 6, 2, 9, 4, 5, 1, 4, 3 1, 2, 3, 4, 4, 5, 6, 9 Mange opgaver er hurtigere i sorteret information (tænk på ordbøger, telefonbøger,

Læs mere

Sider og segmenter. dopsys 1

Sider 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 mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

BRP Sortering og søgning. Hægtede lister

BRP Sortering og søgning. Hægtede lister BRP 18.10.2006 Sortering og søgning. Hægtede lister 1. Opgaver 2. Selection sort (udvælgelsessortering) 3. Kompleksitetsanalyse 4. Merge sort (flettesortering) 5. Binær søgning 6. Hægtede lister 7. Øvelser:

Læs mere

Systemkald DM14. 1. Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111

Systemkald DM14. 1. Obligatoriske opgave. Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111 DM14 1. Obligatoriske opgave Systemkald Antal sider: 7 inkl. 2 bilag Afleveret: d. 18/3-2004 Afleveret af: Jacob Christiansen, 130282-2111 Side 1 af 5 Intro: Formålet med opgaven at et lave en system kald

Læs mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

DANMARKS TEKNISKE UNIVERSITET

DANMARKS TEKNISKE UNIVERSITET DANMARKS TEKNISKE UNIVERSITET Skriftlig prøve, 14. december 2018, 4 timer Side 1 af 18 Kursus navn: 02101 Indledende Programmering Kursus : 02101 Tilladte hjælpemidler: Ikke-digitale skriftlige hjælpemidler

Læs mere

DATALOGI 1E. Skriftlig eksamen fredag den 7. juni 2002

DATALOGI 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 mere

Programmering i C. Lektion september 2009

Programmering i C. Lektion september 2009 Programmering i C Lektion 1 8. september 2009 Målgruppe Motivation Indhold Form Materiale 2 / 47 Kursusintroduktion 1 Målgruppe 2 Motivation 3 Indhold 4 Form 5 Materiale Målgruppe Motivation Indhold Form

Læs mere

Divide-and-Conquer algoritmer

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

Hukommelsesspil. Introduktion. Scratch

Hukommelsesspil. Introduktion. Scratch Scratch 2 Hukommelsesspil All Code Clubs must be registered. By registering your club we can measure our impact, and we can continue to provide free resources that help children learn to code. You can

Læs mere

Divide-and-Conquer algoritmer

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

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser

Åben uddannelse, Efterår 1996, Oversættere og køretidsomgivelser 3/10/96 Seminaret den 26/10 vil omhandle den sidste fase af analysen og de første skridt i kodegenereringen. Det drejer sig om at finde betydningen af programmet, nu hvor leksikalsk og syntaktisk analyse

Læs mere

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for

Læs mere

DATALOGI MASKINARKITEKTUR Blok 2 samt Reeksamination i DATALOGI MASKINARKITEKTUR Blok 1 og arkitekturdelen af DATALOGI 1E

DATALOGI 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 mere

Grundlæggende Algoritmer og Datastrukturer. Analyseværktøjer [CLRS, 1-3.1]

Grundlæggende Algoritmer og Datastrukturer. Analyseværktøjer [CLRS, 1-3.1] Grundlæggende Algoritmer og Datastrukturer Analyseværktøjer [CLRS, 1-3.1] Eksempler på en beregningsprocess Puslespil ved ombytninger Maximum delsum Hvad er udførselstiden for en algoritme? Maskinkode

Læs mere

Divide-and-Conquer algoritmer

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

MIPS, registerallokering og MARS

MIPS, registerallokering og MARS 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

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2018 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 13. marts, 2018 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

DM13-1. Obligatoriske Opgave - Kredsløbs design

DM13-1. Obligatoriske Opgave - Kredsløbs design DM13-1. Obligatoriske Opgave - Kredsløbs design Jacob Christiansen moffe42@imada.sdu.dk Institut for MAtematik og DAtalogi, Syddansk Universitet, Odense 1. Opgaven Opgaven består i at designe et kredsløb,

Læs mere

Divide-and-Conquer algoritmer

Divide-and-Conquer algoritmer Divide-and-Conquer algoritmer Divide-and-Conquer algoritmer Det samme som rekursive algoritmer. 1. Opdel problem i mindre delproblemer (af samme type). 2. Løs delproblemerne ved rekursion (dvs. kald algoritmen

Læs mere

Rekursion C#-version

Rekursion C#-version Note til Programmeringsteknologi Akademiuddannn i Informationsteknologi Rekursion C#-version Finn Nordbjerg 1 Rekursion Rekursionsbegrebet bygger på, at man beskriver noget ved "sig selv". Fx. kan tallet

Læs mere

Introduktion til funktioner, moduler og scopes i Python

Introduktion til funktioner, moduler og scopes i Python Denne guide er oprindeligt udgivet på Eksperten.dk Introduktion til funktioner, moduler og scopes i Python Denne artikel er fortsættelsen af "I gang med Python", som blevet publiceret her på sitet for

Læs mere

Kernealphaerne Indhold af G1

Kernealphaerne 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 mere

Eksamen dcomnet Q2/2010. Navn

Eksamen 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 mere

DM507 Algoritmer og datastrukturer

DM507 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 mere

Algorithms & Architectures II

Algorithms & Architectures II Algorithms & Architectures II Algorithms & Architectures II Jens Myrup Pedersen Hans Peter Schwefel Kursusholdere Dagens lektion Overordnet mål: At etablere en forståelse for hvordan hardware og hardwarearkitekturer

Læs mere

Programmering C RTG - 3.3 09-02-2015

Programmering 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 mere

Modbus data modellen er opbygget af fire primære data typer. I nedenstående skema er en kort oversigt over disse.

Modbus data modellen er opbygget af fire primære data typer. I nedenstående skema er en kort oversigt over disse. Modbus RTU protokol Indledning Modbus er en application layer messaging protocol, placeret på 7. lag i OSI modellen, der sørger for client/server kommunikation mellem enheder koblet på forskellige typer

Læs mere

DATALOGI 1E. Skriftlig eksamen mandag den 23. juni 2003

DATALOGI 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 mere

Algoritmer og Datastrukturer 1. Gerth Stølting Brodal

Algoritmer og Datastrukturer 1. Gerth Stølting Brodal Algoritmer og Datastrukturer 1 Gerth Stølting Brodal Design af Algoritmer Korrekt algoritme 1) algoritmen standser på alle input 2) Output er det rigtige på alle input Effektivitet 1) Optimer algoritmerne

Læs mere

Programmering og Problemløsning, 2017

Programmering og Problemløsning, 2017 Programmering og Problemløsning, 2017 Martin Elsman Datalogisk Institut Københavns Universitet DIKU 10. Oktober, 2017 Martin Elsman (DIKU) Programmering og Problemløsning, 2017 10. Oktober, 2017 1 / 15

Læs mere

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel:

Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel: Grådige algoritmer Grådige algoritmer Et generelt algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Ideen er simpel: Opbyg løsningen skridt for skridt ved hele tiden af vælge lige

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2010 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 24. april, 2010 (let justeret 10. maj og 21. maj 2010) Dette projekt udleveres i tre

Læs mere

DM507 Eksamen Obligatorisk Opgave Rejseplanlægning

DM507 Eksamen Obligatorisk Opgave Rejseplanlægning Institut for Matematik og Datalogi Syddansk Universitet, Odense 21. februar 2011 LMF DM507 Eksamen Obligatorisk Opgave Rejseplanlægning 1 Problemet Denne opgave går ud på at lave et program, som ud fra

Læs mere

Navn: 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

Navn: 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 mere

Oversættere Skriftlig eksamen onsdag d. 25. januar 2006

Oversæ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 mere

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet)

dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet) dcomnet-nr. 8 Simpel aritmetik på maskinniveau Computere og Netværk (dcomnet) Efterår 2009 1 Simpel aritmetik på maskinniveau I SCO, appendix A, er det beskrevet, hvordan man adderer ikke-negative heltal

Læs mere

To mikroarkitekturer til MIPS Karakteropgave på Maskinarkitektur 1B

To 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 mere

Oversættere Skriftlig eksamen onsdag d. 19. april 2006

Oversæ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 mere

program fibomain(input,output); var i, j,result : integer; var x, y: integer;

program 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 mere

Niveauer af abstrakte maskiner

Niveauer 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 mere

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt.

Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Merging og hashing Mål Målet for disse slides er at diskutere nogle metoder til at gemme og hente data effektivt. Dette emne er et uddrag af kurset DM507 Algoritmer og datastrukturer (2. semester). Mål

Læs mere

DM507 Algoritmer og datastrukturer

DM507 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 mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2012 Projekt, del III Institut for matematik og datalogi Syddansk Universitet 29. april, 2012 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Sproget Rascal (v. 2)

Sproget 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 mere

Spar tid med struktureret programmering! Om PLC programmering

Spar tid med struktureret programmering! Om PLC programmering Spar tid med struktureret programmering! Om PLC programmering 1 MITSUBISHI PLC programmerings software Ved systemtekniker Helge Gulstad Tlf. Direkte: 46 74 01 61 Mob: 21 19 25 64 Mail: hgd@beijer.dk 2

Læs mere

JTA-DynamicsPDF. til. Microsoft Dynamics C5 vers. 3 SP3 eller højere. JTA-Data Jylland Vinkelvej 108a 8800 Viborg Tlf. 86672024 www.jta-jylland.

JTA-DynamicsPDF. til. Microsoft Dynamics C5 vers. 3 SP3 eller højere. JTA-Data Jylland Vinkelvej 108a 8800 Viborg Tlf. 86672024 www.jta-jylland. JTA-DynamicsPDF til Microsoft Dynamics C5 vers. 3 SP3 eller højere. www.jta-jylland.dk 1. Introduktion til JTA-DynamicsPDF. JTA-DynamicsPDF til Microsoft Dynamics C5 er et ekstra modul, som er udviklet

Læs mere

Oversættere Skriftlig eksamen onsdag d. 24. januar 2007

Oversæ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 mere

Algoritmer og Datastrukturer 1

Algoritmer og Datastrukturer 1 Algoritmer og Datastrukturer 1 Gerth Stølting Brodal Analyseværktøjer [CLRS, 1-3.1] Eksempler på en beregningsprocess Puslespil ved ombytninger Maximum delsum Hvad er udførselstiden for en algoritme? Maskinkode

Læs mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2016 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 29. februar, 2016 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

LCD Character display Intro

LCD Character display Intro LCD Character display Intro Der findes flere typer af LCD karakter-displays, fra forskellige firmaer. Her er vist en type, der er blå. Pins: Nummer 1 fra venstre Her er vist en nærmere beskrivelse af de

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den. maj 00. Kursusnavn Algoritmer og datastrukturer I Kursus nr. 005. Tilladte hjælpemidler: Alle skriftlige hjælpemidler. Vægtning af opgaverne:

Læs mere

Sortering i lineær tid

Sortering i lineær tid Sortering i lineær tid Nedre grænse for sammenligningsbaseret sortering Nedre grænser kræver en præcis beregningsmodel. Nedre grænse for sammenligningsbaseret sortering Nedre grænser kræver en præcis beregningsmodel.

Læs mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den. maj 00. Kursusnavn Algoritmer og datastrukturer Kursus nr. 06. Tilladte hjælpemidler: Alle hjælpemidler. Vægtning af opgaverne: Opgave

Læs mere

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer

Skriftlig Eksamen DM507 Algoritmer og Datastrukturer Skriftlig Eksamen DM507 Algoritmer og Datastrukturer Institut for Matematik og Datalogi Syddansk Universitet, Odense Mandag den 6. juni 2016, kl. 15:00 19:00 Besvarelsen skal afleveres elektronisk. Se

Læs mere

Programmering for begyndere Lektion 2. Opsamling mm

Programmering 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 mere

Danmarks Tekniske Universitet

Danmarks Tekniske Universitet side af sider Danmarks Tekniske Universitet Skriftlig prøve, den 6. maj 0. Kursusnavn: Algoritmer og datastrukturer I Kursus nr. 005. Tilladte hjælpemidler: Skriftlige hjælpemidler. Varighed: timer Vægtning

Læs mere

Skriftlig eksamen i Datalogi

Skriftlig 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 mere

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen

Programmering. Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Programmering Det rent og skært nødvendige, det elementært nødvendige! Morten Dam Jørgensen Oversigt Undervisningen Hvad er programmering Hvordan er et program organiseret? Programmering og fysik Nobelprisen

Læs mere

Grådige algoritmer. Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Grådige algoritmer. Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Grådige algoritmer Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer. Grådige algoritmer Et algoritme-konstruktionsprincip ( paradigme ) for optimeringsproblemer.

Læs mere

DM507 Algoritmer og datastrukturer

DM507 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 mere

Læ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 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 mere

DM507 Algoritmer og datastrukturer

DM507 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 mere

DATALOGI 1E. Vejledende løsninger til Skriftlig eksamen mandag den 28. maj 2001. 1 60 min. 2 60 min. 3 60 min. 4 60 min.

DATALOGI 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 mere

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { int wmid, wmevent; programmering med LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) int wmid, wmevent; PAINTSTRUCT Introduktion ps; til HDC hdc; programmering med switch (message) case WM_COMMAND: wmid = LOWORD(wParam);

Læs mere

Introduktion. Introduktion. Algoritmer og datastrukturer. Eksempel: Maksimalt tal

Introduktion. Introduktion. Algoritmer og datastrukturer. Eksempel: Maksimalt tal Philip Bille Algoritmer og datastrukturer Algoritmisk problem. Præcist defineret relation mellem input og output. Algoritme. Metode til at løse et algoritmisk problem. Beskrevet i diskrete og entydige

Læs mere

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag Forelæsning Uge 4 Mandag Algoritmeskabeloner findone, findall, findnoof, findsumof Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder strenge) Opfølgning på Skildpadde

Læs mere

Abstrakte datatyper C#-version

Abstrakte 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 mere

Introduktion. Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3. Philip Bille

Introduktion. Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3. Philip Bille Introduktion Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3 Philip Bille Introduktion Algoritmer og datastrukturer Toppunkter Algoritme 1 Algoritme 2 Algoritme 3 Algoritmer

Læs mere

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned.

22 Hobe. Noter. PS1 -- Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned. 22 Hobe. Binære hobe. Minimum-hob og maximum-hob. Den abstrakte datatype minimum-hob. Opbygning af hobe. Operationen siv-ned. Indsættelse i hobe. Sletning af minimalt element i hobe. Repræsentation. 327

Læs mere

Sproget 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 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 mere

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt.

Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt. Merging og hashing Mål Målet for disse slides er at beskrive nogle algoritmer og datastrukturer relateret til at gemme og hente data effektivt. Dette emne er et uddrag af kurset DM507 Algoritmer og datastrukturer

Læs mere

Kapitel 4 Løkker i C#

Kapitel 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 mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2013 Projekt, del I Institut for matematik og datalogi Syddansk Universitet 5. marts, 2013 Dette projekt udleveres i to dele. Hver del har sin deadline, således

Læs mere

Eksamensopgaver datalogi, dlc 2011 side 1/5. 1. Lodtrækningssystem

Eksamensopgaver datalogi, dlc 2011 side 1/5. 1. Lodtrækningssystem Eksamensopgaver datalogi, dlc 2011 side 1/5 1. Lodtrækningssystem Der skal fremstilles et program, som kan foretage en lodtrækning. Programmet skal kunne udtrække en eller flere personer (eller andet)

Læs mere

Michael Jokil 11-05-2012

Michael Jokil 11-05-2012 HTX, RTG Det skrå kast Informationsteknologi B Michael Jokil 11-05-2012 Indholdsfortegnelse Indledning... 3 Teori... 3 Kravspecifikationer... 4 Design... 4 Funktionalitet... 4 Brugerflade... 4 Implementering...

Læs mere

ChatBot. Introduktion. Scratch. Nu skal du lære hvordan du programmerer din egen talende robot! Arbejdsliste. Test dit Projekt.

ChatBot. Introduktion. Scratch. Nu skal du lære hvordan du programmerer din egen talende robot! Arbejdsliste. Test dit Projekt. Scratch 1 ChatBot All Code Clubs must be registered. Registered clubs appear on the map at codeclubworld.org - if your club is not on the map then visit jumpto.cc/ccwreg to register your club. Introduktion

Læs mere

Installation af GPS med tilslutning til USB port

Installation af GPS med tilslutning til USB port Indholdsfortegnelse Opsætning af GPS-tilslutning... 1 1: Installation af driver... 2 2: Opsætning af COM-port... 2 3: Vælg COM-port i DLS NG... 3 4: Brug af GPSViewer testprogram... 5 5: Hvis COM-port

Læs mere

1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer

1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer 1. Redegør for Lister, stakke og køer mht struktur og komplexitet af de relevante operationer på disse. Typer af lister: Array Enkelt linket liste Dobbelt linket Cirkulære lister Typer af køer: FILO FIFO

Læs mere

Denne rapport vil beskæftige sig med hvordan computere bruger matematiske algoritmer til at sortere tal efter størrelse.

Denne rapport vil beskæftige sig med hvordan computere bruger matematiske algoritmer til at sortere tal efter størrelse. Sorteringsalgoritmer Af Tobias André Højsgaard Klasse 2.4 Roskilde Tekniske Gymnasium IT Opgavens mål Denne rapport vil beskæftige sig med hvordan computere bruger matematiske algoritmer til at sortere

Læs mere

Blockprog Rev1.0. Block programmering CS1/CJ1. Qiuck guide OMRON

Blockprog Rev1.0. Block programmering CS1/CJ1. Qiuck guide OMRON Blockprog Rev1.0 Block programmering CS1/CJ1 Qiuck guide OMRON Indholdsfortegnelse 1. SPECIFIKATION... 3 2. PROGRAMMERINGS INSTRUKTIONER.... 4 3. BLOK PROGRAMMERING... 5 3.1. BPRG OG BEND... 5 4. BETINGELSES

Læs mere

Lageradministration Paging og segmentering

Lageradministration 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 mere

DM507 Algoritmer og datastrukturer

DM507 Algoritmer og datastrukturer DM507 Algoritmer og datastrukturer Forår 2012 Projekt, del II Institut for matematik og datalogi Syddansk Universitet 15. marts, 2012 Dette projekt udleveres i tre dele. Hver del har sin deadline, således

Læs mere

Søgning og Sortering. Philip Bille

Søgning og Sortering. Philip Bille Søgning og Sortering Philip Bille Plan Søgning Linæer søgning Binær søgning Sortering Indsættelsesortering Flettesortering Søgning Søgning 1 4 7 12 16 18 25 28 31 33 36 42 45 47 50 1 2 3 4 5 6 7 8 9 10

Læs mere

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507)

Skriftlig Eksamen Algoritmer og Datastrukturer (DM507) Skriftlig Eksamen Algoritmer og Datastrukturer (DM507) Institut for Matematik og Datalogi Syddansk Universitet, Odense Onsdag den 0. juni 009, kl. 9 Alle sædvanlige hjælpemidler (lærebøger, notater, osv.)

Læs mere