Tietokonearitmetiikka

Samankaltaiset tiedostot
Tietokonearitmetiikka

Tietokonearitmetiikka

Tietokonearitmetiikka

Lukujärjestelmät. Digitaalitekniikan matematiikka Luku 9 Sivu 3 (26) Lukujärjestelmät ja lukujen esittäminen Fe

811120P Diskreetit rakenteet

ANSI/IEEE Std

Tiedon esitysmuodot. Luento 6 (verkkoluento 6) Lukujärjestelmät Kokonaisluvut, liukuluvut Merkit, merkkijonot Äänet, kuvat, muu tieto

C = P Q S = P Q + P Q = P Q. Laskutoimitukset binaariluvuilla P -- Q = P + (-Q) (-Q) P Q C in. C out

Liukulukulaskenta. Pekka Hotokka

Numeeriset menetelmät

5. Laskutoimitukset eri lukujärjestelmissä

SISÄLLYS - DIGITAALITEKNIIKKA

Digitaalitekniikan matematiikka Luku 10 Sivu 1 (14) Lukujärjestelmämuunnokset. 2 s s

Tiedon esitysmuodot. Luento 6 (verkkoluento 6) Lukujärjestelmät Kokonaisluvut, liukuluvut Merkit, merkkijonot Äänet, kuvat, muu tieto

TIES325 Tietokonejärjestelmä. Jani Kurhinen Jyväskylän yliopisto Tietotekniikan laitos

Palautteita. Tutoriaalit olivat vaikeat! Totta, tentti on onneksi helpompi

Tiedon tyypit Kommunikointi ihmisen kanssa. Luento 6 Tiedon esitysmuodot. Tiedon esitys laitteistossa (4) Suorittimen ymmärtämä tieto (9)

Luento 6 Tiedon esitysmuodot. Tiedon esitys laitteistossa (4) Tiedon esitys (7) Suorittimen ymmärtämä tieto (9) Tietokoneen toiminta, K

Luento 6 Tiedon esitysmuodot

Luento 6 Tiedon esitysmuodot. Tiedon esitys laitteistossa (3)

Luento 6 Tiedon esitysmuodot

Jakso 6 Tiedon esitysmuodot

Luento 6 Tiedon esitysmuodot

Luento 6 Tiedon esitysmuodot

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Luento 6 Tiedon esitysmuodot

Luento 6 Tiedon esitysmuodot. Tiedon esitys laitteistossa (3)

Kombinatorisen logiikan laitteet

Luento 6 Tiedon esitysmuodot. Lukujärjestelmät Kokonaisluvut Liukuluvut Merkit, merkkijonot Totuusarvot Kuvat, äänet, hajut(?)

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

Merkitse kertolasku potenssin avulla ja laske sen arvo.

Tietotyypit ja operaattorit

Tyyppejä ja vähän muutakin. TIEA341 Funktio ohjelmointi 1 Syksy 2005

Laitteistonläheinen ohjelmointi

Kappale 20: Kantaluvut

Laitteistonläheinen ohjelmointi

BL40A1711 Johdanto digitaalielektroniikkaan: Johdanto ja lukujärjestelmät

Numeeriset menetelmät TIEA381. Luento 2. Kirsi Valjus. Jyväskylän yliopisto. Luento 2 () Numeeriset menetelmät / 39

Käskykannat. Tietokoneen rakenne. Ch [Sta06] Operaatioista Operandeista Osoitustavoista Pentium / PowerPC. Luento 7-1

Negatiiviset luvut ja laskutoimitukset

Negatiiviset luvut ja laskutoimitukset

Ohjelmoijan binaarialgebra ja heksaluvut

Paavo Räisänen. Ohjelmoijan binaarialgebra ja heksaluvut.

Tietokoneen rakenne Käskysykli CPU suorittaa ohjelmaa konekielinen käsky kerrallaan

Luento 7: Käskykannat Tietokoneen rakenne / 2006 / Teemu Kerola 9/25/2006

LUKUTEORIA johdantoa

7. Laskutoimitukset eri lukujärjestelmissä 1 / 31

