ISO Dagens tema. Tegn. Uttrykk. I Minila lagres kun heltall, men de kan tolkes som tegn. Det siste om Minila.

Like dokumenter
INF2100. Dagens tema: Flink-maskinen Litt datamaskinhistorie. Registre og lagre. Instruksjoner. Flass-koden

Datamaskinenes historie Menneskene har alltid prøvd å lage maskiner for å løse sine problemer.

Dagens tema: INF2100. Utvidelser av Minila array-er. tegn og tekster. Flass- og Flokkode. prosedyrer. Prosjektet struktur. feilhåndtering.

Dagens tema. Datamaskinenes historie. De første moderne datamaskiner. Løsning. Menneskene har alltid prøvd å lage maskiner for å løse sine problemer.

Dagens tema. Rask-maskinen. Rasko-kode Raskas-kode. Litt datamaskinhistorie Registre og lagre Instruksjoner

En overikt. Dagens tema. Datamaskinenes historie. Rask-maskinen Litt datamaskinhistorie Registre og lagre Instruksjoner. Rasko-kode.

Hvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt:

Dagens tema: Maskinkode. Litt datamaskinhistorie Hva er maskin- og assemblerkode? x86-prosessoren Programkode og variabler

Hovedansvarlig. Symbolgenerator. Tregenerator. Litt mer kompliserte setninger med betingelser

INF-103. Velkommen til. Første time. Fra brukergrensesnitt til maskinvare. eller Datamaskinen på tvers. Andre time

INF-103 Fra brukergrensesnitt til maskinvare

Datamaskinenes historie Når, hvor og hvorfor ble de første datamaskiner laget? Hvordan har utviklingen gått? Hva inneholder en datamaskin?

Forhistorien Menneskene har alltid prøvd å lage maskiner for å løse sine problemer. Dagens tema

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Datamaskinenes historie Når, hvor og hvorfor ble de første datamaskiner laget? Hvordan har utviklingen gått? Hva inneholder en datamaskin?

Forhistorien Menneskene har alltid prøvd å lage maskiner for å løse sine problemer. Dagens tema INF1070 INF1070 INF1070

Dagens tema INF1070. Vektorer (array er) Tekster (string er) Adresser og pekere. Dynamisk allokering

Vektorer. Dagens tema. Deklarasjon. Bruk

Datamaskinen LC-2. Dagens tema. Tall i datamaskiner Hvorfor kan LC-2 lagre tall i intervallet ? Hvorfor er det akkurat celler i lageret?

Dagens tema. Datamaskinen LC-2 En kort repetisjon. Binære tall Litt om tallsystemer generelt. Binære tall. Heksadesimale og oktale tall

Velkommen til INF2100

Dagens tema INF1070. Vektorer (array-er) Tekster (string-er) Adresser og pekere. Dynamisk allokering

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

IN 147 Program og maskinvare

Offentlig utvalg for punktskrift, OUP Norsk standard for 8-punktskrift punktskrift 24. oktober 2004 sist endret

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?

2 Parser. 1 Skanner. 4 Kodegenerator. 3 Sjekker. Oversikt Datamaskinhistorie x86 Kodegenerering Setninger Uttrykk.

Velkommen til INF2100. Bakgrunnen for INF2100. Hva gjør en kompilator? Prosjektet. Jeg er Dag Langmyhr

Velkommen til INF2100 Jeg er Dag Langmyhr

Digital representasjon

Digital representasjon

Velkommen til INF2100

Velkommen til INF2100

Hva er kompilering? Dagens tema. En kompilator En kompilator leser Minila koden og lager Flok koden.

Oversikt Deklarasjoner Typesjekk Programmering Datamaskinhistorie x86 Kodegenerering

Prosessoren. Bakgrunnen Innhold LMC. Assemblerkode Oppsummering instruksjonene [Englander kap 6] Hva inneholder den? Hvordan utføres instruksjonene?

Digital representasjon

