Introduksjon til DARK assembly

Like dokumenter
Dark load-store-maskin

Dark Stakkmaskin. Aritmetiske instruksjoner

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

Forelesning ISA: IJVM Kap 4.2

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

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

INF april, 2014 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8

PXT: Micro:bit repeater

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

Kap. 8 del 1 kodegenerering INF5110 Vår2007

INF april, 2015 Stein Krogdahl Ifi, UiO. Svar på oppgaver til kap. 8. Ble lagt ut 24. april

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

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

INF1400 Kap4rest Kombinatorisk Logikk

Betinget eksekvering og logiske tester i shell

Forelesning Instruksjonstyper Kap 5.5

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

Forelesning 5. Diverse komponenter/større system

ITPE/DATS 2400: Datamaskinarkitektur og Nettverk

TDT4110 IT Grunnkurs Høst 2016

UNIVERSITETET I OSLO

Oppsummering Assemblerkode Hopp Multiplikasjon Kode og data Array Oppsummering

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

Debugging. Tore Berg Hansen, TISIP

TDT4110 IT Grunnkurs Høst 2016

MAT1030 Diskret Matematikk

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

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

MAT1030 Plenumsregning 1

ToPlayer. Introduksjon: Skrevet av: Ruben Gjerstad Eide og Kine Gjerstad Eide

TDT4110 IT Grunnkurs Høst 2015

Ta kontakt i pausen. Viktig at vi kommer i gang med dette arbeidet!

Oppgave 1 - Linux kommandolinje (%)

ToPlayer. Steg 1: Kom i gang med metodene setup og draw. Gjør dette: Introduksjon:

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

TDT4160 Datamaskiner Grunnkurs Gunnar Tufte

TDT4110 IT Grunnkurs Høst 2014

MAT1030 Diskret matematikk

INF Noen oppgaver til kap. 8

Forelesning Forgreningspredikering Kap 4.5 Superskalaritet Kap 4.5 Spekulativ utføring Kap 4.5

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.

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

Litt om Javas class-filer og byte-kode

TDT4110 IT Grunnkurs Høst 2012

INF Noen oppgaver til kap. 8

Programmering Høst 2017

Øvingsforelesning 1 Python (TDT4110)

Hvordan en prosessor arbeider, del 1

Programmeringsspråket C Del 3

Oppsummering fra sist

Her skal du lære å programmere micro:biten slik at du kan spille stein, saks, papir med den eller mot den.

(define (naer-nok-kuberot? y x) (< (abs (- (kube y) x)) 0.001)) (define (naermere-kuberot y x) (/ (+ (* y 2) (/ x (kvadrat y))) 3))

Programmeringsspråket C Del 3

Programmeringsspråket C Del 3

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

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

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

Semantikk. Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Semantikk. Semantikk. En måte å svare på: gi semantikken til språket!

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

Høst Øving 5. 1 Teori. 2 Månedskalender. Norges teknisknaturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap

Programmeringsspråket C Del 3

Steg 1: Lag bildedeklarasjon

Kap. 8 del 1 kodegenerering INF april, 2008

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

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

Det du skal gjøre i denne oppgava er først å sette opp bakgrunnen til spillet og så rett og slett å få firkanter til å falle over skjermen.

Hangman. Level. Introduksjon

Norsk informatikkolympiade runde

Øvingsforelesning i Python (TDT4110)

INF1000 undervisningen INF 1000 høsten 2011 Uke september

Kapittel 3. The fun starts

INF 1000 høsten 2011 Uke september

AVSLUTTENDE EKSAMEN I. TDT4160 Datamaskiner Grunnkurs. Torsdag 29. November 2007 Kl

Løsningsforslag til eksamen i INF2270

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

PXT: Det regner mat! Introduksjon. Steg 1: Grunnlag. Sjekkliste. Skrevet av: Helene Isnes

Tetris. Introduksjon. Skrevet av: Kine Gjerstad Eide. Lag starten på ditt eget tetris spill!

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

INF og 13. april, Stein Krogdahl, Ifi UiO

Feilmeldinger, brukerinput og kontrollflyt