1. Mikä on lukujen 10, 9, 8,..., 9, 10 summa? 2. Mikä on lukujen 10, 9, 8,..., 9, 10 tulo? =?

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

8.1 Murtoluvun määritelmä - murtoluvulla tarkoitetaan aina osaa (osia) jostakin kokonaisuudesta

HUOLTOMATEMATIIKKA 1, SISÄLTÖ TIEDOT JA ESIMERKIT:

Mikrokontrollerit. Mikrokontrolleri

Diskreetit rakenteet. Juha Kortelainen

1. luento. Ohjelmointi (C) T0004 Syksy luento. 1. luento. 1. luento. 1. luento. kurssin sisältö ja tavoitteet työmuodot.

Digitaalitekniikan matematiikka Harjoitustehtäviä

Yksinkertaisin järjestelmä

Liukulukujen vaihtoehtoisia esitystapoja

Algoritmit 1. Luento 11 Ti Timo Männikkö

Ratkaisut Summa on nolla, sillä luvut muodostavat vastalukuparit: ( 10) + 10 = 0, ( 9) + 9 = 0,...

Perustietotyypit ja laskutoimitukset

1 Peruslaskuvalmiudet

Liite 1. Laajennettu Eukleideen algoritmi suoraviivainen tapa

niin järjestys on tämä: ensin kerto- ja jakolaskut vasemmalta oikealle, sen jälkeen plus- ja miinuslaskut vasemmalta oikealle.

Java-kielen perusteet

TWEN 131 PD / 1430 PD KÄYTTÖOHJE

Huom! (5 4 ) Luetaan viisi potenssiin neljä tai viisi neljänteen. 7.1 Potenssin määritelmä

Tiedon esitysmuodot Tiedon muuttumattomuuden tarkistus Järjestelmän sisäinen muisti

Ohjelmointi 1 C#, kevät 2013, 2. tentti

Talousmatematiikan perusteet, L2 Kertaus Aiheet

811120P Diskreetit rakenteet

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

2 j =

Tietokoneen toiminta, K Tavoitteet (4)

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

Talousmatematiikan perusteet, L2 Kertaus Aiheet

Luku- ja merkkikoodit. Digitaalitekniikan matematiikka Luku 12 Sivu 1 (15)

PERUSKOULUSTA PITKÄLLE

Ohjelmoinnin perusteet Y Python

n. asteen polynomilla on enintään n nollakohtaa ja enintään n - 1 ääriarvokohtaa.

Luento 2: Viivan toteutus

Harjoitus 3 (viikko 39)

Numeerinen analyysi 2016

Python-ohjelmointi Harjoitus 2

1 Numeroista lukuja 1.

A L G E B R A N O P P I - J A E S I M E R K K I K I R J A PORVOO HELSINKI WERNER SÖDERSTRÖM OSAKEYHTIÖ KAHDESTOISTA PAINOS

LIITE 1 VIRHEEN ARVIOINNISTA

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

etunimi, sukunimi ja opiskelijanumero ja näillä

0. perusmääritelmiä. Lukutyypit Laskusäännöt Laskujärjestys

OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012

Tekijä Pitkä Matematiikka 11 ratkaisut luku 2

PUHUTAAN NUMEROILLA Murtoluvut Desimaaliluvut tai

Digitaalilaitteen signaalit

Neure - tehtäväluettelo 1 / , 17:05

n! k!(n k)! n = Binomikerroin voidaan laskea pelkästään yhteenlaskun avulla käyttäen allaolevia ns. palautuskaavoja.

Ajattelemme tietokonetta yleensä läppärinä tai pöytäkoneena

TEHTÄVIEN RATKAISUT. Luku Kaikki luvut on kokonaislukuja. Luonnollisia lukuja ovat 35, 7 ja 0.

Transkriptio:

Luento 6 ALU: Aritmeettis-Looginen Yksikkö Tietokonearitmetiikka (Computer Arithmetic) Stallings: Ch 9 Kokonaislukuesitys Kokonaislukuaritmetiikka Liukulukuesitys Liukulukuaritmetiikka Luento 6-1 ALU = Aritmetic Logic Unit Suorittava yksikkö, tiedon käsittely u Kokonaisluku ja liukulukuaritmetiikkaa u Vertailut, sivuttaissiirrot u Bittien kopiointi rekisteristä toiseen u Osoitelaskenta: Hypyt, muistiviittaukset Input u Yleensä kaksi operandia sisään u Rekistereistä (ja muistista) Operatio u Usein käskyrekisterin perusteella Output u Rekisteriin/Muistiin/PSW:hen + - *?? ylivuoto? 2 kpl? (Sta06 Fig 9.1) Luento 6-2 tulos Kokonaislukuesitys (Integer Representation) Arvo binäärimuodossa, bittijonona Merkin paino määräytyy paikan mukaan Kokonaislukujen esitys 57 = 5*10 1 + 7*10 0 = 32 + 16 + 8 + 1 = 1*2 5 + 1*2 4 + 1*2 3 + 0*2 2 + 0*2 1 + 1*2 0 = 0011 1001 = 0x39 = 3*16 1 + 9*16 0 heksadesimaaliesitys Eniten merkitsevä bitti / vähiten merkitsevä bitti u MSB, most significant bit u LSB, Least significant bit Luento 6-3 Luento 6-4 Kokonaislukuesitys (Integer Representation) Entä negatiiviset arvot? u Etumerkki-suuruus u 2:n komplemettimuoto Tietokoneet käyttävät 2:n komplementtia u Ei erikseen +0 ja -0 u Laskuissa ei tarvitse erikseen huomioida etumerkkiä u Vähennyslasku voidaan suorittaa yhteenlaskuna! u Helpompi laitteistolle -57 = 1011 1001 etumerkki -57 = 1100 0111 +2 = 0000 0010 +1 = 0000 0001 0 = 0000 0000-1 = 1111 1111-2 = 1111 1110 2:n komplementti Esimerkki u 8-bittinen esitys, esitä arvo -57 57 = 0011 1001 itseisarvo 1100 0110 invertoi bitit (1:n komplementti) 1100 0110 1 lisää1 1100 0111 2:n komplementtimuoto u Laajentuu helposti esim. 16-bittiseksi 57 = 0011 1001 = 0000 0000 0011 1001-57 = 1100 0111 = 1111 1111 1100 0111 Hylkää mahd. ylivuotava bitti sign extension Luento 6-5 Luento 6-6 / 2007 / Liisa Marttinen 1

2:n komplementti Arvoalue: -2 n-1 2 n-1-1 8 bits: -2 7 2 7-1 = -128 127 32 bits: -2 31 2 31-1 = -2 147 483 648 2 147 483 647 Yhteenlaskun ylivuoto helppo havaita u Ei ylivuotoa, jos erimerkkiset yhteenlaskettavat u Ylivuoto, jos samanmerkkiset yhteenlaskettavat ja tuloksen merkki eri kuin yhteenlaskettavien merkki 57 = 0011 1001 + 80 = 0101 0000 137 = 1000 1001 Ylivuoto! Luento 6-7 2:n komplementti Vähennyslasku yhteenlaskuna! u Unohda etumerkki, käsittele etumerkittöminä! u Ensin 2:n komplementti vähennettävästä, sitten add u Helppo laitteisto -3 = 1101 +1 = 0001-2 = 1110 1100 1 1101 3= 0011 u Tarkistus Tuliko ylivuoto? Merkki = 1, siis negatiivinen Itseisarvo: invertoi bitit ja lisää 1-3 2:n komplementtiesityksessä (Sta06 Table 9.1) Luento 6-8 Negaatio = 2:n komplementti Kokonaislukuaritmetiikkaa Negaatio Yhteen/vähennyslasku Kertolasku Jakolasku 1: invertoi kaikki bitit 2: lisää 1 3: tarkista erikoistilanteet u Jätä ylivuotobitti huomiotta u Muuttuiko merkki? Pienimmälle luvulle ei negaatiota Ellei, aiheuta poikkeus Helppo laitteisto -57 = 1100 0111 = 57 0011 1000 1 0011 1001-128 = 1000 0000 0111 1111 1 1000 0000 Luento 6-9 Luento 6-10 Yhteenlasku (ja vähennyslasku) Normaali binääriyhteenlasku u Jos vähennyslasku, muodosta vähennettävästä ensin komplementti, sitten yhteenlaskuna Ylivuotobitistä ei tarvitse välittää u Tarkkaile sensijaan summan merkkiä Helppo laitetoiminto u 2:n komplementtipiiri ja yhteenlaskupiiri 1100 =-4 1100 = -4 +1111 =-1 +1011 = -5 11011 =-5 10111 =? YLIVUOTO! (Sta06 Fig 9.6) Kokonaislukujen kertolasku Binääriluvuillakin kuten koulussa opittu u Helppo kertoa 0:lla tai 1:llä Laitteistolla? u Monimutkainen u Tarjolla useita algoritmeja Ylivuoto? u 32 b operandit tulos 64 b? Helppo laitteisto, jos etumerkittömiä u Vain monta yhteenlaskua u Tai sivuttaissiirtoa ja yhteenlaskua siirto vasemmalle = kerro 2:lla esim: 5 * => add, shift, shift, add (Sta06 Fig 9.7) 2* 10011 => 100110 Esimerkki: 5*11 add=> 1011 shift=> 10110 shift=> 101100 add=>110111 (= 55) Luento 6-11 Luento 6-12 / 2007 / Liisa Marttinen 2