Spørsmål: Hvilken datamaskin var den første? Svaret Det avhenger av hva man mener med en datamaskin. Ifi. Spørsmålet Analoge Digitale Videre

Hvordan fant man på å lage datamaskiner?

INF okt. 2004

Dagens tema: INF2100. Syntaksanalyse. Hva annet gjør en kompilator? Sjekking av navnebruk. Testutskrifter

Dagens tema: 12 gode råd for en kompilatorskriver

Spørsmål: Hvilken datamaskin var den første? Svaret. Det avhenger av hva man mener med en datamaskin. Spørsmålet Analoge Digitale Videre

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

Råd nr 1: Start nå! Det tar typisk timer å programmere Del 1 om man ikke har gjort slikt før. Dagens tema:

Spørsmål: Hvilken datamaskin var den første? Svaret. Det avhenger av hva man mener med en datamaskin. Spørsmålet Analoge Digitale Videre

Velkommen til INF2100

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Spørsmål: Hvilken datamaskin var den første? Svaret. Det avhenger av hva man mener med en datamaskin. Spørsmålet Analoge Digitale Videre

Spørsmål: Hvilken datamaskin var den første?

Dagens tema: Semantisk sjekking. Maskinkode. Hvordan finne deklarasjoner? Hvordan programmere sjekking av riktig navnebruk?

INF Repetisjon: Hvordan bygge treet og analysere? 8. september Typisk situasjon. De problematiske syntaks-diagrammene

Dagens tema. LC-2 LC-2 er en «ekstrem-risc»; den har 16 instruksjoner og 3 adresseringsmåter.

( ) ( ( ) ) 2.12 Løsningsforslag til oppgaver i avsnitt

ITPE/DATS 2400: Datamaskinarkitektur og Nettverk

Hvordan en prosessor arbeider, del 1

Syntaksanalyse. Dagens tema: Språkdiagrammene Jernbanediagrammene er et ypperlig utgangspunkt for å analysere et program: INF2100 INF2100 INF2100

ﺪ ﻩ ﻋﺍ ﻮﹶ ﻭ ﻗ ﻪ ﹾﻘ ﹾﻟ ﻔ ﺍ ﹺﻝ ﻮ ﹸﺃ ﺻ ﹸ ﻣ ﺔ ﻮﹸ ﻈ ﻣ ﻨ $ ﺡﺮﺷ! " ' (# $% & )*! +,!* -

Oppgaver MAT2500. Fredrik Meyer. 11. oktober 2014

Spørsmål: Hvilken datamaskin var den første?

Innhold. 2 Kompilatorer. 3 Datamaskiner og tallsystemer. 4 Oppsummering. 1 Skjerm (monitor) 2 Hovedkort (motherboard) 3 Prosessor (CPU)

Introduksjon til DARK assembly

Del 1 En oversikt over C-programmering

E 1996-gutter. B 1998-gutter

Testobservator for kjikvadrattester

DRIFTSANALYSER 2012/2013 FORELØBIGE RESULTATER

TDT4110 IT Grunnkurs Høst 2016

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

Unicode. Unikt vakkert eller unisont håpløst? En vandring gjennom tegnkodingens historie. Dag Lamgmyhr, Ifi/UiO Ark 1 av 23

Målet med dette notatet er å dokumentere at det er funnet løsmasser ved grunnen og å dokumentere miljøgiftkonsentrasjonen i sedimentene.

Løsningsforslag til øving 5 TFE4105 Digitalteknikk og Datamaskiner Høsten 2006

TDT4110 IT Grunnkurs Høst 2016

Fjord Forsøksstasjon Helgeland AS

Kap. 8 del 1 kodegenerering INF5110 Vår2007

Pensumoversikt - kodegenerering. Kap. 8 del 1 kodegenerering INF5110 v2006. Hvordan er instruksjonene i en virkelig CPU? Arne Maus, Ifi UiO

Programmeringsspråket C

Kapittel 1 En oversikt over C-språket