EKSAMEN I TDT4160 DATAMASKINER GRUNNKURS

Programmeringsspråket C

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

"Hjerneteppe!" er en huskelek hvor du skal huske stadig lengre rekker med bokstaver!

Løkker og arrayer. Løse problemer med programmering. INF1000, uke3 Geir Kjetil Sandve

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Læringsmål og pensum. v=nkiu9yen5nc

2 Om statiske variable/konstanter og statiske metoder.

Del 3. Pekere RR 2016

Verden. Introduksjon. Skrevet av: Kine Gjerstad Eide og Ruben Gjerstad Eide

Soloball. Introduksjon. Steg 1: En roterende katt. Sjekkliste. Skrevet av: Geir Arne Hjelle

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

TDT4105 IT Grunnkurs Høst 2016

Kap. 8 kodegenerering INF april, 2009

Løsningsforslag eksamen TDT4160 høsten 2005

Bygg et Hus. Steg 1: Prøv selv først. Sjekkliste. Introduksjon. Prøv selv

Dagens tema: Enda mer MIPS maskinkode

Del 4 Noen spesielle C-elementer

PG4200 Algoritmer og datastrukturer Forelesning 5 Implementasjon av lister

Transkript:

Introduksjon til DARK assembly Magnus Jahre Institutt for datateknikk og informasjonsvitenskap

2 Plan Assembly vs. Java Dark stakkmaskin Oversikt over stakkmaskinen Dark stakkmaskin eksempel Dark Load-Store maskin Oversikt over Load-Store maskinen Aritmetikk Minnet Kontrollflyt Noen tips

3 Assembly vs. Java En linje i Java kan tilsvare flere titalls linjer i assembly Assembly krever kunnskap om den underliggende maskinen Assembly kjører bare på en gitt maskin, mens Java kan kjøre på en hvilken som helst maskin Assembly tilsvarer lavnivå instruksjoner

4 Dark stakkmaskin Alle instruksjoner manipulerer en stakk. Denne stakken fungerer på samme måte som dere kjenner fra alg.dat. og programmering. Alle operasjoner foregår på toppen av stakken. Aritmetikk foregår ved å ta vekk to øverste elementene på stakken og legge igjen resultatet. To elementer blir altså ett.

5 Aritmetikk Vanlige aritmetiske/logiske operasjoner: add sub div mul Eksempel: push 3 push 5 add ; 3 legges paa stakken ; 5 legges paa stakken ; De to over fjernes og summen pushes

6 Stakkmanipulasjon dup - Kopierer det øverste elementet og legger det på toppen. swap - Bytter om rekkefølgen av de to øverste elementene. drop - Det øverste elementet tas vekk. rot - De tre øverste verdiene roteres slik at verdien som før lå øverst, nå ligger nederst.

7 Hvordan utføre hopp? For å utføre ett hopp må man gjøre ting i to steg. Først må man gjøre en test, og så kan man hoppe etter hva slags resultat man fikk. De to øverste elementene testes. Er uttrykket sant legges 1 på stakken, 0 hvis ikke. eq - EQual ge - Greater or Equal gt - Greater Than le - Less or Equal lt - Less Than ne - Not Equal Rekkefølge: resultat nest overst stakktopp

8 Hvordan utføre hopp? - II Selve hoppet baserer seg så på testen: jfalse - Hopp hvis det ligger 0 på stakken jtrue - Hopp hvis det ligger 1 på stakken jmp - Hopp uansett Parrene eq / jtrue og ne / jfalse ekvivalente!

9 Dark stakkmaskin eksempel Vi løser Dark Min oppgaven (272) i AoC

10 Dark Load-Store arkitektur I en load-store maskin har man følgende ressurser tilgjengelig: 32 registre ($0 til og med $31), men: register 0 ($0) er alltid lik null register 1 ($1) er reservert for assembleren register 31 ($31) brukes til stakken Ett stort minne