Etumerkittömien lukujen kertolasku kerrottava (Fig. 8.8 [Stal99]) (Fig. 9.8) Unsigned Multiplication Example (19) Overflow? No. 13 * 11 =??? M 1011 = 1000 1111 = 128+8+4+2+1 = 143 Result on left, multiplier on right! ADD ADD ADD tulo(s) kertoja (+ tuloksen loppuosa) JosQ 0 =0 vain shift muuten add, shift (Sta06 Fig 9.8a) Luento 6-13 SHIFT SHIFT SHIFT SHIFT C A Q 0 0000 1011 0010 0110 1000 1101 1111 1 0101 1101 0001 1110 1111 from C take next sumtake next sum result bit from A take skip next next sum sum just do SHIFT Luento 6-14 Etumerkittömien lukujen kertolasku Etumerkittömien kertolasku Q * M = 1101 * 1011 = 1000 1111 eli 13*11 = 143 [Sta06 Fig 9.8a] (Sta06 Fig 9.9) (Sta06 Fig 9.8b) Luento 6-15 Luento 6-16 Negatiivisten kertolasku? Ed. algoritmi ei toimi negatiivisille luvuille Voisi tehdä näin u muuta operandit positiivisiksi kokonaisluvuiksi v käytä ed. algoritmia tutki operandien merkki, muuta tulos tarvittaessa komplementtimuotoon Parempia ja nopeampia tapoja olemassa Boothin Algoritmi Huomio edell. algoritmista uyhteenlasku vain (aina), kun kertojassa esiintyy 1 Boothin algoritmin idea (tehostus) uyhdistä vierekkäiset 1:set yhdeksi köntäksi utee köntälle yksi yhteenlasku ja yksi vähennyslasku uesim. 7*x = 8*x +( x) 111*x = 1000*x +(-x) = add, shift, shift, shift, complement, add (todellisuudessa päinvastainen järjestys, vähennyslasku ensin) 5 * 7 = 0101 * 0111 00101000 40 = 0101 * (1000-0001) 11111011-5 100100011 = 35 Toimii 2:n komplementtimuodoille, myös negatiivisille! Luento 6-17 Luento 6-18 / 2007 / Liisa Marttinen 3