! " # $ % & ^Pv`!$ x âîv7ç È'Ç È b j k Æ' z{3 b jkæ b ÇÈÉÊ&( )! c q r É. xy+ - Êlm l D E ` &! D E â î #" ' #$ '#! v( D/Ev A B x y&?

ib. 1 ^^HE Lokalitetesklassifisering ^ Kobbe v i <: og Furuho men Oppdrett AS

Overordnet maskinarkitektur. Maskinarkitektur zoomet inn. I CPU: Kontrollenheten (CU) IT1101 Informatikk basisfag, dobbeltime 11/9

TDT4110 IT Grunnkurs Høst 2015

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

Handi-Lift EA7 Målskjema

Datamaskinens oppbygning

Mål. Pensum. TDT4110 Informasjonsteknologi grunnkurs: Tema: Unntak (exceptions) (Kap 6) Dictionaries (Kap. 9) Terje Rydland - IDI/NTNU

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Kodegenerering del 3: Tilleggsnotat fra AHU Samt litt om class-filer og byte-kode INF5110 V2007. Stein Krogdahl, Ifi UiO

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

ITPE/DATS 2400: Datamaskinarkitektur og Nettverk

PDF created with pdffactory Pro trial version

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Ë < # ;<z O < HSCÉ XÚÎ

Norsk informatikkolympiade runde

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Godkjenning av møteinnkalling

Programmeringsspråket C Del 3

Ã Ô ½ Ë Ð Ô Ø Ô Ø Ð ØÖÙ ØÙÖ

TDT4160 OG IT2201 DATAMASKINER GRUNNKURS EKSAMEN

Transkript:

April 1995, DFL, Ifi/UiO Dagens tema Dagens tema Det siste om Minila og tekster Flink maskinen Litt datamaskinhistorie Registre og lagre Instruksjoner Flok kode Flass kode I Minila lagres kun heltall, men de kan tolkes som tegn. (Tabellen finnes på http://www.uio.no/ studier/emner/matnat/ ifi/inf2100/h06/dok/ ISO8859 table.pdf.) 0 000 00 1 001 01 2 002 02 3 003 03 4 004 04 5 005 05 6 006 06 7 007 07 8 010 08 9 011 09 10 012 0A 11 013 0B 12 014 0C 13 015 0D 14 016 0E 15 017 0F 16 020 10 17 021 11 18 022 12 19 023 13 20 024 14 21 025 15 22 026 16 23 027 17 24 030 18 25 031 19 26 032 1A 27 033 1B 28 034 1C 29 035 1D 30 036 1E 31 037 1F ISO 8859 1 04 64 100 96 140 128 200 160 240 32 0! " # $ % & ( ) * +,. / 0 1 2 3 4 5 6 7 8 9 : ; < = >? 20 33 041 21 34 042 22 35 043 23 36 044 24 37 045 25 38 046 26 39 047 27 40 050 28 41 051 29 42 052 2A 43 053 2B 44 054 2C 45 055 2D 46 056 2E 47 057 2F 48 060 30 49 061 31 50 062 32 51 063 33 52 064 34 53 065 35 54 066 36 55 067 37 56 070 38 57 071 39 58 072 3A 59 073 3B 60 074 3C 61 075 3D 62 076 3E 63 077 3F @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ 40 65 101 41 66 102 42 67 103 43 68 104 44 69 105 45 70 106 46 71 107 47 72 110 48 73 111 49 74 112 4A 75 113 4B 76 114 4C 77 115 4D 78 116 4E 79 117 4F 80 120 50 81 121 51 82 122 52 83 123 53 84 124 54 85 125 55 86 126 56 87 127 57 88 130 58 89 131 59 90 132 5A 91 133 5B 92 134 5C 93 135 5D 94 136 5E 95 137 5F a b c d e f g h i j k l m n o p q r s t u v w x y z { } ~ 60 97 141 61 98 142 62 99 143 63 100 144 64 101 145 65 102 146 66 103 147 67 104 150 68 105 151 69 106 152 6A 107 153 6B 108 154 6C 109 155 6D 110 156 6E 111 157 6F 112 160 70 113 161 71 114 162 72 115 163 73 116 164 74 117 165 75 118 166 76 119 167 77 120 170 78 121 171 79 122 172 7A 123 173 7B 124 174 7C 125 175 7D 126 176 7E 127 177 7F 80 129 201 81 130 202 82 131 203 83 132 204 84 133 205 85 134 206 86 135 207 87 136 210 88 137 211 89 138 212 8A 139 213 8B 140 214 8C 141 215 8D 142 216 8E 143 217 8F 144 220 90 145 221 91 146 222 92 147 223 93 148 224 94 149 225 95 150 226 96 151 227 97 152 230 98 153 231 99 154 232 9A 155 233 9B 156 234 9C 157 235 9D 158 236 9E 159 237 9F ª «± ² ³ µ ¹ º» ¼ ½ ¾ A0 161 241 A1 162 242 A2 163 243 A3 164 244 A4 165 245 A5 166 246 A6 167 247 A7 168 250 A8 169 251 A9 170 252 AA 171 253 AB 172 254 AC 173 255 AD 174 256 AE 175 257 AF 176 260 B0 177 261 B1 178 262 B2 179 263 B3 180 264 B4 181 265 B5 182 266 B6 183 267 B7 184 270 B8 185 271 B9 186 272 BA 187 273 BB 188 274 BC 189 275 BD 190 276 BE 191 277 BF À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö Ø Ù Ú Û Ü Ý Þ ß 192 300 C0 193 301 C1 194 302 C2 195 303 C3 196 304 C4 197 305 C5 198 306 C6 199 307 C7 200 310 C8 201 311 C9 202 312 CA 203 313 CB 204 314 CC 205 315 CD 206 316 CE 207 317 CF 208 320 D0 209 321 D1 210 322 D2 211 323 D3 212 324 D4 213 325 D5 214 326 D6 215 327 D7 216 330 D8 217 331 D9 218 332 DA 219 333 DB 220 334 DC 221 335 DD 222 336 DE 223 337 DF à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ø ù ú û ü ý þ ÿ 224 340 E0 225 341 E1 226 342 E2 227 343 E3 228 344 E4 229 345 E5 230 346 E6 231 347 E7 232 350 E8 233 351 E9 234 352 EA 235 353 EB 236 354 EC 237 355 ED 238 356 EE 239 357 EF 240 360 F0 241 361 F1 242 362 F2 243 363 F3 244 364 F4 245 365 F5 246 366 F6 247 367 F7 248 370 F8 249 371 F9 250 372 FA 251 373 FB 252 374 FC 253 375 FD 254 376 FE 255 377 FF kan også leses inn: Uttrykk Konstant kan angis som konstanter: Et tegn Variabel inchar inint + * /

Programmet tegn.min prog var c; begprog outtext "Skriv et tegn: "; c := inchar; outtext "et "; outchar c; outtext " har kode "; outint(1) c; outline; outtext "et 1 har kode "; outint(1) 1 ; outline; endprog Dette programmet demonstrerer bruk av tegn: > flok tegn.flok Skriv et tegn: A et A har kode 65 et 1 har kode 49 En tekst "Abc" lagres som en array av tegn: 3 65 98 99 0 1 2 3 Dessuten regnes tegn med kode 0 som «tomme tegn». Programmet tekst.min prog var s[6], i; begprog outtext "Gi en tekst: "; intext s; i := 0; while i <= s[0] do outtext "s["; outint(1) i; outtext "] er "; outint(3) s[i]; outline; i := i+1; endwhile; s[2] := 0; outtext "Nå er teksten "; outchar " ; outtext s; outchar " ; outline; endprog

Dette programmet demonstrerer tekster: > flok tekst.flok Gi en tekst: Abc s[0] er 6 s[1] er 65 s[2] er 98 s[3] er 99 s[4] er 0 s[5] er 0 s[6] er 0 Nå er teksten "Ac" To nye setninger gjør det mulig å lese inn og skrive ut tekster: intext leser resten av linjen. outtext skriver ut alle tegn som ikke er 0. Setning Tekst Variabel := Uttrykk intext Navn outchar Uttrykk outint ( Tall ) Uttrykk outline outtext Navn Tekst If-setning Repeat-setning While-setning call Navn with Uttrykk into Variabel Charles Babbage Charles Babbage Datamaskinenes historie Menneskene har alltid prøvd å lage maskiner for å løse sine problemer. Midt på 1800 tallet var problemet tabeller med feil. Charles Babbage konstruerte sin Difference Engine som kunne lage tabeller automatisk ved å regne ut polynomer. (Den ble først ferdig i 1991.) Han arbeidet også med en Analytical Engine som skulle bli en generell beregningsmaskin. The difference engine på Science Museum i London

Tidlige datamaskiner De første moderne datamaskiner Problemet i 1930 årene var kanoner. Det er mulig å beregne en prosjektilbane, men det er mye arbeid for en matematiker. U.S. Army Ordnance Department Ballistic Research Laboratory trengte data for dusinvis av nye kanoner. Løsning Lag arbeidsbeskrivelse, og la egne «beregnere» gjøre jobben. Fra en eldre utgave av Webster s Dictionary: computer n, one that computes; specif: an automatic electronic machine for performing calculations Tidlige datamaskiner Problem Hver bane tok opptil 20 timer å beregne (selv med elektrisk bordregnemaskin), og man trengte 2 4000 ulike baner for hver kanon. Løsning Lag en maskin som gjør dette automatisk. Moore School of Electrical Engineering ved universitetet i Pennsylvania gjorde det med penger fra Ballistic Research Laboratory. Resultatet ble som ble ferdig i 1945. Den målte 2½ 1 30 m, veide 30 tonn og inneholdt 18 000 radiorør. Den kunne beregne en kulebane på drøyt 10 s. Oppbyggingen av Tanken var å kopiere en menneskelig beregner. Den har Aritmetisk enhet («ALU») tilsvarte regnemaskinen med de fire regneartene: + Regnemaskinen har et tall for videre beregning; datamaskinen har et register. Minnet tilsvarte arket med mellomresultater. Datamaskinen kunne overføre innholdet av registeret til eller fra en celle i minnet. Programmet tilsvarte beregnerens arbeidsbeskrivelse. Det skulle følges helt slavisk.

Programmet Et program for datamaskinen inneholdt de samme elementene som beregnerens arbeidsbeskrivelse: Aritmetiske operasjoner var mulig i de fire regneartene; svaret kom i registeret. Mellomlagring av data skjedde ved at registeret ble kopiert til en angitt celle i minnet. Hopp til en angitt instruksjon var nødvendig for å kunne gå i løkker. Tester i forbindelse med hopp var typisk på om registeret var < 0, = 0 eller > 0. Programmene ble etter hvert kodet som tall (mens ble kodet med kabler). Den aller første «debugging» Også de første datamaskinene hadde feil («bugs»). Den 9. september 1945 kl 15.45 fant man feilen i relé nr 70 i panel F i en Mark II Aiken elektromekanisk datamaskin og foretok den første «debugging». Flink maskinen Flink maskinen Flink maskinen To internlagre: Datalageret kan lagre heltall. Instruksjonslageret brukes til å lagre instruksjoner. Hver celle består av tre deler: Func angir hvilken operasjon det er snakk om. Adrs gir adresser. Corr gir adressekorreksjon med C registeret. (Senere) Seks registre: I aktuell verdi C korrigeringsregister (omtales senere) PC programteller CF Siste Func del av instruksjon CA Siste Adrs del av instruksjon CC Siste Corr del av instruksjon

Programutførelsen Programutførelsen utføres alltid én og én: PC = 0; I = 0; C = 0; stoppet = false; while (! stoppet) { CF = Func[PC]; CA = Adrs[PC]; CC = Corr[PC]; PC = PC + 1; } if (CF == 0) stoppet = true; else utfør instruksjonen (CF,CA,CC) (Denne uken kan vi regne at addr er CA.) 0 STOP Stopp 1 1 LDI I = ISTORE[addr]; 2 2 STI ISTORE[addr] = I; 2 5 ADDI I = I+ISTORE[addr]; 2 26 ADDC C = C+ISTORE[addr]; 2 6 SUBI I = I ISTORE[addr]; 2 7 MULI I = I*ISTORE[addr]; 10 8 DIVI I = I/ISTORE[addr]; 15 27 INC I = «tegn fra tastaturet»; 50 9 INI I = «tall fra tastaturet»; 100 29 INT ISTORE[addr+1,... ] = «tekst fra tastaturet»; 150 28 OUTC System.out.print((char)I); 25 10 OUTI System.out.print(I); 50 30 OUTT «skriv teksten i addr» 100 11 OLIN System.out.println(); 50 12 JMP Hopp til addr 1 13 JRC C = PC; Hopp til addr 1 14 JLTI Hopp til addr om I<0 1 15 JLEI Hopp til addr om I<=0 1 16 JEQI Hopp til addr om I==0 1 17 JNEI Hopp til addr om I!=0 1 18 JGTI Hopp til addr om I>0 1 19 JGEI Hopp til addr om I>=0 1

Eksempel på Flink kode Et eksempel 20 SETI I = addr; 1 21 INCI I = I+addr; 1 22 SETC C = addr; 1 23 INCC C = C+addr; 1 24 CIC C = I; 1 25 CCI I = C; 1 Dette programmet skriver ut tallet 4: 20 4 0 10 1 0 11 0 0 0 0 0 Flok koden Flok koden Flok koden Kjøring For å få Flink maskinen til å utføre koden, må vi «pakke den tekstlig inn» i såkalt Flok kode: #! /store/bin/flink 4 0 20 4 0 10 1 0 11 0 0 0 0 0 1. Først: antall instruksjoner og antall heltall. 2. Så: instruksjonene. 3. Til sist: heltallene (men ingen her). Nå kan vi kjøre programmet: > flok skriv4.flok 4 Total execution time: 102

Flass koden Flass kode Flass koden Eksempel: abs.flass # Leser et tall og beregner absoluttverdien. For å gjøre det enklere å skrive Flok kode, har man funnet på Flass. Da kan man bruke navn istedenfor tallkoder bruke navn på datalokasjoner sette navn på instruksjoner (for å hoppe dit) Start INI # Les tallet JGEI Skriv # Hvis negativt, STI Var # lagre i Var. SETI 0 # Beregn SUBI Var # 0 Var. Skriv OUTI 1 # Skriv ut tallet. OLIN Slutt STOP # Ferdig. Var INTG 0 # Flass koden Flass koden Oversikt laget av programmet flass Kjøringen går slik: > flass abs.flass Dette er Flass (version 3.02) Leser koden første gang...ok Leser koden andre gang...ok > flok abs.flok Inint: 34 34 Total execution time: 202 > flok abs.flok Inint: 17 17 Total execution time: 207 # Leser et tall og beregner absoluttverdien. Code 0: 9 0 0 Start INI # Les tallet Code 1: 19 5 0 JGEI Skriv # Hvis negativt, Code 2: 2 0 0 STI Var # lagre i Var. Code 3: 20 0 0 SETI 0 # Beregn Code 4: 6 0 0 SUBI Var # 0 Var. Code 5: 10 1 0 Skriv OUTI 1 # Skriv ut tallet. Code 6: 11 0 0 OLIN Code 7: 0 0 0 Slutt STOP # Ferdig. Data 0: 0 Var INTG 0 #

Minila, Flink, Flok og Flass Oppsummering I Minila kan vi også håndtere tegn og tekster. Vi har sett på instruksjonene og registrene i Flink. Flink maskinen leser filer med Flok kode. Det er lettere å skrive assemblerkoden Flass enn maskinkoden Flok.