Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

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

Hvordan en prosessor arbeider, del 1

En oppsummering (og litt som står igjen)

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.

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

Forelesning 5. Diverse komponenter/større system

INF1400 Kap4rest Kombinatorisk Logikk

Oppgaver uke 1: Løsningsforslag

Oppgaver til kodegenerering etc. INF-5110, 16. mai, 2014

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

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

Forelesning Instruksjonstyper Kap 5.5

Python: Løkker. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Repetisjon Novice Videregående Python PDF

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3

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

Dagens tema: Enda mer MIPS maskinkode

if (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap.

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

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

Læringsmål og pensum. if (be): else (not_to_be):

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

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

INF-103 Fra brukergrensesnitt til maskinvare

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

Læringsmål og pensum. v=nkiu9yen5nc

Oppgave 1 - Linux kommandolinje (%)

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse. INF 5110, 10/5-2011, Stein Krogdahl

I denne oppgaven skal vi repetere litt Python-syntaks, det er en god blanding av alle tingene du har lært i Python til nå.

Programmering Høst 2017

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse

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

MAT1030 Plenumsregning 1

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

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

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

Kap 2: Løkker og lister

Dagems temaer. kapittel 4 i Computer Organisation and Architecture. av CPU: von Neuman-modellen. Transfer Language (RTL) om hurtigminne (RAM)

IN uke 1. Komme i gang med programmering

Python: Variable og beregninger, input og utskrift. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Plenumsregning 1. MAT1030 Diskret Matematikk. Repetisjon: Algoritmer og pseudokode. Velkommen til plenumsregning for MAT1030

Oppgaver til kodegenerering etc. INF-5110, 12. mai, 2015

MAT1030 Diskret Matematikk

Litt om Javas class-filer og byte-kode

Introduksjon til DARK assembly

Programmeringsspråket C

Python: Valg og betingelser. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Del 1 En oversikt over C-programmering

Velkommen til INF2100

hvor mye hurtigminne (RAM) CPU en kan nyttiggjøre seg av. mens bit ene betraktet under ett kalles vanligvis et ord.

Minnehåndtering i operativsystemer

Kap. 8 del 1 kodegenerering INF5110 Vår2007

Hangman. Level. Introduksjon

Øvingsforelesning i Python (TDT4110)

Dark Stakkmaskin. Aritmetiske instruksjoner

Kodegenerering, del 2: Resten av Kap. 8 pluss tilleggsnotat (fra kap. 9 i ASU ) INF5110 V2007

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

Dagems temaer INF ! Fra kapittel 4 i Computer Organisation and Architecture. ! Kort om hurtigminne (RAM)

Plenumsregning 1. Kapittel 1. Roger Antonsen januar Velkommen til plenumsregning for MAT1030. Repetisjon: Algoritmer og pseudokode

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

INF-5110 Oppgaver kodegenerering etc. INF-5110, vår 2011

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

TDT4110 IT Grunnkurs Høst 2015

Pekere og referanser.

Del 4 Noen spesielle C-elementer

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

Velkommen til plenumsregning for MAT1030. MAT1030 Diskret matematikk. Repetisjon: Algoritmer og pseudokode. Eksempel fra boka. Eksempel

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

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet (kalt kildekoden): Hva er kompilering?

Hangman. Steg 1: Velg et ord. Steg 2: Gjett en bokstav. Sjekkliste. Sjekkliste. Introduksjon

Kapittel 1 En oversikt over C-språket

Forelesning 14. Rekursjon og induksjon. Dag Normann februar Oppsummering. Oppsummering. Beregnbare funksjoner

Oppsummering fra sist

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

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

IN uke 1. Komme i gang med programmering

! Sentrale begreper er adresserbarhet og adresserom. ! Adresserbarhet: Antall bit som prosessoren kan tak samtidig i én operasjon

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september

MAT1030 Diskret matematikk

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

Oppgave 1 Hva tror du følgende program skriver ut til terminalen? Diskuter med gruppen.

TDT4160 Datamaskiner Grunnkurs Gunnar Tufte

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

Synkron logikk. Sekvensiell logikk; to typer:

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

SIE 4005, 9/10 (4. Forelesn.)

Fortsetelse Microarchitecture level

Et lite oppdrag i bakgrunnen

Mer om representasjon av tall

C# (.Net) Tema: Loops (Løkker) Leksjon 7 Kap 18

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

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab

Dagens tema. Hva er kompilering? Anta at vi lager dette lille programmet doble.rusc (kalt kildekoden): Hva er kompilering?

Transkript:

Uke 34 Uke 35 Uke 36 Uke 37 Uke 38 Uke 39 Uke 40 Uke 41 Uke 42 Uke 43 Uke 44 Uke 45 Uke 46 Uke 47 sikkerhet datanett programvare digitale kretser

Prosessoren II Kort oppsummering Løkker og tester Mer om assemblerkode Hvordan programmere maskinkode (multiplikasjon som eksempel) Hva kan vi programmere nå? Instruksjoner og data Array-er / lister [Englander kap 6]

Little Man Computer LMC (= «Little Man Computer») Minne med 100 celler for program og data Fire registre: Accumulator Program counter Instruction register Address register Aritmetisk enhet Input for å lese tall Output for å skrive tall og tegn

Alle instruksjonene Alle LMC-instruksjonene Kode Navn Beskrivelse 0xx HLT Stopper 1xx ADD Adderer angitt minneverdi med akkumulatoren 2xx SUB Subtraherer minneverdi fra akkumulatoren 3xx STA Lagrer akkumulatoren i minnet 4xx (Ikke i bruk) 5xx LDA Henter verdi fra minnet til akkumulatoren 6xx BRA Hopper til angitt adresse 7xx BRZ Hopper hvis akkumulatoren er 0 8xx BRP Hopper hvis akkumulatoren er 0 901 INP Leser verdi; svar i akkumulatoren 902 OUT Skriver ut verdien i akkumulatoren 922 OTC Skriver ut ASCII-tegn (ikke i boka)

Hvordan skrive tegn? Et eksempel: Å skrive tegn Dette programmet skriver Hei. Hvert av de tre tegnene hentes inn i akkumulatoren og skrives ut som tegn: 507 922 508 922 509 922 0 72 101 105 Men... for å kunne angi tegnene må vi benytte ASCII-tabellen.

ASCII-tabellen ASCII

ASCII-tabellen ASCII 10 LF 39 ' 47 / 62 > 93 ] 124 32 40 ( 48 0 63? 94 ^ 125 } 33! 41 ) : 64 @ 95 _ 126 ~ 34 " 42 * 57 9 65 A 96 35 # 43 + 58 : : 97 a 36 $ 44, 59 ; 90 Z : 37 % 45-60 < 91 [ 122 z 38 & 46. 61 = 92 \ 123 {

Tekst er lettere å lese enn tall Numerisk kode Alle programmer er lagret som tall når de kjøres, men vi mennesker synes dette ikke er så enkelt: Det er ikke så lett å huske alle tallkodene. Det er problematisk å holde oversikt hva som ligger i hvilke celler. Det er fort gjort å skrive et cellenummer feil. Om vi endrer programmet, må vi oftest endre veldig mange instruksjoner.

Tekst er lettere å lese enn tall Assemblerkode Assemblerkode er løsningen. Den oversettes til numerisk kode før programmet kjøres. I tillegg kan vi sette navn på celler i minnet. Vi kan også skrive kommentarer. START LDA H OTC LDA e OTC LDA i OTC END HLT H DAT 72 // = H e DAT 101 // = e i DAT 105 // = i Spesifikasjonen DAT (= «data») er ingen instruksjon, men en angivelse av at det skal settes av en celle med en gitt startverdi.

Løkker er nødvendig i de fleste programmer Hopp Instruksjonen BRA Denne instruksjonen (BRA = «Branch») med kode 6xx gjør at programkjøringen hopper til et annet sted. Dette gjør det mulig å lage løkker. LDA v10 // Start med 10 TELL OUT // Skriv ut SUB v1 // og tell ned. BRA TELL // Gjenta HLT // Stopp v1 DAT 1 // Konstanten 1 v10 DAT 10 // Konstanten 10

Løkker er nødvendig i de fleste programmer Betinget hopp Vi har ofte situasjoner der vi ønsker å hoppe noen ganger, men ikke alltid. Instruksjonen BRP Denne instruksjonen (BRP = «Brach if positive») har kode 8xx. Den hopper hvis akkumulatoren inneholder en verdi 0; hvis ikke, gjør den ingenting. LDA v10 // Start med 10 TELL OUT // Skriv ut SUB v1 // og tell ned. BRP TELL // Gjenta om >= 0 HLT // Stopp v1 DAT 1 // Konstanten 1 v10 DAT 10 // Konstanten 10

Løkker er nødvendig i de fleste programmer Instruksjonen BRZ Denne instruksjonen (BRZ = «Branch if zero») har kode 7xx. Den hopper hvis akkumulatoren inneholder verdien 0; ellers gjør den ingenting.

Hva om vi ikke har noen egnet instruksjon? Multiplikasjon Vi ønsker å multiplisere to tall. 1 Har vi en instruksjon som gjør det? 2 Kan vi oppnå samme resultat med én eller flere andre instruksjoner? Vi vet at a b = b + b + + b }{{} a ganger Da kan vi lage en løkke med addisjoner for å få svaret.

Hva om vi ikke har noen egnet instruksjon? En skisse Det kan være lurt å skissere programmet med «kvasi-kode» først: 1 Les inn a og b. 2 Start med resultatverdi 0. 3 Gå i løkke a ganger: Øk resultatverdien med b. 4 Skriv ut resultatverdien.

Hva om vi ikke har noen egnet instruksjon? Den ferdige koden kan se slik ut (men det finnes flere muligheter): START INP // int(input("")) STA a // a = INP // int(input("")) STA b // b = LDA v0 // 0 STA Res // Res = LOOP LDA a // while a!= 0: BRZ EXIT // SUB v1 // a - 1 STA a // a = LDA Res // Res ADD b // + b STA Res // Res = BRA LOOP // EXIT LDA Res // Res) OUT // print( HLT // a b Res DAT DAT DAT v0 DAT 0 v1 DAT 1

Hvilke elementer av Python kan vi nå lage tilsvarende LMC-kode for? Hva kan vi programmere? Variabler (med DAT) Regning Legge sammen (med ADD) Trekke fra (med SUB) Gange (med kode vist forrige uke) Dele (med kode fra ukeoppgave) Tilordning (med STA) If-tester (med BRZ og BRP) While-løkker (med BRA, BRZ og BRP)

En grunnsetning hos Turing og von Neumann: Instruksjoner er også data Instruksjoner og data Programmet INP // Les inn STA x // verdien x. ADD x // Doble den. OUT // Skriv den ut. x DAT 0 // Variabel x har en feil: Det mangler en HLT-instruksjon. Hva skjer da når vi leser inn verdien 600? Hva med 101? Hvordan vet prosessoren om en celle i minnet inneholder en instruksjon eller en tallverdi? Det vet den ikke!

En grunnsetning hos Turing og von Neumann: Instruksjoner er også data Selvmodifiserende kode Når instruksjoner kodes som tall, kan vi endre programmet vårt mens det kjøres. Skriv LDA txt BRZ Ferdig OTC LDA Skriv ADD v1 STA Skriv BRA Skriv Ferdig HLT v1 DAT 1 // Konstant 1 txt DAT 86 // V DAT 101 // e DAT 108 // l DAT 107 // k DAT 111 // o DAT 109 // m DAT 109 // m DAT 101 // e DAT 110 // n DAT 33 //! DAT 0 // Slutt

En array er et sammenhengende minneområde Array-er En array (som i stor grad tilsvarer en liste i Python) er et sammenhengende område av celler i minnet. Vi bruker et heltall (en indeks) til å hente riktig element. Eksempel Dette lille Python-programmet forteller hvor mange dager en gitt måned har (forutsatt at det ikke er skuddår). m_leng = [ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ] m = int(input("")) print(m_leng[m])

En array er et sammenhengende minneområde m_leng = [ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ] m = int(input("")) print(m_leng[m]) kan vi skrive for LMC ved å bruke selvmodifiserende kode: INP // Les m. ADD LDA_i // Lag LDA STA hent // i koden. hent DAT 0 // Plass til LDA. OUT // Skriv svaret. HLT // Ferdig. LDA_i LDA m_leng m_leng DAT 0 DAT 31 // Jan DAT 28 // Feb DAT 31 // Mar DAT 30 // Apr DAT 31 // Mai DAT 30 // Jun DAT 31 // Jul DAT 31 // Aug DAT 30 // Sep DAT 31 // Okt DAT 30 // Nov DAT 31 // Des

Vanligvis ønsker vi ikke å blande instruksjoner og data Oppsummering I dag holder man vanligvis et skarpt skille mellom instruksjoner og data. Det er lett å gjøre feil og skape kaos. Moderne prosessorer har fjernet behovet. Men det finnes unntak: Når man lager virus. Operativsystemet og kompilatorer må betrakte brukernes program som data.