Boothin Algoritmi Booth s Algorithm for Twos Complement Multiplication (Sta06 Fig 9.12) 10 = könttä alkoi 11 = könttä jatkuu 01 = könttä loppui Arithmetic Shift Right: = täytä etumerkillä (Fig. 8.12 [Stal99]) Fig. 9.12 operands 1000 1000 +/- 1100 0100 arithmetic shift right Miksi toimii? M*(011111111) = 2 7-1 M*(00011110) = 2 5-2 1 M*(01111010) = 2 7-2 3 +2 2-2 1 result Q -1 Luento 6-19 Luento 6-20 Booth s Algorithm Example (15) Boothin Algoritmi, esim. Sta06 Fig 9.12 7 * 3 =? = 0001 0101 = 21 M: 0111 Fig. 9.12 [Sta06] Q * M = 0011 * 0111 = 0001 0101 eli 3*7 = 21 Arithmetic Arithm Shift Right SHIFT Arithm SHIFT A: 1100 0101 0001 0000 Q: 1001 0100 0101 0011 10 1001 0010 1110 0011 1010 0100 01 sign extended 1 bit of result Carry bit was lost Luento 6-21 Q -1 011 ADD just SHIFT 10 subtract 00 just A-M SHIFT (Sta06 Fig 9.13) Luento 6-22 Kokonaislukujen jakolasku (6) Kokonaislukujen jakolasku Binääriluvuillakin kuten koulussa opittu u Helppo: osamäärään tulee vain 0:ia ja 1:siä (jakaja) osamäärä jaettava Toimii positiivisilla luvuilla, negatiivisille lisävirittelyjä Ks. tarkemmin kirjan esimerkki Fig 9.17 [Sta06 ] A Q Q 0 SHL arvaa, että seuraava tuloksen bitti on 1 +/- jakojäännös Laitteistototeutus vastaavasti kuin kertolaskussa u Siirto vasemmalle = uusi numero mukaan (Sta06 Fig 9.15) Luento 6-23 arvaus meni pieleen, palauta A ennalleen ja ota uusi numero alas Sta06 Fig 9.16 Luento 6-24 / 2007 / Liisa Marttinen 4

Esimerkki: kahden komplementin jakolasku Jakolasku: 7/3 A+ Q = 7 = 0000 0111 M= 3 = 0011 A Q Subtract M = Add ( M) -M = -3 = 1101 0000 0111 initial value 0000 1110 shift left 1101 subtract M 0000 1110 restore 0001 1100 sift left 1110 subtract M 0001 1100 restore 0011 1000 shift left 0000 subtract M 0000 1001 set Q 0 =1 0001 0010 shift 1110 subtract M 0001 0010 restore Sta06 Fig 9.17 a Ensin kokeillaan, onnistuuko jako eli vähennetään ja tutkitaan muuttuuko A:n etumerkki vähennyksen jälkeen. Jos muuttuu, niin vähennys peruutetaan. Toistetaan, niin monta kertaa kuin Q:ssa on bittejä. Jos vähennys onnistuu, Q 0 = 1 Q = quotient = 2 A = remainder = 1 Luento 6-25 Liukulukuesitys Luento 6-26 Liukulukuesitys IEEE 754 Liukulukuformaatit Merkitsevät numerot ja suuruusluokka Normeerattu muoto u pistettä edeltävä numero > 0-0.000 000 000 123 = -1.23 * 10-10 0.123 = +1.23 * 10-1 123.0 = +1.23 * 10 2 123 000 000 000 000 = +1.23 * 10 14 Luento 6-27 (Sta06 Table 9.3) Luento 6-28 32-bittinen liukulukuesitys 1 b etumerkille u 1 = -, 0 = + 8 b exponentille u Ei erikseen etumerkkiä, vaan erillinen nollataso (bias) Esim. Exp=5gtalleta 127+5, Exp=-5gtalleta 127-5 23 b mantissalle (significant) u Normeeratussa muodossa binääripistettä edeltävä numero aina 1, ei talleteta (piilobitti, Zuse Z3 1939) Binäärimuodossa esitetyn liukuluvun arvo -1 Sign * 1.Mantissa * 2 Exponent-127 Esimerkkejä 23.0 = +10111.0 * 2 0 = +1.0111 * 2 4 =? 127+4=131 sign 1.0 = +1.0000 * 2 0 =? 0+127 = 127 0 0111 1111 000 0000 0000 0000 0000 0000 sign 0 1000 0011 011 1000 0000 0000 0000 0000 exponent exponent mantissa mantissa Luento 6-29 Luento 6-30 / 2007 / Liisa Marttinen 5

