2 June 2015 2G1518, föreläsning 4, ht2006 (D2)1 2G1518 Datorteknik Föreläsning 4 Programutveckling, Intro till lab 1 Kursboken, kapitel 1, 4, 5 och 8 ht.

Slides:



Advertisements
Liknande presentationer
Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Advertisements

Anders Sjögren Lagringsklasser •en variabel i C har två attribut –type( int, float, char..... ) –lagringsklass( auto, extern, register, static ) •lagringsklassens.
Programstruktur: C för enchipsdatorer
Funktioner och programorganisation
Algoritmer och data strukturer -Länkade listor
#include void fun(char s[]) { int i=-1; while(s[++i]!=0) { if('a'
PC-teknik Repetition enligt önskemål som inkommit via mail. (täcker alltså inte alla moment i kursen)
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
23 August 2014 IS1200 Datorteknik vt09, föreläsning 10, (E och I mfl)1 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory.
February 8, 2008 IS1200/2G1518 Datorteknik, föreläsning 4 vt2008 (E)1 IS1200 Datorteknik Föreläsning 4 Programutveckling, Intro till lab 1 Kursboken, kapitel.
2G1502 Datorteknik allmän kurs Föreläsning 4 Programutveckling Något om bussar.
C-programmering ID120V William Sandqvist Länkad lista
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Programmeringsteknik K och Media
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 13: I/O-system.
Tentamensdags och lab 3…. Större program delas normalt upp i flera filer/moduler vilket har flera fördelar:  Programmets logiska struktur när man klumpar.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Pekare och speciell programstruktur i inbyggda system
Pointers. int a=5; int f(int b) { a--; b++; return b; } int main() { int a=3; printf("%d,",f(a)); printf("%d",a); return 0; }
Vektorer (klassen Vector) Sortering
Deklarera en struct som kan användas för att representera en rät linje Använd den I main för att deklarera en variabel som du initierar så att den representerar.
Programmeringsteknik för Media1 & K1
William Sandqvist C:s minnesmodell.
Modulär programutveckling
Anders Sjögren Pekare. Anders Sjögren Skapa ett program som byter plats på två heltal Pekare.
Träning 13 Makroprogrammering
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Integrera mp3 i hotpotatoes.  Se hur test-övningen kommer att se ut: N1_Audio_01.htm
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Namnrum, räckvidd och rekursion Linda Mannila
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Anders Sjögren ANSI - standard ?. Anders Sjögren ANSI - standard ? Om man skriver ett bra C-program och kompilerar fram ”exe”-filen så vore det ju trevligt.
INTRODUKTION TILL PROGRAMMERING
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 5 ( ) INNEHÅLL: -Metoder.
31 March 2015IS1200 Datorteknik, förel 101 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory Access 3. Byte-code i JAVA.
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
31 March 2015 IS1200 Datorteknik ht2009 föreläsning 2, (D2)1 IS1200 Datorteknik Föreläsning 2 Vi bygger en processor Kursboken, valda delar av kapitel.
Cacheminnen: skrivning ● Träff ● Skrivbuffert ● Miss.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Föreläsning 1 Om kursen Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Anders Sjögren Filer - långtidslagring. Anders Sjögren Filtyper i DOS talet ett ( intx=1; ) lagrat i en –textfil, (en sekvens av tecken ( bytes )) enligt.
F6 - Pekare 1 Programmeringsteknik, 4p vt-00 Pekare & adresser Alla variabler är knutna till en viss adress i minnet int i; adressen till denna fås med.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 9: Implementering av underprogram Aktiveringsposter Exekveringsstacken Implementera dynamisk räckvidd.
3 April 2015 IS1500 Datorteknik o k, föreläsning CE - F41 IS1500 Datorteknik och komponenter Föreläsning CE F4 Programutveckling & Intro till lab 1, nios2time.
ITM1 Kapitel 8 Datastrukturer Grundläggande datavetenskap, 4p Utgående från boken Computer Science av: J. Glenn Brookshear.
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Gruppövning 0.
Föreläsning2 Operativsystem.
William Sandqvist Funktionsbibliotek När man utvecklat en funktion så långt att den är "färdigutvecklad" kan man lika gärna spara den på.
Jonny Karlsson PROCESSPROGRAMMERING Föreläsning 8 ( ) Innehåll: -Exekveringstrådar.
William Sandqvist Datorteknik övning 1 Introduktion till assemblerprogrammering av Nios II William Sandqvist
Anders Sjögren Data (i primärminnet) som en länkad lista datatypen för varje element i listan är en struktur, post ( struct )
1 June G1518, Förel 10, ht2005 (D3/CLMDA)1 2G1518 Datorteknik, ht 2005 version för D3 och CLMDA Föreläsning Processorkonstruktion 2. DMA, Direct.
1 June G1502, Föreläsning 9, vt2004 för IT1 2G1502 Datorteknik allmän kurs Föreläsning 9 1. Processorkonstruktion 2. DMA, Direct Memory Access 3.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
10 June G1518, föreläsning 3, vt2007 (E/I/CLMDA)1 2G1518 Datorteknik Föreläsning 3 Metoder / subrutiner Kursboken, valda delar av kapitel 4 vt 2007.
Anders Sjögren Enkelt program med funktion /* two_func.c - a program that uses two functions in one file */ /* from Stephen Prata C Primer Plus ISBN
14 July 2015 IS1200/2G1518 Datorteknik, föreläsning 2, ht2007 (D2)1 IS1200 Datorteknik Föreläsning 2 Vi bygger en processor Kursboken, valda delar av kapitel.
1 IS1200 Datorteknik, övning 4 Maskinnära programmering med C Förberedelser till hemlaboration 1.
31 July 2015IS1200 Datorteknik, förel 101 IS1200 Datorteknik Föreläsning Processorkonstruktion 2. DMA, Direct Memory Access 3. Byte-code i JAVA.
William Sandqvist Datorteknik övning 3 stackhantering subrutin som anropar subrutin programutveckling.
4 August 2015 IS1200 Datorteknik föreläsning CE - F91 IS1200 Datorteknik Övning 10.
11 August 2015IS1200 Datorteknik, föreläsning 41 IS1200 Datorteknik Föreläsning 4 Programutveckling, Intro till lab 1 Kursboken, kapitel 1, 4, 5 och 8.
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Anders Sjögren Funktioner något in och något annat ut.
KPP053, HT2015 MATLAB, Föreläsning 4
Python.
Grundläggande datavetenskap, 4p
Presentationens avskrift:

2 June G1518, föreläsning 4, ht2006 (D2)1 2G1518 Datorteknik Föreläsning 4 Programutveckling, Intro till lab 1 Kursboken, kapitel 1, 4, 5 och 8 ht 2006 – vt 2007 (period 2-3) För D-2

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

2 June G1518, föreläsning 4, ht2006 (D2)3 Litteraturhänvisningar Kursboken avsnitt 4.5 och 4.6 avsnitt avsnitt 1.5

2 June G1518, föreläsning 4, ht2006 (D2)4 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

2 June G1518, föreläsning 4, ht2006 (D2)5 Editering Exempel 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 */ 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 */... }

