IN 147 Program og maskinvare

Like dokumenter
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

Dagens tema. Mer MIPS maskinkode. Maske-operasjoner Skift-operasjoner Lesing og skriving Pseudo-instruksjoner Mer om funksjonskall Registeroversikt

Dagens tema: Enda mer MIPS maskinkode

Forelesning 5. Diverse komponenter/større system

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

Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

Datamaskinens oppbygning

INF1400 Kap4rest Kombinatorisk Logikk

Oppbygningen av en datamaskin Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

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

Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

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

Hvordan en prosessor arbeider, del 1

Programmeringsspråket C

Oversikt over IN147(A):

Del 1 En oversikt over C-programmering

Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

IN 147 Program og maskinvare

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

Den siste dagen. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Veien videre... Eksamen

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

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

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

En oppsummering (og litt som står igjen)

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

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

Dagens tema. Kort repetisjon om rutiner. Programmering i C Variable og adresser. Vektorer. Tekster. Preprosessoren. Separat kompilering

Forelesning Datatyper Kap 5.2 Instruksjonsformat Kap 5.3 Flyttall App B

Alle hele tall g > 1 kan være grunntall i et tallsystem.

IN 147 Program og 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 INF1070 INF1070 INF1070

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

Programmeringsspråket C Del 2

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

Kapittel 1 En oversikt over C-språket

IN 147 Program og maskinvare

Dagens tema. Rutiner i LC-2 Og her er tilsvarende kode for LC-2: Funksjoner i C Her er det samme programmet i C: Kort repetisjon om rutiner

Programmeringsspråket C Del 2

Tallsystemer. Tallene x, y, z og u er gitt ved x = 2, y = 2, z = 4 og u = 2. Dermed blir =

Programmeringsspråket C Del 2

INF-103 Fra brukergrensesnitt til maskinvare

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

Alle hele tall g > 1 kan være grunntall i et tallsystem.

Mer om representasjon av tall

Forelesning Instruksjonstyper Kap 5.5

IN 147 Program og maskinvare. Velkommen til IN 147. Program- og maskinvare

Oppsummering av Uke 3. MAT1030 Diskret matematikk. Binære tall. Oppsummering av Uke 3

Kapittel 9: Følge Instruksjoner Prinsipper for Datamaskinens Virkemåte

TDT4160 Datamaskiner Grunnkurs Gunnar Tufte

Tallsystemer. Tallene x, y, z og u er gitt ved x = 2, y = 2, z = 4 og u = 2. Dermed blir =

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

Programmeringsspråket C

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

Dagens temaer. Fra kapittel 4 i Computer Organisation and Architecture. Kort om hurtigminne (RAM) Organisering av CPU: von Neuman-modellen

Dagens tema. Nyttige programmer Programmet make. Hvis én fil endres, hvilke filer må da kompileres på nytt?

TALL. Titallsystemet et posisjonssystem. Konvertering: Titallsystemet binære tall. Det binære tallsystemet. Alternativ 1.

Velkommen til INF2100 Jeg er Dag Langmyhr

Dagens tema. Mer om C Enkle datatyper Sammensatte datatyper: Vektorer og matriser Tekster Mengder Strukturer Unioner Ringbuffere

Programmeringsspråket C

Dagens tema. Nyttige programmer Programmet make. Flyt-tall Representasjon av flyt-tall. Standarden IEEE 754. Systemkall i Unix

Programmeringsspråket C Del 2. Michael Welzl

Dagens tema C, adresser og pekere

