1 / 72

IS1200 Datorteknik

IS1200 Datorteknik. Föreläsning 4 Programutveckling, Intro till lab 1 Kursboken, kapitel 1, 4, 5 och 8. Ö10. F10. Hemlab-3. Hemlab-2. Hemlab-1. Ö2. Ö1. Ö3. Ö5. Ö7. Ö8. Ö9. Ö6. Ö4. F1. F5. F7. F8. F4. F6. F9. F3. F2. Tentamen. LAB-2. LAB-3. LAB-1.

liuz
Télécharger la présentation

IS1200 Datorteknik

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. IS1200 Datorteknik Föreläsning 4 Programutveckling, Intro till lab 1 Kursboken, kapitel 1, 4, 5 och 8 IS1200 Datorteknik, föreläsning 4

  2. Ö10 F10 Hemlab-3 Hemlab-2 Hemlab-1 Ö2 Ö1 Ö3 Ö5 Ö7 Ö8 Ö9 Ö6 Ö4 F1 F5 F7 F8 F4 F6 F9 F3 F2 Tentamen LAB-2 LAB-3 LAB-1 IS1200 Datorteknikhttp://www.ict.kth.se/courses/IS1200 Assemblerkod 4 stegs pipeline Nios2time C-kod Nios2io Nios2int Cache-minnen CPU-scheduling IS1200 Datorteknik, föreläsning 4

  3. IS1200 Datorteknik • Föreläsning 4, innehåll • Programutveckling, allmänt • Laboration 1: nios2time • Programutveckling, denna kurs IS1200 Datorteknik, föreläsning 4

  4. Litteraturhänvisningar Kursboken avsnitt 1.5 avsnitt 4.5 och 4.6 avsnitt 8.1-8.2 Exempelsamling del 3 NiosII-manual Lab-PM för laboration 1, nios2time IS1200 Datorteknik, föreläsning 4

  5. Viktiga delar i en dator CPU BUS program I/O MEM data IS1200 Datorteknik, föreläsning 4

  6. (decode) EXECUTE Programexekvering FETCH (update PC) IS1200 Datorteknik, föreläsning 4

  7. Steg i programutveckling • Editering av program i C-kod (liknande) • Kompilering av C-kod till Assemlerkod • Editering av programkod i assembler • Assemblering av Ass.kod till Objekt-modul • Länkning av Objekt-modul(er) -> Laddmodul • Laddning av Laddmodul till Minne • Exekvering (körning) av program • Simulering av program • Felsökning (debugging) av program IS1200 Datorteknik, föreläsning 4

  8. EditeringExempel på C-kod #include “minfil.c” /* inkludera filer */ #define START_TIME 0x5957 /* makrodefinition */ int current_time = START_TIME; /* global initierad variabel */ int a, b, c; /* globala oinitierade variabler */ int sum (int par1, int par2) /* function definition */ { int tmp; /* lokal variabel i sum */ tmp = par1 + par2; return (tmp); } main () /* huvudprogram, main */ { int talA, talB, talC; /* lokala variabler i main */ /* själva programkoden i huvudprogrammmet */ ... talC = sum( talA, talB ); /* anrop av function */ ... } IS1200 Datorteknik, föreläsning 4

  9. Laboration nios2timeUtskrift av tid varje sekund 59:57 59:58 59:59 00:00 00:01 . . IS1200 Datorteknik, föreläsning 4

  10. EditeringExempel på C-kod, lab1-ide’ #include “minfil.c” /* inkludera fil */ #define START_TIME 0x5957 /* makrodefinition */ #define TRUE 1 /* TRUE = 1 */ int current_time = START_TIME; /* global initierad variabel */ extern void puttime (int* time); /* underprogram, function, procedure, method */ extern void tick (int* time); extern void delay (int millisek); extern int hexasc (int hexval); main () /* huvudprogram, main */ { while (TRUE) /* forever */ { puttime (&current_time); /* skriv ut aktuell tid i fönster */ tick (&current_time); /* uppdatera current_time */ delay (1000); /* vänta 1000 millisekunder */ } } IS1200 Datorteknik, föreläsning 4

  11. Pekare och adress(så där i förbifarten) int a; /* reservera plats */ int b=17; /* och initiera */ int* pek1; /* pekare till en int */ int* pek2 = &b; /* initiera */ /* &kalle utläses som ”adressen till kalle” */ a = *pek2; /* a tilldelas det värde som pek2 pekar på */ /* avreferering – dereferencing */ IS1200 Datorteknik, föreläsning 4

  12. C-program Text-fil EditeringRedigering av C-kod fil.c, kan redigeras med en editor IS1200 Datorteknik, föreläsning 4

  13. Ass-program Text-fil C-program Text-fil Kompilering: översätter C-kod till Assembler-kod Kommando: ”compile” fil.c (med debugger: ”compile -d” fil.c) fil.c kan redigeras med en editor kompilering / översättning fil.s kan redigeras med en editor IS1200 Datorteknik, föreläsning 4

  14. EditeringExempel på Assembler-kod .include ”../minfil.s" .data .align 2 # nästa adress delbar med 4 mytime: .word 0x5957 .text .global main # måste tas med (gemener) # .global behövs ej för puttime, tick, delay main: movia r4, mytime # ”main:” måste finnas med movia r16, puttime callr r16 movia r4, mytime call tick movia r4, 1000 call delay br main puttime: ret # tom subrutin tick: ret # tom subrutin delay: ret # tom subrutin .end # sluta översätt IS1200 Datorteknik, föreläsning 4

  15. Object-modul ”Text-fil” Ass-program Text-fil Assemblering; översätterAss-kod till objekt-modul Kommando: ”assemble” fil.s (med debugger: ”assemble –d” fil.s) fil.s Assemblering / översättning fil.o (relokerbar ?) IS1200 Datorteknik, föreläsning 4

  16. Exempel på objekt-modulfil.obj Detta är en binär fil. Den är obegriplig om man öppnar den med en vanlig editor. Information i filen: .text Varje instruktion kodas i maskinkod, det vill säga binär kod Varje symbolisk adress ges ett värde. Symboliska namn som ej kan ges värde lokalt bokförs i en symboltabell som används och kompletteras vid länkningen. .data information om vilka variabelplatser som ska reserveras, för initieradevariabler krävs att värdet finns lagrat .bss för oinitieradevariabler räcker det att ange namn och storlek (Block Started by Symbol) Påminnelse om .global som stod i assembler-filen: De symboler som deklararerats som global vet man ska användas vid länkningen, och man förbereder arbetet genom att placera dessa i symboltabellen IS1200 Datorteknik, föreläsning 4

  17. Länkning; sätter ihopObject-modul(er) till Laddmodul Object-modul ”Text-fil” Ladd-modul ”Text-fil” Kommando: ”link” fil.o (med debugger: ”link -d” fil.o) fil.o innehåller binär programkod men alla adresser finns inte med fil.o Länkning fil.elf innehåller binär programkod som kan kopieras till minnet och köras (relokerbar?) fil.elf IS1200 Datorteknik, föreläsning 4

  18. Object-modul ”Text-fil” Object-dump Text-fil Ladd-modul ”Text-fil” Länkning av Nios-program gerextrafil: fil.dump - en listning Kommando: ”link” fil.o Man bör kunna få fram en extra fil fil.objdump fil.o fil.objdump fil.elf IS1200 Datorteknik, föreläsning 4

  19. Exempel på Disassemble(endast vissa delar) 0x00800204 <main>: movhi r4,128 0x00800208 <main+4>: addi r4,r4,13700 0x0080020c <main+8>: movhi r8,128 0x00800210 <main+12>: addi r8,r8,564 0x00800214 <main+16>: callr r8 0x00800218 <main+20>: movhi r4,128 0x0080021c <main+24>: addi r4,r4,13700 0x00800220 <main+28>: call 0x800238 <tick> 0x00800224 <main+32>: movhi r4,0 0x00800228 <main+36>: addi r4,r4,1000 0x0080022c <main+40>: call 0x80023c <delay> 0x00800230 <main+44>: br 0x800204 <main> 0x00800234 <puttime>: ret 0x00800238 <tick>: ret 0x0080023c <delay>: ret 0x00803584 <mytime>: 0x00005957 • movia, r4, mytime • 128 = 0b0000 0000 1000 0000 = 0x 0080 • 13700 = 8192 + 4096 + 1024 + 256 + 128 + 4 • = 0b0011 0101 1000 0100 = 0x3584 • mytime = 0080 3584 IS1200 Datorteknik, föreläsning 4

  20. Object-modul ”Text-fil” Object-dump Text-fil Ladd-modul ”Text-fil” Sym-table Text-fil Länkning av Nios-program gerextrafil: fil.nm - namelist Kommando: ”link” fil.o Med extra flagga (-nm?) bör man kunna få fram en till extra fil fil.nm fil.o fil.nm fil.objdump fil.elf IS1200 Datorteknik, föreläsning 4

  21. Exempel på fil.nm(endast vissa delar) … 00800204 T main 0080234c t puttime 00800238 t tick 0080023c t delay ... 00800264 D _data 00803584 d mytime IS1200 Datorteknik, föreläsning 4

  22. Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Ladd-modul ”Text-fil” filn.o fil1.o fil2.o fil3.o Länkning - kombinerar fleraObject-moduler till Laddmodul Kommando: ”link” fil1.o fil2.o fil3.o … filn.o . . . Länkning fil.elf, vilket namn? fil1.elf (sista i kommandot som ska innehålla ”main:”) IS1200 Datorteknik, föreläsning 4

  23. Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Ladd-modul ”Text-fil” lib2.o lib1.o fil2.o fil1.o in-länkning av biblioteksfiler Kommando: ”link” lib2.o, lib1.0, ... fil2.o, fil1. o Biblioteksfiler . . . Länkning fil.elf, vilket namn? fil1.elf (sista i kommandot som ska innehålla ”main:”) IS1200 Datorteknik, föreläsning 4

  24. Ladd-modul ”fil.elf” Minne LaddningLaddmodul laddas till minnet fil.elf ”Load (and run/go)” Var i minnet ? (nära 0x800000) IS1200 Datorteknik, föreläsning 4

  25. +4 PC Minne Körning / ExekveringProgrammet körs av CPU:n Var i minnet ? Länkaren väljer Körning / Exekvering Mus-kommando: Run As Nios II Hardware (utan debugger/simulator) IS1200 Datorteknik, föreläsning 4

  26. +4 PC Minne DebuggingProgrammet körs av CPU:n Var i minnet ? Länkaren väljer Kommando: ./fil.gdb Debugging Önskemål: Starta program på vald adress (skriv till PC) Stoppa program Stegvis exekvering en instruktion i taget (S = Step Into) Exekvera en hel subrutin (Step Over) Undersöka innehåll i register och minne (och variabler) Brytpunkter; införa - ta bort Exekvera fram till nästa brytpunkt (Resume) IS1200 Datorteknik, föreläsning 4

  27. Fil-administration Alternativ 1: Många filer som kompileras separat och länkas ihop till en laddmodul Alternativ 2: Många filer som kombineras med ”include”-satser tillEn enda ”jättefil” som kompileras och länkas ihop till en laddmodul IS1200 Datorteknik, föreläsning 4

  28. Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Ass-program Text-fil Ass-program Text-fil Ass-program Text-fil Ass-program Text-fil Ladd-modul ”Text-fil” C-program Text-fil C-program Text-fil C-program Text-fil C-program Text-fil Separatkompilering Fördelar ? Dela upp arbetet i delar ! Snabb (del-) kompilering ! Nackdel ? Långt kommando vid länkning! IS1200 Datorteknik, föreläsning 4

  29. Object-modul ”Text-fil” Ass-program Text-fil Ladd-modul ”Text-fil” C-program Text-fil C-program Text-fil C-program Text-fil C-program Text-fil ”include” Fördel ? Dela upp arbetet i delar ! Kort kommando vid länkning ! Nackdel ? Onödigt arbete (tid) vid kompilering ! IS1200 Datorteknik, föreläsning 4

  30. Object-modul ”Text-fil” Ass-program Text-fil Ladd-modul ”Text-fil” C-program Text-fil C-program Text-fil C-program Text-fil C-program Text-fil ”include” Vår labmiljö ! Allt jobb ”döljs” bakom ”Run As ...” IS1200 Datorteknik, föreläsning 4

  31. Vår labmiljö ! Programutveckling med NiosII EDS Embedded Design Suite HELT ANNORLUNDA IS1200 Datorteknik, föreläsning 4

  32. Pascal-program Text-fil JAVA-program Text-fil Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Object-modul ”Text-fil” Ass-program Text-fil Ass-program Text-fil Ass-program Text-fil Ass-program Text-fil Ladd-modul ”Text-fil” C-program Text-fil Separatkompilering med blandad kod IS1200 Datorteknik, föreläsning 4

  33. # huvudprogram a: .word 0 b: .word 0 res: .word 0 … .global main .global sum main: copy reg4, a copy reg5, b call sum copy res, reg2 /* Main File */ int a, b, res extern int sum (int a, int b); … res = sum (a,b); /* Function File */ int sum (int x, int y) /* ”public */ { return (x + y); } # subroutine .global sum … sum: add reg2, reg4, reg5 return Blandad kodC-kod och Assembler-kod IS1200 Datorteknik, föreläsning 4

  34. Object-modul ”Text-fil” Object-modul ”Text-fil” Ass-program Text-fil Ass-program Text-fil Ladd-modul ”Text-fil” res=sum(a,b) int sum(x,y) function huvudprogram Kompilering Assemblering Länkning IS1200 Datorteknik, föreläsning 4

  35. Object-modul ”Text-fil” Object-modul ”Text-fil” Ass-program Text-fil Ladd-modul ”Text-fil” sum: push ... res=sum(a,b) huvudprogram subrutin Kompilering Assemblering Länkning IS1200 Datorteknik, föreläsning 4

  36. Object-modul ”Text-fil” Object-modul ”Text-fil” Ass-program Text-fil Ladd-modul ”Text-fil” int sum(x,y) call sum function huvudprogram Kompilering Assemblering Länkning IS1200 Datorteknik, föreläsning 4

  37. Object-modul ”Text-fil” Object-modul ”Text-fil” Ladd-modul ”Text-fil” sum: push ... call sum ... subrutin huvudprogram Assemblering Länkning IS1200 Datorteknik, föreläsning 4

  38. Memory Map - Minnesbild • Adressrymd • Hur stor är adressrymden • Vilka adresser används och till vad • RWM, ROM, IO etc IS1200 Datorteknik, föreläsning 4

  39. RWM-minne (RAM-minnet) • Hur stort (fysiskt) RWM-minne finns det • På vilka adresser finns RWM • Var finns det egna programmet • Var finns de egna data • Var finns den egna stacken • Finns det något mer i RWM, och vad IS1200 Datorteknik, föreläsning 4

  40. +2 PC SP Nios-II: Kartbild av minnetNya adresser ht 2007 ! 7 0 0x800000 adress 0 Vad finns här ? code data RWM stack Vad finns här ? Vad finns här ? 0xFFFFFF adress 2n -1 IS1200 Datorteknik, föreläsning 4

  41. Nios: Kartbild av minnet Hex-Adress MEM / IO 0 - 7FF boot_monitor_rom 860-87F uart_0 800000-FFFFFF ext_ram, 128 kByte ? IS1200 Datorteknik, föreläsning 4

  42. Assembler-direktiv, exempel .include ”fil.ext” # infogar fil.ext .data # nu kommer datareservationer .text # programkod .global main # main blir synlig globalt (”public”) .align 3 # nästa adress ska vara delbar med 23 B: .string ”hej 17” # lagra ASCII-sträng C: .ascii ”tjoho” # lagra ASCII D: .asciz ”plusnul” # ASCII avslutad med NUL TAL: .byte 0x01 # reservera 1 byte med värde 0x01 .equ ExcBase ,0x20020 # def. symbol namn TIME: .word 0x5957 # 32 bitar med värde KOLON: .byte ’:’ #ascii för kolon lagras IS1200 Datorteknik, föreläsning 4

  43. IS1200 Datorteknik Laboration 1 Nios assembler IS1200 Datorteknik, föreläsning 4

  44. Mall för macropseudo-instruction .macro CLR reg # case sensitive ! MOVI \reg, 0x0 # not case sensitive !? .endm Effekten av detta är att man kan använda en ny instruktion, CLR rA, för att nollställa register rA Utmaning: Skriv ett macro för BTST dreg, sreg, index som gör BitTeST på en bit i register sreg dvs skriver 1 till dreg om utpekad bit är 1 eller skriver 0 till dreg om utpekad bit är 0 ”index” anger index för den bit som ska testas (0—31) IS1200 Datorteknik, föreläsning 4

  45. Var ska macro infogas? Definitionen av varje makro ska finnas i texten, innan det används. Egna makron ska stå i början av filen innan koden som använder makrona och sen kommer koden för själva programmet Egna makron är case sensitive Varning för att ”överta” andras makron IS1200 Datorteknik, föreläsning 4

  46. Huvudprogram loop: movia r4,TIME # parameter call PUTTIME # anrop, alt 1 movia r4, TIME # parameter movia r16, TICK # adress callr r16 # anrop, alt 2 movia r4,1000 # parameter call DELAY # anrop br loop # ovillk. hopp IS1200 Datorteknik, föreläsning 4

  47. HEXASC IN-parameter i r4 4 bitar = en hexadecimal siffra ? 7 bitar = ASCII för en hexadecimal siffra UT-parameter i r2 IS1200 Datorteknik, föreläsning 4

  48. HEXASC Bin --> ASCII = hex 0000 --> 011 0000 = 0 0001 --> 011 0001 = 1 0010 --> 011 0010 = 2 0011 --> 011 0011 = 3 0100 --> 011 0100 = 4 0101 --> 011 0101 = 5 0110 --> 011 0110 = 6 0111 --> 011 0111 = 7 1000 --> 011 1000 = 8 1001 --> 011 1001 = 9 1010 --> 100 0001 = A 1011 --> 100 0010 = B 1100 --> 100 0011 = C 1101 --> 100 0100 = D 1110 --> 100 0101 = E 1111 --> 100 0110 = F Algoritm? För dessa kan man göra så här ... För dessa kan man göra så här ... IS1200 Datorteknik, föreläsning 4

  49. IN-parameter i r4 TICK Finns nu given i C-kod 4 st NBCD-kodade siffror minne 31 15 0 7 0 - + Adressen, TIME, till den plats i minnet där aktuell tid finns lagrad IS1200 Datorteknik, föreläsning 4

  50. TICK Exempel på räkning NBCD NBCD NBCD NBCD = TIME 0000 0000 0000 1001 = 00:09 0000 0000 0001 0000 = 00:10 ... 0000 0000 0101 1001 = 00:59 0000 0001 0000 0000 = 01:00 ... 0000 1001 0101 1001 = 09:59 0001 0000 0000 0000 = 10:00 ... 0101 1001 0101 1001 = 59:59 0000 0000 0000 0000 = 00:00 IS1200 Datorteknik, föreläsning 4

More Related