2 June G1518, föreläsning 4, ht2006 (D2)6 Laboration nios2time Utskrift av tid varje sekund 59:57 59:58 59:59 00:00 00:01.

2 June G1518, föreläsning 4, ht2006 (D2)7 Editering Exempel 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 */ }

2 June G1518, föreläsning 4, ht2006 (D2)8 Pekare och adress (så där i förbifarten) inta;/* reservera plats */ intb=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*/

2 June G1518, föreläsning 4, ht2006 (D2)9 Editering Redigering av C-kod C-program Text-fil fil.c, kan redigeras med en editor

2 June G1518, föreläsning 4, ht2006 (D2)10 Kompilering: översätter C-kod till Assembler-kod C-program Text-fil Ass-program Text-fil kompilering / översättning fil.c, kan redigeras med en editor fil.s, kan redigeras med en editor Kommando: n2compile fil.c (med debugger: n2compile -d fil.c)

2 June G1518, föreläsning 4, ht2006 (D2)11 Editering Exempel på Assembler-kod.include ”minfil.s".data.align2# nästa adress delbar med 4 TIME:.word0x5957.text.globalmain# måste tas med (gemener).globalputtime, tick, delay# behövs ej main:moviar4, TIME moviar16, puttime callrr16 moviar4, TIME calltick moviar4, 1000 calldelay brmain puttime:ret# tom subrutin tick:ret# tom subrutin delay:ret# tom subrutin.end# sluta översätt

2 June G1518, föreläsning 4, ht2006 (D2)12 Assemblering; översätter Ass-kod till objekt-modul Ass-program Text-fil Object-modul ”Text-fil” Assemblering / översättning fil.s fil.o, (relokerbar ?) Kommando: n2asm fil.s (med debugger: n2asm -d fil.s)