11 Aritmetikk I - Add Syntaks add REGISTER,REGISTER,{REGISTER NUMMER} Semantikk register register + {register NUMMER} Målregisteret får summen av andre og siste verdi. ; Kodeeksempel load $2, 10 ; Last verdien 10 inn i $2 add $3, $2, 10 ; Summen av $2 og 10 legges i $3 add $4, $2, $3 ; Summen av $2 og $3 legges i $4 Hvilken verdi er nå lagret i register 4?

12 Aritmetikk II - Sub Syntaks: sub REGISTER,REGISTER,{REGISTER NUMMER} Semantikk: register register {register NUMMER} Målregisteret får differansen av det andre registeret og den siste verdien. Eksempel: sub $1, $2, $3 ; $1 = $2 - $3

13 Og så videre... Multiplikasjon, Divisjon, logiske operatorer(and, OR, SHIFT, etc.) er akkurat tilsvarende Les dokumentasjonen (AoC og It s learning) Spesielt interessante instruksjoner: inc - Inkrementerer et register med en dec - Dekrementerer et register med en Nyttig i løkker

14 Et lite eksempel OPPGAVE: r8 = (r1 * r2) + (r3 * r4) Java DARK int temp1 = r1 * r2; int temp2 = r3 * r4; r8 = temp1 + temp2; mul $5, $1, $2 mul $6, $3, $4 add $8, $5, $6

15 Minnet I - Load Syntaks: load REGISTER,{REGISTER+NUMMER NUMMER VARIABEL} Semantikk: register {mem[register+num] NUM VAR} Målregisteret får enten verdien som er angitt som et tall, innholdet i variabelen eller innholdet i minneposisjonen som man finner ut fra registeret + nummeret. Eksempel: load $4, $3+0 ; Legger innholdet i minneadresse $3 inn i register $4.

16 Minnet II - Store Syntaks: store REGISTER,{REGISTER+NUMMER VARIABEL} Semantikk: {mem[register+nummer] VARIABEL} register Registeret lagres i variabelen eller i minneposisjonen som pekes ut av registeret + nummeret. Eksempel: store $2, $3+0 ; Legger register $2 inn i minneposisjon $3. MERK: De 32 registerene i load-store maskinen er mer enn nok lagerplass i alle oppgavene i DMGK.

17 Kontrollflyt I - JMP Programmet hopper til en gitt etikett i koden. Eksempel: toppen: inc $7 jmp toppen

18 Kontrollflyt II - Betingede hopp Det finnes mange situasjoner der man bare vil hoppe i gitte situasjoner, da benytter man betingede hopp. Disse er: jeq - Jump if EQual jne - Jump if Not Equal jge - Jump if Greater or Equal jgt - Jump if Greater jle - Jump if Less or Equal jlt - Jump if Less load $3, 5 start: inc $2 jeq $2, $3, stopp jmp start stopp:

19 IF-setninger I Java og liknende språk har vi ofte behov for kunne uttrykke betingelser i form av if-setninger. Ett eksempel: Java DARK if (a>b) { a = a + b; } else { a = a - b; } etikett2: slutt: ; Merk: a=$2, b=$3 jgt $2, $3, etikett2 add $2, $2, $3 jmp slutt sub $2, $2, $3

20 WHILE-løkker Java int a = 0; while(a <= 10) { // Noe nyttig a = a + 1; } DARK ; Merk: a=$5,$6=10 add $5, $0, $0 load $6, 10 toppen: jge $5, $6, slutt ; Noe nyttig inc $5 jmp toppen slutt:...

21 FOR-løkker Java int j = 5; for(int i = 0; i <= j; i++){ // noe nyttig } DARK test: ferdig: load $5, 0 ; i=0 load $6, 5 ; j=5 jge $5, $6, ferdig ; noe nyttig inc $5 jmp test Legg merke til at assemblykoden for for-løkken er identisk med den til while-løkken på forrige foil.

22 Noen tips Husk å fjerne testdata før du validerer! Når du har fått til en darkoppgave, finner du koden din og løsningsforslag i oppgaveboken. Bruk kommentarer flittig! Begynn med et lite problem eller en del av problemet. Da slipper du å tenke på alt med en gang. Tegn stakken på et papir og finn ut hva du må gjøre før du skriver kode. Gjør det enkelt!