Ark 3 av 26. printf("i adresse %08x ligger b med verdien %d.\n", &b, b); printf("i adresse %08x ligger a med verdien %d.

INF1040 Digital representasjon TALL

ITPE/DATS 2400: Datamaskinarkitektur og Nettverk

IN 147 Program og maskinvare

Norsk informatikkolympiade runde

MAT1030 Forelesning 3

Datamaskinens virkemåte

Dagens program. Operativsystemer Prosesser og systemkall i UNIX Hente prosessens nummer Starte prosesser Vente på prosesser Utføre programmer

Kapittel 3: Litt om representasjon av tall

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

Maskinvaredelen av INF 103: oversikt og innhold (1)

Datasystemer og informasjonssystemer

I Kapittel 2 lærte vi om tall i alternative tallsystemer, i hovedsak om binære tall, oktale tall og heksadesimale tall.

INF2270. Datamaskin Arkitektur

Dagens tema. Makroer Ofte gjentar man kodelinjer når man skriver assemblerkode. Da kan det lønne seg å definere en makro:

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

Dagens temaer. Architecture INF ! Dagens temaer hentes fra kapittel 3 i Computer Organisation and

Valg av kontaktpersoner/tillitsvalgte. MAT1030 Diskret matematikk. Oppsummering av kapittel 2. Representasjon av hele tall

Tall. Binære regnestykker. Binære tall positive, negative heltall, flytende tall

Dagens tema INF1070. Makroer. Sanntidsprogrammering. Avbrudd. Bruker- og supermodus. Blanding av C og assemblerkode. Selvmodifiserende kode

TDT ITGK - Hardware. Kapittel 9: Følge Instruksjoner - Prinsipper for Datamaskinens Virkemåte. Terje Rydland - IDI/NTNU

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

IN 147 Program og maskinvare

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

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

INF2270. Datamaskin Arkitektur

IN 147 Program og maskinvare. Vanlige feil ved bruk av pekere Feilsøking Debuggere

Debugging. Tore Berg Hansen, TISIP

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

Velkommen til INF2100

Forelesning Adresseringsmodi Kap 5.4

Husk å registrer deg på emnets hjemmeside!

Tall. Posisjons-tallsystemer. Representasjon av heltall. Tall positive, negative heltall, flytende tall. Tekst ASCII, UNICODE XML, CSS

Transkript:

Dagens tema: Tallsystemer (P&H: 4.1 4.2) Generelt Binære, oktale og heksadesimale tall Tall, bit og byte Negative tall Assemblerspråk (P&H: 3.1 3.3 + A.9) Datamaskinens oppbygging Enkel aritmetikk Flytting av data Programmene spim og xspim Mål Kunne kjøre sitt første assemblerprogram Husk! Les beskjedene på kursets hjemmeside. Ark 1 av 25 Forelesning 31.1.2001

Eksempelet fra forrige uke #include <stdio.h> #include <stdlib.h> int main(void) { FILE *f; int nc[256], i, c; for (i = 0; i <= 255; ++i) nc[i] = 0; f = fopen("min.fil","r"); if (f == NULL) { printf("kan ikke lese min.fil!\n"); exit(1); } c = fgetc(f); while (c!= EOF) { ++nc[c]; c = fgetc(f); } fclose(f); for (i = 0; i <= 255; ++i) { if (nc[i] > 0) { if ((32<=i && i<=126) 161<=i) printf(" %c ", i); else printf("%3d", i); printf(":%4d\n", nc[i]); } } return 0; } Forelesning 31.1.2001 Ark 2 av 25

Posisjonelle tallsystemer I posisjonelle tallsystemer angir hvert siffers posisjon hvilken vekt det skal ha: 107 = 1 100 + 0 10 + 7 1 = 1 10 2 + 0 10 1 + 7 10 0 Her er grunntallet 10, men må det være slik? Ikke-desimale tallsystemer Tid angis i et 60-tallsystem: Klokken 10.27.49 På dansk (og fransk) lever ennå restene av et 20-tallsystem: «ni-og-halv-fems»: 9 + 4 1 2 20 = 99 Forelesning 31.1.2001 Ark 3 av 25

Gamle engelske hulmål økte med en faktor 2: 2 gills = 1 chopin 3dl 2 chopins = 1 pint 2 pints = 1 quart 2 quarts = 1 pottle 2 pottles = 1 gallon 2 gallons = 1 peck 2 pecks = 1 demibushel 2 demibushels = 1 bushel 2 bushels = 1 kilderkin 2 kilderkins = 1 barrel 2 barrels = 1 hogshead 2 hogsheads = 1 pipe 2 pipes = 1 tun 1160 l Forelesning 31.1.2001 Ark 4 av 25

Det binære tallsystemet Siden det er spesielt enkelt å lagre bit («binary digit») benyttes det binære tallsystemet i datamaskiner. I det binære tallsystemet er grunntallet 2 og sifrene 0 og 1. 0 ti 0 to 8 ti 1000 to 1 ti 1 to 9 ti 1001 to 2 ti 10 to 10 ti 1010 to 3 ti 11 to 11 ti 1011 to 4 ti 100 to 12 ti 1100 to 5 ti 101 to 13 ti 1101 to 6 ti 110 to 14 ti 1110 to 7 ti 111 to 15 ti 1111 to «Formel»: For en base Base er verdien av det i-te tallet d d Base i Norsk språkråd mener at det bør hete bit (med lang i). Forelesning 31.1.2001 Ark 5 av 25

Byte I en datamaskin kan man ikke operere med enkelt-bit; i stedet slås de oftest sammen i grupper på 8 og 8 kalt en byte. Her kan man lagre tall fra 0 til 255: 0 0 0 0 0 0 0 0 =0 ti 0 0 0 0 0 0 0 1 =1 ti. 1 1 1 1 1 1 1 0 = 254 ti 1 1 1 1 1 1 1 1 = 255 ti Ord På de fleste maskiner slår man også flere byte sammen til større enheter kalt ord («word»). På MIPS-maskiner er disse 4 byte eller 32 bit, og man kan da lagre tall opptil 4 294 967 295: 00000000000000000000000000000000 to =0 ti 00000000000000000000000000000001 to =1 ti. 11111111111111111111111111111110 to = 4 294 967 294 ti 11111111111111111111111111111111 to = 4 294 967 295 ti Ordet byte er et ordspill; bit kan bety en liten matbit, og da blir bite en hel munnfull. På norsk skal man helst bruke ordet oktett. Forelesning 31.1.2001 Ark 6 av 25

Hex-tall En ulempe ved binære tall er at de tar så stor plass når man skriver dem. Derfor benyttes ofte heksadesimale tall med grunntall 16 ved innlesning og utskrift. Man slår da sammen 4 og 4 bit; dette gir en verdi 0 15 som angis med et hex-siffer: 0, 1, 2,..., 9, A, B, C, D, E, F Dette er kun en notasjon som skal gjøre livet enklere for oss mennesker. Eksempel 10010011101 to = 0100 1001 1101 =49D hex Oktale tall Tidligere brukte man ofte oktale tall med grunntall 8. Her slår man sammen 3 og 3 bit. Forelesning 31.1.2001 Ark 7 av 25

C I programmeringsspråket C skriver man hexog oktale tall slik: 0x1A0 =1A0 hex 01765 = 1765 åtte Negative tall Man kan også lagre negative tall i det binære tallsystemet. Det vanligste formatet for dette heter toer-komplement («two s complement»). For å negere et tall, må man da gjøre følgende: 1. Snu alle bit-ene i tallet (0 1). 2. Legg til 1. Eksempel 13 ti = 0 0 0 0 1 1 0 1 13 ti = 1 1 1 1 0 0 1 1 Forelesning 31.1.2001 Ark 8 av 25

Tallområde Når man lagrer negative tall, kan man ikke lagre så store tall lenger. I én byte kan man for eksempel lagre tall mellom 128 og 127: 0 1 1 1 1 1 1 1 = 127 ti 0 1 1 1 1 1 1 0 = 126 ti. 0 0 0 0 0 0 0 1 =1 ti 0 0 0 0 0 0 0 0 =0 ti 1 1 1 1 1 1 1 1 = 1 ti. 1 0 0 0 0 0 0 1 = 127 ti 1 0 0 0 0 0 0 0 = 128 ti Fortegns-bit Man kan teste om tall lagret som toer-komplement er negative ved å se på det venstre bit-et. Det er alltid 0 for tall 0 og1for negative tall. Dette bit-et kalles derfor fortegns-bitet. Forelesning 31.1.2001 Ark 9 av 25

Tall med og uten fortegns-bit Hvordan vet maskinen om den har et stort positivt tall uten fortegns-bit, eller et negativt tall med fortegns-bit? Det vet den ikke! Vi må holde rede på slikt. Dette er typisk for programmering på maskinnært nivå: Maskinen lagrer og opererer på bit-mønstre. Alt ansvaret for fortolkning av bit-mønstrene ligger på programmereren. Av og til er det nyttig å tolke et bit-mønster på ulike måter. Forelesning 31.1.2001 Ark 10 av 25

Hva er en «computer»? Ordet computer var egentlig en yrkestittel. På 1930- og 40-tallet hadde man store saler hvor computere satt og regnet på bordregnemaskiner i henhold til arbeidsinstruks: 1. Gang 3.14159265 med 2.021. Skriv svaret i rute 221. 2. Hvis tallet i rute 221 er negativt, gå til punkt 17. 3. Gang tallet i rute 221 med 4 og skriv svaret i rute 222. Typiske oppgaver var å lage tabeller (sinus, logaritmer ol) og ballistiske analyser. Forelesning 31.1.2001 Ark 11 av 25

IN 147 Program og maskinvare Datamaskinens oppbygging Datamaskinen Eniac fra 1945 var 2½ 1 30 m, veide 30 tonn og inneholdt 18 000 radiorør. De første datamaskinene ble bygget over samme lest; de hadde Menneske Datamaskin «computer» Kontrollenhet Bordregner ALU Skriveark Hurtiglager Instruks Program («A LU» står for «arithmetic/logic unit».) Dagens maskiner er i hovedtrekk de samme. Forelesning 31.1.2001 Ark 12 av 25

Vårt bilde av en datamaskin ser altså slik ut: CPU RAM CPU («Central Processing Unit») er prosessoren. RAM («Random Access Memory») er maskinens hurtiglager, en samling byte. Mellom CPU og RAM er en buss med 8, 16 eller 32 ledere for data. Både programmet og data ligger i RAM; slike maskiner kalles «von Neumann»-maskiner. Forelesning 31.1.2001 Ark 13 av 25

Registre Dessuten finnes det noen lagerceller i selve prosessoren; disse kalles registre. MIPS har 35 slike: 32 mer eller mindre generelle registre kalt $0 til $31. $0 inneholder for eksempel alltid verdien 0. 2 spesielle registre til multiplikasjon og divisjon kalt hi og lo. Programtelleren kalt pc. Alle registrene har størrelse 4 byte (= 32 bit). Egentlig har den noen flere, men vi skal bare se på disse 35 i første omgang. Forelesning 31.1.2001 Ark 14 av 25

En datamaskin utfører operasjoner på en regneenhet i henhold til en kodet arbeidsinstruks. Denne arbeidsinstruksen kalles et maskinprogram og er kodet som bitmønstre. Eksempel Hva er 17 + 4? 00100000 00001000 00000000 00010001 00100000 00001001 00000000 00000100 00000001 00101000 01001000 00100000 Fordi slik kode er vanskelig å skrive og forstå for oss mennesker, er det definert et assemblerspråk som bare er en tekstlig koding av maskinspråket. En assembler oversetter fra assemblerspråk til maskinspråk. Eksempel addi $8,$0,17 addi $9,$0,4 add $9,$9,$8 Forelesning 31.1.2001 Ark 15 av 25

Assemblerspråk kontra høynivåspråk Det er en fundamental forskjell på høynivåspråk som C og Java, og et assemblerspråk som for eksempel MIPS-kode. I et høynivåspråk vet man ingenting om maskinens instruksjonssett, registre og lignende. Dette gjør programmene flyttbare. Man kan programmere raskere. I et assemblerspråk vet man nøyaktig hvilken maskinkode hver instruksjon blir oversatt til. Programmereren har full kontroll over maskinkoden. Forelesning 31.1.2001 Ark 16 av 25

RISC kontra CISC Det er to hovedretninger innen prosessorer i dag: CISC («Complex Instruction Set Computer») har mange instruksjoner (100 500) og mange varianter (1 20) av disse. Eksempler: Intel Pentium, Motorola 68040. Fordeler: Enklere å generere kode, både for programmer og mennesker. Mindre kode, både færre antall linjer og færre byte. RISC («Reduced Instruction Set Computer») har få instruksjoner (20 60) som til gjengjeld er meget raske. Eksempler: Sun Sparc, PowerPC, MIPS. Fordeler: Raskere kode. Enklere å lære for nybegynnere(?). I IN147 skal vi bruke RISC-prosessoren MIPS. Forelesning 31.1.2001 Ark 17 av 25

Enkel aritmetikk Alle prosessorer har en operator for addisjon. På MIPS heter den add: add res, reg 1, reg 2 Den setter registeret res til summen av de to registrene reg 1 og reg 2. Eksempel Hvis vi vet at $8 inneholder 17 og $9 inneholder 4, vil add $10,$8,$9 sette $10 til 21. Det finnes også en variant som summerer verdien i et register med en konstant: addi res, reg, lit (En konstant verdi kalles ofte en literal.) Forelesning 31.1.2001 Ark 18 av 25

Legge verdier i registre RISC-prosessorer trenger ingen egen instruksjon for å legge verdier i et register, siden man har addisjon og et register som alltid er 0 (nemlig $0). addi $11,$0,157 vil legge verdien 157 i register $11. Eksempel Følgende tre instruksjoner vil legge verdien 17 i $8 og 4 i $9 og så addere $8 til $9:.text addi $8,$0,17 addi $9,$0,4 add $9,$9,$8 (Direktivet.text forteller at det kommer programkode.) Forelesning 31.1.2001 Ark 19 av 25

Kjøring på xspim Vi kan simulere kjøring av denne koden ved hjelp av programmet xspim: xspim -file add-1.s (Det er vanlig i UNIX at filer med assemblerkode harnavnsomslutterpå.s.) Ved å sette programtelleren (registeret pc) til adressen til første programlinje, kan vi kjøre gjennom programmet én og én instruksjon. Det finnes også en versjon uten vinduer; den heter spim. Forelesning 31.1.2001 Ark 20 av 25

Forelesning 31.1.2001 Ark 21 av 25

Aritmetiske operasjoner MIPS har følgende operatorer for +,, og : add res, op 1, op 2 addu res, op 1, op 2 addi res, op 1, lit addiu res, op 1, lit sub res, op 1, op 2 subu res, op 1, op 2 mult op1, op 2 multu op1, op 2 div op1, op 2 divu op1, op 2 Instruksjoner hvis navn slutter på -u er beregnet på tall uten fortegns-bit, mens de andre brukes på tall med fortegns-bit. Forelesning 31.1.2001 Ark 22 av 25

Resultatet av en multiplikasjon er på 64 bit og havner i spesialregistrene hi og lo. Ved en divisjon plasseres svaret i lo og resten i hi. Ved hjelp av instruksjonene mfhi («move from hi») og mflo kan man flytte resultatet over i et vanlig register: addi $8,$0,1024 addi $9,$0,3 div $8,$9 mflo $10 mfhi $11 Nå skal innholdet av $10 være 341 og innholdet av $11 er 1. Forelesning 31.1.2001 Ark 23 av 25

Utskrift av tall i spim Simulatoren spim har en mulighet for å skrive ut og lese inn tall og tekster samt terminere kjøringen. Dette er altså noe som ikke finnes i MIPS-prosessoren, men bare i simulatoren! Følgende lille program skriver ut tallet 722 og avslutter:.text main: addi $2,$0,1 # Skriv tall. addi $4,$0,722 # Tallet er 722. syscall addi $2,$0,10 # Avslutt. syscall Forelesning 31.1.2001 Ark 24 av 25

Følgende er verdt å merke seg: syscall forventer å finne en kommandokode i $2. Koden for å skrive ut et heltall er 1. Parametre til syscall legges i $4. Alt etter en # på linjen betraktes som kommentar. Instruksjoner kan navngis ved å skrive et navn med : først på linjen. spim forventer at det finnes en main. Det lille programmet kan kjøres med kommandoen maskin navn> spim -file tall.s SPIM Version 5.8 of January 5, 1996 Copyright 1990-1994 by James R. Larus (larus@cs.wisc.edu) All Rights Reserved. See the file README for a full copyright notice. Loaded: /local/lib/spim/trap.handler 722 Forelesning 31.1.2001 Ark 25 av 25