2 June G1518, föreläsning 4, ht2006 (D2)13 Exempel på objekt-modul fil.obj Detta är en binär fil. Den är obegriplig om man öppnar den med en vanlig editor. Information i filen:.textVarje 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..datainformation om vilka variabelplatser som ska reserveras, för initierade variabler krävs att värdet finns lagrat.bssför oinitierade variabler 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

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

2 June G1518, föreläsning 4, ht2006 (D2)15 Länkning av Nios-program ger extrafil: fil.dump - en listning Object-modul ”Text-fil” Ladd-modul ”Text-fil” fil.o fil.elf Kommando: n2link fil.o Object-dump Text-fil Extra fil fil.objdump

2 June G1518, föreläsning 4, ht2006 (D2)16 Exempel på fil.objdump (endast vissa delar) fil.elf: file format elf32-littlenios2 Disassembly of section.text: fc :.text.globalmain.globalputtime, tick, delay main:moviar4, TIME 200fc:010000b4 movhir4, : addir4,r4,612 moviar16, puttime 20104:040000b4 movhir16, :84004b04 addir16,r16,300 callrr c:803ee83a callrr16 moviar4, TIME 20110:010000b4 movhir4, : addir4,r4,612 calltick 20118: call20130 moviar4, c: movhir4, :2100fa04 addir4,r4,1000 calldelay 20124: call20134 brmain 20128:003ff406 br200fc c : puttime:ret 2012c:f800283a ret : tick:ret 20130:f800283a ret : delay:ret 20134:f800283a ret

2 June G1518, föreläsning 4, ht2006 (D2)17 Object-modul ”Text-fil” Ladd-modul ”Text-fil” fil.obj fil.c.o Kommando: n2link fil.obj Object-dump Text-fil En till Extra fil fil.srec srec-dump Text-fil fil.objdump Länkning av Nios-program ger extrafil: fil.srec

2 June G1518, föreläsning 4, ht2006 (D2)18 Fil i srec-format lämplig att dumpa via serieport till måldator. Exempel på (del av) fil i srec-format S00B00006A77642E D4... S B B00843AE83E80BF S B FD S FA F43F003A2800F8A3 S A2800F83A2800F804FDFFDE150200DF30... S DF S S A059

2 June G1518, föreläsning 4, ht2006 (D2)19 Exempel på srec-format taget från fil.srec 5 fält Record Type: S0, S2, S8 Record Length: 2 char (1 byte) tells number of char on line excluding type and length Address:2-, 3-, or 4-byte spec of address (type tells size of address) Data: Checksum: 8-bit field: 1’s complement of sum of all except Type (skip carry?) S0: Header S2: data with 3-byte address S8: Termination of S2-records Checksumman 59 kan fås ur inversen av A0=A6, inv blir = S00B00006A77642E D4 S B B00843AE83E80BF S A2800F83A2800F804FDFFDE150200DF30 S DF S S A059

2 June G1518, föreläsning 4, ht2006 (D2)20 Object-modul ”Text-fil” Ladd-modul ”Text-fil” fil.o fil.elf Kommando: n2link fil.obj Object-dump Text-fil En till Extra fil fil.srec srec-dump Text-fil fil.objdump fil.nm Sym-table Text-fil Länkning av Nios-program ger extrafil: fil.nm - namelist

2 June G1518, föreläsning 4, ht2006 (D2)21 Exempel på fil.nm (endast vissa delar) … fc T main c t puttime t tick t delay D _data d TIME # 0x264=612.

2 June G1518, föreläsning 4, ht2006 (D2)22 Object-modul ”Text-fil” Ladd-modul ”Text-fil” fil.o fil.elf Kommando: n2link -d fil.o Object-dump Text-fil En till Extra fil fil.srec srec-dump Text-fil fil.objdumpfil.nm Sym-table Text-fil Debugger Script-fil fil.gdb Kompilering+länkning av Nios-prog med flagga -d ger extrafil: fil.gdb

2 June G1518, föreläsning 4, ht2006 (D2)23 Länkning - kombinerar flera Object-moduler till Laddmodul Ladd-modul ”Text-fil” Länkning Object-modul ”Text-fil” fil1.o Object-modul ”Text-fil” fil2.o Object-modul ”Text-fil” fil3.o Object-modul ”Text-fil” filn.o... Kommando: n2link fil1.o fil2.o fil3.o … filn.o fil.elf, vilket namn? fil1.elf (sista i kommandot som ska innehålla ”main:”)

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

