Dagens tema. Representasjon av mantissen En desimalbrøk: 1 1, INF1070 INF1070 INF1070 INF1070

Like dokumenter
Dagens tema INF2270. Flyt-tall (B&O H-boken 2.4, 3.14) Hvordan lagres de? Hvordan regner man med dem? Bit-fikling (B&O H-boken 2.1.

Dagens tema INF2270. Flyt tall (B&O H boken 2.2.3) Hvordan lagres de? Hvordan regner man med dem? Overflyt (B&O H boken )

Dagens tema. Representasjon av mantissen En desimalbrøk: 1 1, INF2270 INF2270 INF2270 INF2270

Dagens tema. Funksjonskall. Flyt-tall. Rekursive kall Lokale variable. Hvordan lagres de? Hvordan regner man med dem?

Dagens tema. Flyt-tall. Koding. 64-bits kode. Hvordan lagres de? Hvordan regner man med dem? Koding av instruksjoner Kodefiler Linking

Dagens tema. Flyt-tall. Koding. 64-bits kode. Hvordan lagres de? Hvordan regner man med dem? Koding av instruksjoner Kodefiler Linking

Notater: INF2270 Assembler

Dagens tema. Flyt-tall. Koding. Tegnsett. Hvordan lagres de? Hvilke egenskaper har de? Hvordan regner man med dem?

En oppsummering (og litt som står igjen)

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

Pensum Hovedtanker Selvmodifiserende Overflyt Veien videre Eksamen. Oppsummering

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

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

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

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

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

Dagens tema: Enda mer MIPS maskinkode

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

Dagens tema Programmering av x86 Flytting av data Endring av størrelse

Dagens tema INF1070. Bit fikling. Makroer. Blanding av C og assemblerkode. Mer om Core War. Dag Langmyhr,Ifi,UiO: Forelesning 22. mai 2006 Ark 1 av 25

Programmeringsspråket C

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

Løsningsforslag til eksamen i INF2270

Forelesning Datatyper Kap 5.2 Instruksjonsformat Kap 5.3 Flyttall App B

Minneområder Det er vanlig å dele opp minnet til en prosess i disse ulike områdene: Fast minne Store og små indianere «align» ing struct er

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

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

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

Dagens tema. Minnestrukturen Grovt sett ser minnet for hver process slik ut: Flytting av data. Programmering av x86

Reelle tall på datamaskin

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?

UNIVERSITETET I OSLO

Å løse eksamensoppgaver

Dagens tema. Er maskinen big endian? Denne funksjonen tester det: INF1070 INF1070 INF1070 INF1070

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

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

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

En oppsummering. Pensumoversikt Hovedtanker i kurset Selvmodifiserende kode Overflyt Eksamen. Programmeringsoppgaver Flervalgsoppgaver

Forelesning Instruksjonstyper Kap 5.5

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

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

Del 1 En oversikt over C-programmering

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

INF1040 Digital representasjon TALL

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

IN 147 Program og maskinvare

UNIVERSITETET I OSLO

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

Hvordan en prosessor arbeider, del 1

Kapittel 1 En oversikt over C-språket

Dagens tema. Programmering av x86 INF2270. Minnestrukturen i en prosess. Flytting av data Endring av størrelse. Aritmeriske operasjoner Flagg

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

Løsningsforslag til eksamen i INF2270

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

Programmering av x86. Minnestrukturen i en prosess Flytting av data. Skifting og rotasjoner Hopp. Stakken Rutinekall. Aritmeriske regneoperasjoner

UNIVERSITETET I OSLO

IN 147 Program og maskinvare

Dagens tema INF2270. Cs preprosessor. Separat kompilering av C funksjoner. C og minnet. Dag Langmyhr,Ifi,UiO: Forelesning 5. februar 2007 Ark 1 av 15

TDT4105/TDT4110 Informasjonsteknologi grunnkurs:

Programmeringsspråket C Del 2

UNIVERSITETET I OSLO

Dark Stakkmaskin. Aritmetiske instruksjoner

Introduksjon til DARK assembly

Dark load-store-maskin

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

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen

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

Litt om Javas håndtering av tall MAT-INF 1100 høsten 2004

Forelesning ISA: IJVM Kap 4.2

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Debuggere En «debugger» er et meget nyttig feilsøkingsverktøy. Det kan analysere en program dump, Dagens tema INF1070 INF1070 INF1070 INF1070

Oversikt Kodegenerering Variable Setninger Uttrykk While-setningen Oppsummering

Intro Rask kode x86-op Optimalisering Inline-kode Konklusjon

Husk å registrer deg på emnets hjemmeside!

Representasjon av tall på datamaskin Kort innføring for MAT-INF1100L

Programmeringsspråket C

Programmeringsspråket C Del 2

Programmeringsspråket C Del 2

TDT4110 IT Grunnkurs Høst 2015

Programmeringsspråket C

Debugging. Tore Berg Hansen, TISIP

Flyttalls aritmetikk. I datamaskinen er alle tall representert i flyttalls aritmetikk.

Del 4 Noen spesielle C-elementer

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

Oversikt Kodegenerering Variabler Setninger Uttrykk While-setningen

2 Om statiske variable/konstanter og statiske metoder.

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

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

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

Dagens tema. Raskere kode [REB&DRO H kap 5]

2 Om statiske variable/konstanter og statiske metoder.

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

Oversikt over IN147(A):

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

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

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

Transkript:

Dagens tema Flyt tall Oppbygning IEEE 754 Programmering med flyt tall Selvmodifiserende kode Core War Flyt tall Tall med desimalkomma kan skrives på mange måter: 8 388 708,0 8,388708 0 6 8,39 0 6 De to siste ( ±M G E) er såkalte flyt tall og består av Mantisse («significand») (M). Grunntall («radix») (G). Eksponent (E). Fortegn. Her lagrer man selve tallet og størrelsen hver for seg. Fordelen er at man alltid har like mange tellende sifre. Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark av 30 Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 2 av 30 Representasjon av mantissen En desimalbrøk: har desimaler. En binærbrøk: 3,459265,00000 har binærer. Brøken tolkes slik: En normalisert mantisse er en binærbrøk med følgende egenskap: M < G For binær representasjon innebærer dette at M < 2 Binæren foran binær kommaet vil altså alltid være (med mindre hele tallet er 0). 2 Resultatet er 2 4 8 6 32 64 28, 0 0 0 0 0 2 + 2 0 + 2 3 + 2 6 = 2 + + 8 + 64 3,406 Eksponenten Eksponenten lagres normalt med et fast tillegg slik at vi alltid får et positivt tall. Grunntallet Grunntallet er nesten alltid 2. Blir ikke lagret. Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 3 av 30 Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 4 av 30

Hvorledes lagres,0?,0 0 =,0 2 som er normalisert. Eksponent er 0+27=27= 2. Fortegnet er 0. Standarden IEEE 754 for 32 bits flyt tall 3 30 23 22 0 0 0 00000000000000000000000 3 30 23 22 0 S Eksponent Mantisse S er fortegnet; 0 for positivt, for negativt. Hvordan lagres 0? Som spesialkonvensjon er 0 representert av kun 0 bit: Grunntallet er 2. 3 30 23 22 0 0 00000000 00000000000000000000000 Eksponenten er på 8 bit og lagres med fast tillegg 27. Mantissen er helst normalisert og på 24 bit, men kun de 23 etter binærkommaet lagres. Hvorledes lagres 2,825? 2,825 0 = 00,0 2 =,000 2 2 3 Eksponent er 3+27=30=000000 2. Fortegnet er. 3 30 23 22 0 000000 0000000000000000000 Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 5 av 30 Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 6 av 30 Standarden IEEE 754 for 64 bits flyt tall Største tall 3 30 23 22 0 0 0 omtrent 2 254 27 2 3,4 0 38. (Eksponenten 0 er reservert for tallet 0, eksponenten 255 for NAN, «not a number».) Minste normaliserte positive tall 3 30 23 22 0 0 0000000 00000000000000000000000 Endringer: 63 62 52 5 0 S Eksponent Mantisse Eksponenten er økt fra 8 til bit. Lagres med fast tillegg 023. Mantissen er økt fra 24 til 53 bit. Øverste bit lagres stadig ikke. Største tall Det største tallet som kan lagres, finner vi utfra formelen omtrent 2 27,2 0 38. 2 (2 2) 023 2 = 2 023 2,8 0 308 Nøyaktighet Mantissen er på 24 bit, og 2 24,7 0 7. Dette gir 7 desimale sifre. Minste positive normaliserte tall 2 023 = 2 022 2,2 0 308 Nøyaktighet Mantissen er på 53 bit, og 2 53 9,0 0 5. Dette gir nesten 6 desimale sifre. Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 7 av 30 Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 8 av 30

Flyt tall er vanskelige Flyt tall er oftest bare en tilnærmet verdi; dette kan lett gi uventede feil. #include <stdio.h> int main (void) { float v =., vd, v2, vx, fmul = 0.0; int i; Et annet eksempel I 994 kom Intel Pentium. Den hadde en ny algoritme med tabelloppslag som skulle forbedre ytelsen til det 3 dobbelte for flyt tallsdivisjon. Dessverre ble 5 av 066 verdier i tabellen uteglemt, og dette ga av og til en feil i 6. desimal: for (i = ; i <= 8; ++i) { vd =.0/fmul; v2 = v+vd; vx = (v2 v); printf("%f %f %f\n", v, v2, vx*fmul); fmul = fmul*0.0; return 0; gir følgende resultat:.00000.200000.000000.00000.0000 0.999999.00000.0000.000047.00000.0000.00066.00000.0000.00358.00000.0000 0.953674.00000.00000.92093.00000.00000 0.000000 Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 9 av 30 Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 0 av 30 En designsvakhet i Intel Pentium? Dette lille programmet kjører på,59 s på en Intel Pentium 4 med 2,60GHz: #include <stdio.h> int main (void) { long ia; float xa =.0E 30, xb; printf("test %g / 0.0\n", xa); for (ia = 0; ia < 00000000; ++ia) { xb = xa / 0.0; Å regne med flyt tall X86 har en egen flyt tallsprosessor x87: Den har egne instruksjoner. Den har egne registre ST(0) ST(7) som brukes som en stakk; de inneholder double verdier. mens dette bruker 58,22 s: ST(0) (ofte bare kalt ST) er toppen. #include <stdio.h> int main (void) { long ia; float xa =.0E 38, xb; Den har egne flagg C0 C5. Parametre overføres på stakken (som vanlig). printf("test %g / 0.0\n", xa); for (ia = 0; ia < 00000000; ++ia) { xb = xa / 0.0; Returverdi fra funksjon legges i ST(0). Egentlig lagrer de 80 bits flyt tall på et eget format. Jeg vil kalle dette en designsvakhet i Intel Pentium. Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark av 30 Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 2 av 30

Konvertering X87 kan konvertere mellom heltall og flyt tall: filds ivar # Dytter short var på stakken. fildl ivar # Dytter long var på stakken. fildq ivar # Dytter long long var på stokken. fists ivar # Skriver ST(0) til var som short fistl ivar # Skriver ST(0) til var som long fistps ivar # Popper stakken til var som short fistpl ivar # Popper stakken til var som long fistpq ivar # Popper stakken til var som long long Sammenligninger ftst # Sammenlign ST(0) med 0.0 fcoms ivar # Sammenlign ST(0) med short var fcoml ivar # Sammenlign ST(0) med long var fcom st7 # Sammenlign ST(0) med ST(x) fcom # Sammenlign ST(0) med ST() fcomps ivar # Som de over, fcompl ivar # men popper etterpå. fcomp st7 # fcomp # fcompp # Som fcom men popper to ganger Fortegnsoperasjoner fabs fchs # Gjør ST(0) positivt # Snu fortegnet på ST(0) Resultatet havner i flaggene: C(3) = om ST(0) = op C(0) = om ST(0) < op Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 4 av 30 Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 6 av 30 Konstanter fldz fld # Dytter 0.0 på stakken. # Dytter.0 på stakken. Aritmetiske operasjoner Lese fra minnet flds var # Dytter float var på stakken fldl var # Dytter double var på stakken fld st # Dytter kopi av ST(x) på stakken fadds var # ST(0) += float var faddl var # ST(0) += double var fadd st4 # ST(0) += ST(x) faddp # ST() += ST(0) ; popp fiadds ivar # ST(0) += short ivar fiaddl ivar # ST(0) += long ivar Skrive til minnet fsts var # Skriver ST(0) til var som float fstl var # Skriver ST(0) til var som double fst st4 # Kopierer ST(0) til ST(x) fstps var # Som instruksjonene over, fstpl var # men popper stakken etterpå. fstp st5 # Tilsvarende operasjoner finnes for subtraksjon, multiplikasjon og divisjon: fsubs var # ST(0) = float var fmuls var # ST(0) *= float var fdivs var # ST(0) /= float var Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 3 av 30 Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 5 av 30

Dessverre finnes ingen hopp som sjekker disse flaggene, men vi kan flytte dem over til x86 og teste der. Da havner C(3) i Z flagget og C(0) i C flagget..globl fnotzero # Navn: fnotzero. # Synopsis: Returnerer x, eller.0 om x er null. # C signatur: float fnotzero (float x). fnotzero: pushl %ebp # Standard movl %esp,%ebp # funksjonsstart. flds 8(%ebp) # Dytt x på x87 stakken. ftst # Test mot 0.0. fstsw %eax # Overfør x87 flaggene til EAX sahf # og derfra til x86 flaggene. jnz fn_xit # Om x er null, fstp %st # popp x og fld # dytt.0 på x87 stakken. fn_xit: popl %ebp # ret # return SP(0). Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 7 av 30 Andre Det finnes dusinvis av andre instruksjoner, som fsqrt # ST(0) = sqrt(st(0)) fyl2xp # ST() = ST()*log2(ST(0)+.0) ; popp Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 8 av 30 Bit mønstre Husk: Alt som finnes i datamaskinen er bit mønstre! Det er opp til programmereren å la datamaskinen tolke dem på riktig måte. Eksempel En byte med innholdet 95 = 0xCE kan være Verdien 95 Verdien 6 En del av et 6 bits, 32 bits eller 64 bit heltall (med eller uten fortegns bit) En del av et 32 bits eller 64 bits flyt tall Tegnet à En del av en tekst Instruksjonen ret En del av en fler bytes instruksjon Selvmodifiserende kode Når programkode lagres som bit mønstre, kan man da la programmet endre på seg selv?.globl teller 2.data 3 0000 55 teller: pushl %ebp 4 000 89E5 movl %esp,%ebp 5 6 0003 B800000 movl $,%eax 6 00 7 0008 83050400 addl $,teller+4 7 00000 8 9 000f 5D popl %ebp 0 000 C3 ret Denne funksjonen returnerer første gang den kalles. Samtidig endres instruksjonen slik at den vil gi 2 neste gang den utføres. Koden er plassert i.data for å kunne endres. På noen maskiner vil det kunne bli rot med data og instruksjons cache. for ikke å snakke om alle mulige typer data håndtert av et program. Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 9 av 30 Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 20 av 30

CoreWar spilles på en idealisert datamaskin med 800 celler: Core War For å illustrere slevmodifiserende kode, skal vi bruke simulatoren/spillet CoreWar. Opprinnelig laget D G Jones og A K Dewdney i 984. Kjent gjennom tre artikler av sistnevnte i Scientific American Voldsomt populært i de neste 0 årene med artikler og VM; i dag nesten glemt. Tre standarder: 86, 88 og 94. (Vi skal holde oss til 88.) To spillere skriver hvert sitt lille assemblerprogram som plasseres tilfeldig i maskinen MARS. Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 2 av 30 Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 22 av 30 Programmene bytter på å utføres. Det første som dør, har tapt. Et program dør når det prøver å gjøre noe ulovlig: dividere med 0 prøve å utføre data som instruksjon. Spillet går ut på å vinne ved å unngå å tabbe seg ut, ødelegge motstanderens program og forsvare seg mot motstanderens angrep. To små programmer Ett minimalt program er Blind som ligger på filen Blind.red: ; The blind program: ; (It just steps onto an illegal instruction!) Blind nop end Det inneholder Blind ❶ to kommentarlinjer ❷ en instruksjon NOP som ikke gjør noe ❸ et direktiv END som markerer slutten Ekte datamaskiner? CoreWar maskinene og koden ligner på ekte datamaskiner, men minnet er mye mindre. instruksjonssettet er mye mindre. vanlige datamaskiner skiller ikke på instruksjoner og data. Programmet Static blir bare stående på samme sted: ; The static program: ; (It never moves!) Static: jmp end Static Static Kjøring Siden hele lageret (unntatt de to programmene) er fyllt med data: Og så er det ikke forskjell på store og små bokstaver. DAT #0 er Blind dømt til å tape. Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 23 av 30 Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 24 av 30

Det mest kjente CoreWar programmet Programmet Imp flytter seg selv til neste instruksjon: ; The famous imp program: Imp mov Imp, Next Next end Imp Hvordan er det mulig? Blir ikke adressen i instruksjon da gal? Hva skjer om en Imp tar igjen en Static? Den vil skrive over koden til Static slik at Static bli en Imp. I CoreWar skjer all adressering relativt, dvs at adresse 0 alltid er den instruksjonen som utføres. Imp kan derfor også skrives ; The famous imp program: mov 0, Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 25 av 30 Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 26 av 30 Hittil har vi ikke gjort noe for å vinne. Programmet Stopper prøver å drepe en Imp ved å kaste DAT er bak seg. ; Program stopper ; (Tries to stop an Imp.) Stopper mov jmp Next end Next,Stopper Stopper Stopper (Instruksjonen MOV kopierer en celle til et annet sted.) Instruksjonene i CoreWar Alle instruksjonene (og DAT) består av fem felt: Instruksjon M A A adresse M B B adresse Modifikatoren M x kan være tom vanlig adresse # konstant @ indirekte adressering (tilsvarer * i C) Dette kan gå bra, men ikke alltid. < indirekte adressering med dekrementering (tilsvarer * p i C) Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 27 av 30 Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 28 av 30

Instruksjonene i CoreWar Her er alle instruksjonene i CoreWar88: dat data; ulovlig instruksjon nop gjør ingenting mov flytt data add + sub mul div mod % (finn rest ved divisjon) jmp hopp jmz hopp om = 0 jmn hopp om 0 djz ; hopp så om 0 En bombekaster Programmet Dwarf kaster DAT er utover minnet: ; The dwarf ; (Throws bombs around.) Data dat #0, #0 Dwarf add #4, Data mov Data, @Data jmp Dwarf end Dwarf Den vil ofte slå en Imp. seq hopp over neste instr om p = p 2 sne hopp over neste instr om p p 2 slt hopp over neste instr om p < p 2 spl splitt (tas neste forelesning) Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 29 av 30 Dag Langmyhr,Ifi,UiO: Forelesning 8. mai 2006 Ark 30 av 30