Esimerkkejä Liukulukujen tarkkuudesta (32b) 0 1000 0000 111 1000 0000 0000 0000 0000 sign exponent mantissa X =? X = (-1) 0 * 1.1111 * 2 (128-127) = 1.1111 2 * 2 = (1+ 1/2 + 1/4 + 1/8 + 1/16) * 2 = (1 + 0.5 + 0.25 + 0.125+0.0625) * 2 = 1.9375 * 2 = 3.875 Arvoalue u 8 b eksponenttig 2-126... 2 127 ~ -10-38... 10 38 Tarkkuus u 24 b mantissa g 2 24 ~ 1.7 * 10-7 ~ 6 desimaalia u Parempi tarkkuus pienille luvuille ilman normalisointia Luento 6-31 Luento 6-32 IEEE 754 Erityismerkitykset NaN: Not a Number Not a Number Double Precision vastaavasti (Sta06 Table 9.4) (Sta06 Table 9.6) Luento 6-33 Luento 6-34 Liukulukuaritmetiikkaa IEEE-754 Standardi Yhteen/vähennyslasku Kertolasku Jakolasku Liukulukuaritmetiikka Laskentaa varten leveämpiä työrekistereitä u Guard bits u Enemmän merkitseviä bittejä mm. mantissalle u Käytetään myös normeeraamattomia muotoja Yhteen- ja vähennyslasku u Enemmän välivaiheita kuin kerto/jakolaskussa u Operandeille ensin sama eksponentti Pienemmän exponentin omaavan normeeraus purettava tarkkuutta ja siis tietoa häviää u Tulos voi vaatia normeerauksen Kerto- ja jakolasku u Mantissa ja eksponentti käsiteltävä erikseen Luento 6-35 Luento 6-36 / 2007 / Liisa Marttinen 6

Liukulukuaritmetiikka Yhteen- ja vähennyslasku (Sta06 Table 9.5) Pienempi operandi hävisi kokonaan! (Sta06 Fig 9.22) Luento 6-37 Luento 6-38 Erikoistilanteita Eksponentin ylivuoto (Hyvin suuri luku) u Arvoksi tai - vai u Aiheuta poikkeus ohjelmoitava optio Eksponentin alivuoto (Olemattoman pieni luku) u Arvoksi 0 (tai aiheuta poikkeus) ohjelmoitava optio Mantissan ylivuoto u Yhteenlaskun tuloksena mantissa, jossa binääripisteen edellä useita numeroita u Normeeraa! Mantissan alivuoto u Yhteiseen eksponenttiin siirtyminen voi aiheuttaa merkitsevien bittien katoamista (entä, jos kaikki merkitsevät menee?) u Pyöristä? Luento 6-39 Pyöristys Esimerkki u Arvo neljän desimaalin tarkkuudella 3.1234, -4.5678 u Esittämiseen käytössä vain 3 desimaalia u Normaalien pyöristyssääntöjen mukaan lähimpään esitettävissä olevaan u Aina kohti (ylöspäin) u Aina- kohti (alaspäin) u Aina 0 kohti 3.123, -4.568 3.124, -4.567 3.123, -4.568 3.123, -4.567 Esim. Intel Itanium -laitteisto tukee näitä kaikkia Luento 6-40 Kertolasku Jakolasku (Sta06 Fig 9.23) Luento 6-41 (Sta06 Fig 9.24) Luento 6-42 / 2007 / Liisa Marttinen 7

Kertauskysymyksiä Miksi käytetään 2:n komplementtimuotoa? Miten 2:n komplementtiesitys laajenee suurempaan tilaan (esim. 8b esitys 16 b:n esitys)? Millainen on yksinkertaisen tarkkuuden liukuluvun esitysmuoto? Milloin tulee liukuluvun alivuoto? Luento 6-43 / 2007 / Liisa Marttinen 8