2 June G1518, föreläsning 4, ht2006 (D2)25 Laddning Laddmodul laddas till minnet Ladd-modul ”fil.elf” Minne Load (and run/go) fil.elf Var i minnet ? (nära 0x20000) Kommando: nios2-download -g fil.elf GO LOAD

2 June G1518, föreläsning 4, ht2006 (D2)26 Minne Körning / Exekvering Programmet körs av CPU:n Körning / Exekvering Var i minnet ? Länkaren väljer Kommando: nios2-download –g fil.elf (utan debugger/simulator) PC +4 GO

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

2 June G1518, föreläsning 4, ht2006 (D2)28 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 till En enda ”jättefil” som kompileras och länkas ihop till en laddmodul

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

2 June G1518, föreläsning 4, ht2006 (D2)30 C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” C-program Text-fil Ladd-modul ”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 !

2 June G1518, föreläsning 4, ht2006 (D2)31 C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” C-program Text-fil Ladd-modul ”Text-fil” C-program Text-fil C-program Text-fil ”include” Vår labmiljö ! Ingen textfil genereras Kompilering direkt till objekt-modul

2 June G1518, föreläsning 4, ht2006 (D2)32 Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” ”include” Ass-program Text-fil Ass-program Text-fil Ass-program Text-fil

2 June G1518, föreläsning 4, ht2006 (D2)33 JAVA-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” C-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” Ass-program Text-fil Object-modul ”Text-fil” Pascal-program Text-fil Ass-program Text-fil Object-modul ”Text-fil” Separatkompilering med blandad kod

2 June G1518, föreläsning 4, ht2006 (D2)34 Blandad kod C-kod och Assembler-kod /* Function File */ int sum (int x, int y) /* ”public */ { return (x + y); } /* Main File */ int a, b, res extern int sum (int a, int b); … res = sum (a,b); # 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 # subroutine.global sum … sum: add reg2, reg4, reg5 return

2 June G1518, föreläsning 4, ht2006 (D2)35 res=sum(a,b) Ass-program Text-fil Object-modul ”Text-fil” int sum(x,y) Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” huvudprogram function Länkning Assemblering Kompilering

2 June G1518, föreläsning 4, ht2006 (D2)36 res=sum(a,b) Ass-program Text-fil Object-modul ”Text-fil” sum: push... Object-modul ”Text-fil” Ladd-modul ”Text-fil” huvudprogram subrutin Länkning Assemblering Kompilering

2 June G1518, föreläsning 4, ht2006 (D2)37 call sum Object-modul ”Text-fil” int sum(x,y) Ass-program Text-fil Object-modul ”Text-fil” Ladd-modul ”Text-fil” huvudprogram function Länkning Assemblering Kompilering

2 June G1518, föreläsning 4, ht2006 (D2)38 call sum... Object-modul ”Text-fil” Object-modul ”Text-fil” Ladd-modul ”Text-fil” huvudprogram Länkning Assemblering sum: push... subrutin

2 June G1518, föreläsning 4, ht2006 (D2)39 Memory Map - Minnesbild  Adressrymd  Hur stor är adressrymden  Vilka adresser används och till vad  RWM, ROM, IO etc

2 June G1518, föreläsning 4, ht2006 (D2)40 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

2 June G1518, föreläsning 4, ht2006 (D2)41 Nios-II: Kartbild av minnet adress 0 adress 2 n RWM data code stack 0x x?FFFF PC +2 SP Vad finns här ?

2 June G1518, föreläsning 4, ht2006 (D2)42 Nios: Kartbild av minnet Hex-AdressMEM / IO 0 - 7FFboot_monitor_rom Fuart_ FFFFext_ram, 256 kByte

2 June G1518, föreläsning 4, ht2006 (D2)43 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 2 3 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

2 June G1518, föreläsning 4, ht2006 (D2)44 2G1518 Datorteknik Laboration 1 Nios assembler

2 June G1518, föreläsning 4, ht2006 (D2)45 Mall för macro pseudo-instruction.macroCLR reg MOVI\reg, 0x0.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

2 June G1518, föreläsning 4, ht2006 (D2)46 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

2 June G1518, föreläsning 4, ht2006 (D2)47 Huvudprogram loop:moviar4,TIME# parameter callPUTTIME# anrop, alt 1 moviar4, TIME# parameter moviar16, TICK# adress callrr16# anrop, alt 2 moviar4,1000# parameter callDELAY# anrop brloop# ovillk. hopp

2 June G1518, föreläsning 4, ht2006 (D2)48 HEXASC ? 4 bitar = en hexadecimal siffra 7 bitar = ASCII för en hexadecimal siffra IN-parameter i r4 UT-parameter i r2

2 June G1518, föreläsning 4, ht2006 (D2)49 HEXASC Bin --> ASCII = hex > = > = > = > = > = > = > = > = > = > = > = A > = B > = C > = D > = E > = F Algoritm? För dessa kan man göra så här...

2 June G1518, föreläsning 4, ht2006 (D2)50 TICK 4 st NBCD-kodade siffror IN-parameter i r4 minne Adressen, TIME, till den plats i minnet där aktuell tid finns lagrad -+-+

2 June G1518, föreläsning 4, ht2006 (D2)51 TICK Exempel på räkning NBCD NBCD NBCD NBCD = TIME = 00: = 00: = 00: = 01: = 09: = 10: = 59: = 00:00

2 June G1518, föreläsning 4, ht2006 (D2)52 PUTTIME 4 st NBCD-kodade siffror IN-parameter i r4 minne 7 0 Skriv ut i ordning 1 2 : 3 4 Skriv ett tecken: plocka fram 4 bitar -> HEXASC -> PUTCHAR PUTCHAR = nr_uart_txchar Adressen, TIME, till den plats i minnet där aktuell tid finns lagrad -+-+

2 June G1518, föreläsning 4, ht2006 (D2)53 DELAY förslag till flödesschema N := startN := N - 1N = 0 ? IN-hopp UT-hopp JA NEJ K := msekK := K - 1K = 0 ? IN-hopp UT-hopp JA NEJ IN-parameter i r4 inner loop outer loop tuning value

2 June G1518, föreläsning 4, ht2006 (D2)54 Assembler-direktiv, exempel.include ”fil.ext”#infogar fil.ext.data#nu kommer datareservationer.text#nu kommer programkod.global main#main blir synlig globalt.align 2#nästa adress ska vara delbar med 2 2.align 4#nästa adress ska vara delbar med 2 4 TIME:.word 0x5957#reservera 1 word med värde.equ MyVal, 0x5957#def. symbol namn KOLON:.byte ’:’#ascii för kolon lagras

2 June G1518, föreläsning 4, ht2006 (D2)55 Tillgängliga ass-rutiner Rutiner för serieport #skriv ett tecken”PUTCHAR” call nr_uart_txchar# skriver ut från r4 #läs ett tecken”GETCHAR” call nr_uart_rxchar# läser in till r4 Vid anrop av nr_uart_txchar och nr_uart_rxchar ska r5 innehålla adress till porten dvs i vårt fall 0x860 (uart0)

2 June G1518, föreläsning 4, ht2006 (D2)56 Programexempel - subrutin ta fram sum av val1 och val2 # Exempel på C-kod torde kunna vara... int val1, val2, result; /* variabler */... int sum (int val1, int val2); /* prototyp */... result = sum ( val1, val2); /* anrop */

2 June G1518, föreläsning 4, ht2006 (D2)57 Programexempel - subrutin ta fram sum av val1 och val2 # int val1, val2, result; # kan översättas till (av kompilator).data.align2#adress multipel av 2 2 val1:.word0 val2:.word0 result:.word0...

2 June G1518, föreläsning 4, ht2006 (D2)58 anrop av sum (val1, val2) inparametrar på stack #result = sum ( val1, val2) kan översättas till.text moviar5, val2# adress till val2 i r5 ldwr5, 0(r5) # värde val2 till r5 från minnet pushr5# val2 läggs på stacken moviar4, val1# adress till val1 i r4 ldwr4, 0(r4)# värde val1 till r4 från minnet pushr4# val1 läggs på stacken movia r1, sum# subrutin-adress till ett register callrr1# anropa subrutin moviar1, result# adress till result i r1 stwr2, 0(r1)# returvärde i r2 kopieras till minnet

2 June G1518, föreläsning 4, ht2006 (D2)59 Programexempel - subrutin ta fram sum av val1 och val2 int sum (int val1, int val2); { int tmp; tmp = val1 + val2; return (tmp); } kan översättas till (kompileras till)

2 June G1518, föreläsning 4, ht2006 (D2)60 int sum (int val1, int val2) inparametrar på,stack sum:popr2# kopiera val1 till r2 popr8# kopiera val2 till r8 addr2, r2, r8# addera va2 till r2 foo:ret# PC := r31