tietokoneen rakenne harjoitustyo
Transcript of tietokoneen rakenne harjoitustyo
EVTEK-ammattikorkeakoulu Tietotekniikan koulutusohjelma [email protected] TP02S, 0201293
Elias Hämäläinen
Tietokoneen rakenne: Harjoitustyö
Harjoitustyö 29.4.2005
Työn ohjaaja: Seppo Haltsonen
1 JOHDANTO 3
2 PROSESSORIN RAKENNE JA TOIMINTA 3
2.1 OMINAISUUDET 4 2.2 MUISTI 5
2.2.1 Ohjelmamuisti 5 2.2.2 Datamuisti 6 2.2.3 Pinomuisti 6 2.2.4 Varatut muistipaikat 6
2.3 PROSESSORIN LOHKOKAAVIO 6
3 KÄSKYKANTA JA ASSEMBLY KIELI 8
4 REKISTERIT 8
4.1 AKKU 9 4.2 X INDEX 9 4.3 Y INDEX 9 4.4 OHJELMALASKURI 9 4.5 PINO-OSOITIN 9 4.6 PROSESSORIN TILAREKISTERI 9
5 OSOITUSMUODOT 10
5.1 VÄLITÖN OSOITUS (IMMEDIATE ADDRESSING) 10 5.2 ABSOLUUTTINEN OSOITUS (ABSOLUTE ADDRESSING) 10 5.3 NOLLA-SIVU-OSOITUS (ZERO PAGE ADDRESSING) 10 5.4 REKISTERI OSOITUS (IMPLIED ADDRESSING) 11 5.5 EPÄSUORA ABSOLUUTTINEN OSOITUS (INDIRECT ABSOLUTE ADDRESSING) 11 5.6 ABSOLUUTTINEN INDEKSOITU OSOITUS (ABSOLUTE INDEXED ADDRESSING) 11 5.7 ”NOLLA SIVU” INDEKSOITU OSOITUS (ZERO PAGE INDEXED ADDRESSING) 12 5.8 INDEKSOITU EPÄSUORA OSOITUS (INDEXED INDIRECT ADDRESSING) 12 5.9 EPÄSUORA INDEKSOITU OSOITUS (INDIRECT INDEXED ADDRESSING) 12 5.10 RELATIIVINEN OSOITUS (RELATIVE ADDRESSING) 13 5.11 AKKU OSOITUS (ACCUMULATOR ADDRESSING) 13
6 KESKEYTYSJÄRJESTELYT 13
6.1 IRQ - MASKATTAVA KESKEYTYS (MASKABLE INTERRUPT) 13 6.2 NMI - EI-MASKATTAVA KESKEYTYS (NON-MASKABLE INTERRUPT) 13
7 YHTEENVETO 14
LÄHTEET 14
3
1 Johdanto
Työn tarkoituksena oli tutustua johonkin mikroprosessoriin tai mikrokontrolleriin
syvemmin. Valitsin perehtymisen kohteeksi maineikkaassa Commodore 64 -
kotitietokoneessa käytetyn 6510-prosessorin edeltäjän 6502-prosessorin. Prosessorit
ovat arkkitehtuuriltaan identtiset.
Työssä selvitetään kyseisen prosessorin yleiskatsaus prosessorin rakenteesta ja
toiminnasta, lohkokaavio rekistereineen, laskentayksiköineen ja muine lohkoineen,
käskykannan erityispiirteet, osoitusmuodot, keskeytysjärjestelyt, mahdolliset
muistinsuojaus- ja virtuaalimuistituki sekä prosessorin mahdollinen testaustuki.
2 Prosessorin rakenne ja toiminta
6502-mikroprosessori on syntynyt vuonna 1975 MOS Technology Inc:n toimesta, joka
tunnetaan myös nimellä Commodore Semiconductor Group. Kun prosessori tuli
markkinoille se oli kuusi kertaa halvempi kuin kilpailijoiden (Motorola ja Intel)
vastaavat prosessorit. 6502-prosessoria ja sen edeltäjiä on käytetty monissa koti- ja
pelitietokoneissa, kuten Apple II, Atari VCS, Atari 800 ja C64. [6]
6502 on 8-bittinen mikroprosessori, jossa on 16-bitin osoiteväylä. Se on pakattu 40-
nastaiseen koteloon.
Kuva 1. 6502-prosessori 40-nastaisessa muovisessa kotelossaan. [1]
4
Kuva 2. 6502-prosessorin nastajärjestys [2]
2.1 Ominaisuudet
- 56 käskyä
- tarvitsee vain yhden +5 voltin jännitelähteen
- 8-bitin rinnakkaisprosessointi
- desimaali- ja binääri-aritmetiikka
- 13 osoitusmuotoa
- oikea indeksointi
- ohjelmoitava pino-osoitin
- pinon koko voi vaihdella, maksimi kuitenkin 256 tavua
- keskeytykset, maskattava ja ei-maskattava
- voidaan käyttää minkä nopeuksista tai tyyppistä muistia
- 8-bittinen kaksisuuntainen dataväylä
- osoitettavaa muistia 65 kilotavuun asti
- DMA (Direct Memory Addressing)
- mahdollisuus valita joko sisäinen tai ulkoinen kellolähde
5
- liukuhihna-arkkitehtuuri
2.2 Muisti
Prosessorissa on 65 kilotavun osoitettava muistiavaruus, joka on jaettu keskenään
ohjelma-, data- ja pino-muistien kesken. Alla olevasta muistikartasta näet miten muisti
jakaantuu eri osa-alueiden kesken. Prosessorissa ei ole muistinsuojaus mahdollisuuksia.
Kuva 3. 6502-prosessorin muistikartta. [3]
2.2.1 Ohjelmamuisti
Ohjelma voi sijaita missä tahansa muistissa. Hyppy ja aliohjelmakutsuja voidaan viitata
minne tahansa muistiin. Ehdolliset ja haarautumiskäskyt ovat rajattu -127-+128 tavua
nykyisestä sijainnista. [7]
6
2.2.2 Datamuisti
Myös dataa voidaan kirjoittaa minne tahansa muistiavaruuteen. 16-bittiset
dataosoittimet ovat tallennettu niin, että vähemmän merkitsevä tavu ensin, sitten eniten
merkitsevä tavu. [7]
2.2.3 Pinomuisti
Pinomuisti on rajattu 256 tavuun. Pino sijaitsee aina osoitteessa 0100h - 01FFh. [7]
2.2.4 Varatut muistipaikat
0000h - 00FFh Tämä muisti alue on varattu zero-page -osoittimille. Näitä
osoittimia käyttää zero-page -osoitusmuodot
0100h - 01FFh Tämä 256-tavun alue on varattu pinon käyttöön
FFFAh - FFFBh Osoitin NMI -keskeytyksen toteutukselle
FFFCh - FFFDh Osoitin ohjelman reset -signaalia varten
FFFEh - FFFFh Osoitin IRQ -keskeytyksen toteutukselle
Jotkin muistiosoitteet voivat olla varattuja Syöttö/Tulostus -toimintojen varalle, koska
prosessorilla ei ole S/T -ominaisuuksia. [7]
2.3 Prosessorin lohkokaavio
7
Kuva 4. 6502-mikroprosessorin lohkokaavio rekistereineen, laskentayksiköineen ja
muine lohkoineen. [3]
8
3 Käskykanta ja Assembly kieli
6502-mikroprosessorin käskykanta sisältää 56 erilaista käskyä. Käskyjen muistikkaat,
(Esim. MOV) eroavat paljon tutuista ja turvallisista Intel x86 -perheen muistikkaista.
Otetaan esimerkiksi yhteenlasku käsky, joka tapahtuu Intelin prosessoreissa ADD -
käskyllä, 6502:ssa käsky on ADS. 6502:n Käskyt voidaan jakaa seuraaviin osiin:
- Datan siirtokäskyt
- Aritmeettiset käskyt: yhteenlasku (aina muistibitin kanssa), vähennyslasku (aina
muistibitin kanssa), muistipaikan kasvatus ja vähennys yhdellä, vertailut
- Loogiset käskyt: eli AND, OR, ja XOR, sivuttaissiirto- ja rotaatiokäskyt
- Hyppy- ja haarautumiskäskyt: ehdolliset ja ehdottomat, aliohjelmakutsut
- Muut: tilalippujen asetus, bitti- ja pino-operaatiot
Alla on pieni esimerkki miltä Assembly -kielinen ohjelmakoodi näyttää 6502-
prosessorilla toteutettuna. Ohjelma tulostaa johonkin näyttöpäätteelle tekstin ”Hello,
World!
Kuva 5. Esimerkki koodinpätkä 6502-prosessorin Assembly kielellä. [4]
4 Rekisterit
Prosessorista löytyy kuusi erilaista rekisteriä, joista on lyhyesti kerrottu seuraavissa
kohdissa. 6502:ssa on hyvin vähän rekistereitä jos verrataan esim. Intelin 8080
prosessoriin.
MSG: .ASCIIZ "Hello, world!"
LDX #0
@LP: LDA MSG,X ; load character
JSR $FFD2 ; chrout
INX
BNE @LP
RTS
9
4.1 Akku
Akku on 8-bittinen rekisteri, jota käytetään aritmeettisiin ja loogisiin operaatioihin.
4.2 X index
X index 8-bittinen rekisteri jota yleensä käytetään erilaisissa x-indeksointi
osoitusmuodoissa
4.3 Y index
Y index on 8-bittinen rekisteri jota puolestaan käytetään erilaisissa y-indeksointi
tapauksissa.
4.4 Ohjelmalaskuri
Ohjelmalaskuri on 16 bittinen rekisteri, jossa sijaitsee kulloisenkin käskyn
suoritusosoite.
4.5 Pino-osoitin
Pino-osoitin on 8 bittinen rekisteri. Prosessori olettaa, että ylemmät 8 bittiä pino-
osoittimesta on aina asetettu 01h arvoiseksi, eli tämä rajoittaa pinon muistin 256 tavuun,
väliltä 0100h - 01FFh.
4.6 Prosessorin tilarekisteri
Prosessorin tilarekisteri eli lippurekisteri sisältää seuraavat tilaliput:
N - Negatiivinen (Negative) Asetettu jos eniten merkitsevä bitti on yksi
10
V - Ylivuoto (Overflow) Ylivuoto aritmeettisessa operaatiossa
B - Komento keskeytetty (Break Command)
D - Desimaalitila (Decimal mode) Asetettu jos prosessori on desimaalitilassa
I - IRQ-epäaktiivinen (IRQ disable) Asetettu jos IRQ -keskeytys ei ole päällä
Z - Nollalippu (Zero) Asetettu jos tulos on nolla
C - Muistibitti (Carry) Muistibitti tai lainaus aritmeettisessa
operaatiossa
5 Osoitusmuodot
6502:ssa on 13 osoitusmuotoa, eli tapaa joilla päästään käsiksi muistiin. [5]
5.1 Välitön osoitus (Immediate Addressing)
Välittömässä osoituksessa operandi on osa käskysanaa. Annettu arvo menee suoraan
akkuun. Esimerkiksi, LDA #$99, lataa arvon $99 akkuun.
5.2 Absoluuttinen osoitus (Absolute Addressing)
Käskyn toinen ja kolmas tavu määrittelevät muistiosoitteen missä data sijaitsee.
Esimerkiksi, STA $3E32 tallentaa akun nykyisen arvon muistipaikkaan $3E32.
5.3 Nolla-sivu-osoitus (Zero Page Addressing)
11
256:ta ensimmäistä muistipaikkaa kutsutaan nimellä “nolla-sivu”. Eli muistialueet
0000h - 00FFh. Seuraavat 256 käskyä ovat Ensimmäisen sivu jne. Käskyt jotka
käyttävät ”nolla sivu” -osoituksia eivät käytä turhaa ylempää tavua. Esimerkiksi:
LDA $0023 toimii, mutta käyttää yhden tavun turhaan
LDA $23 ”nolla sivu” -osoitus
5.4 Rekisteri osoitus (Implied Addressing)
Monet käskyistä ovat vain tavun mittaisia, eikä viittaa muistiin. Näitä kutsutaan rekisteri
osoituksiksi. Esimerkiksi
CLC Nolla Muistibitin (Carry)
DEX Kasvattaa X-rekisteriä yhdellä
5.5 Epäsuora absoluuttinen osoitus (Indirect Absolute Addressing)
Käytetään vain suorassa hyppykäskyssä (JMP). Se käyttää annettua muistiosoitetta
osoittimena alempaan tavuun 16-bittisessä muistiavaruudessa, ja sitten hyppää siihen
muistiosoitteeseen. Esimerkiksi:
JMP ($2345) hyppää muistiosoitteen $2345 alempi, $2346 ylempi tavu
Eli, jos $2345 sisältää $EA ja $2346 sisältää $12, silloin seuraava käsky suoritetaan
muistipaikasta $12EA
5.6 Absoluuttinen indeksoitu osoitus (Absolute Indexed Addressing)
Lopullinen osoite saadaan niin, että annettuun osoitteeseen lisätään X- tai Y-rekisterin
arvo. Esimerkiksi:
12
LDA $453, X X=3
Komento lataa akkuun sisällön muistipaikasta $F453+3, eli $F456.
5.7 ”nolla sivu” indeksoitu osoitus (Zero Page Indexed Addressing)
Sama kuin absoluuttinen indeksoitu osoitus, mutta annettu osoite sijaitsee “nolla
sivulla”, jolloin säästetään muistia.
5.8 Indeksoitu epäsuora osoitus (Indexed Indirect Addressing)
Etsii 16-bittisen osoitteen annetusta sijainnista ja lisää siihen X-rekisterin arvon.
Esimerkiksi:
LDA ($B4, X) X=6
$B4 + 6 = $BA, eli jos $BA sisältää $12 ja $BB sisältää $EE, on lopullinen
muistiosoite $EE12. Lopullisen muistiosoitteen arvo ladataan akkuun.
5.9 Epäsuora indeksoitu osoitus (Indirect Indexed Addressing)
Etsii 16-bittisen osoitteen sisällön annetusta muistipaikasta. Tähän sisältöön lisätään Y-
rekisterin sisältö. Hakee arvon joka on tallennettu tähän osoitteeseen. Esimerkiksi:
LDA ($B4), Y Y=6
Jos $B4 sisältää $EE ja $B5 sisältää $12, akkuun haetaan arvo osoitteesta $12EE + 6,
eli $12F4
13
5.10 Relatiivinen osoitus (Relative Addressing)
Tätä osoitusmuotoa käytetään prosessorin haarautumiskäskyissä. Seuraava tavu
merkitään “offsettiin” nykyisesta osoitteesta, ja näiden summa on seuraavan käskyn
suoritusosoite. Esimerkiksi:
BNE $7F (hyppää kun nollalippu on asetettu)
Komento lisää 127 nykyiseen ohjelmalaskuriin (Program Counter) ja alkaa suorittaa
käskyä siitä osoitteesta.
5.11 Akku osoitus (Accumulator Addressing)
Kuten rekisteri osoituksessa, käskyn kohteena on akku, jolloin sitä ei tarvitse erikseen
määritellä.
6 Keskeytysjärjestelyt
Prosessorissa keskeytyksiä voidaan käsitellä kahdella tavalla.
6.1 IRQ - Maskattava keskeytys (maskable interrupt)
Kun keskeytys tapahtuu, ohjelmalaskuri ja lippurekisteri tallennetaan pinoon,
keskeytysmahdollisuus otetaan pois päältä ja prosessori hyppää muistiosoitteeseen mikä
on tallennettu FFFEh - FFFFh -alueelle. Keskeytyksestä palataan RTI -käskyllä. Tämä
keskeytys voidaan ottaa pois päältä CLI-käskyllä.[7]
6.2 NMI - Ei-maskattava keskeytys (non-maskable interrupt)
Kun keskeytys tapahtuu, ohjelmalaskuri ja lippurekisteri tallennetaan pinoon,
keskeytysmahdollisuus otetaan pois päältä ja prosessori hyppää muistiosoitteeseen mikä
14
on tallennettu FFFAh - FFFBh -alueelle. Myös tässä keskeytyksestä palataan RTI -
käskyllä. Tätä keskeytystä ei voi laittaa pois päältä. [7]
7 Yhteenveto
6502-mikroprosessori on kehitetty 70-luvun puolivälissä, joten se on jo yli 30 vuotta
vanhaa tekniikkaa. Nykyajan prosessorit perustuvat kuitenkin samoihin periaatteisiin
millä silloiset prosessorit toimivat. 6502 toimii 1-4 Mhz:n nopeudella, nykyiset
prosessorit toimivat tuhat kertaa nopeammalla kellotaajuudella.
Vielä syyskuussa 2004, 29 vuotta 6502 syntymän jälkeen, Australiassa sijaitsevassa
Tasmanian yliopistossa käytettiin prosessoria Assembly kielen opetukseen tietokoneen
organisaatio ja arkkitehtuuri –kurssilla. [6]
LÄHTEET
1 Cpu-collection.de: MOS 6502. (WWW-dokumentti)
<http://www.cpu-collection.de/?l0=i&i=198&s=big&tb=1&n=>
2003, Luettu 24.4.2005.
2 Commondore Semiconductor Group: 6500 Microprocessors. (PDF-dokumentti)
<http://www.6502.org/archive/datasheets/mos_6500_mpu_nov_1985.pdf>
01.11.1985, Luettu 26.4.2005.
3 Commondore Semiconductor Group: 6500 Microprocessors. (PDF-dokumentti)
<http://www.6502.org/archive/datasheets/mos_6510_mpu.pdf>
01.11.1982, Luettu 26.4.2005.
4 Vapaa tietosanakirja internetissä: Assembly kieli. (WWW-dokumentti)
<http://en.wikipedia.org/wiki/Hello_world_program#Assembly_language>
15
28.4.2005, Luettu 28.4.2005.
5 RTK: Assembly In One Step. (WWW-dokumentti)
http://www.geocities.com/oneelkruns/asm1step.html
23.7.1997, Luettu 23.4.2005.
6 Vapaa tietosanakirja internetissä: MOS 6502 –teknologia (WWW-dokumentti)
<http://en.wikipedia.org/wiki/MOS_Technology_6502>
22.4.2005, Luettu 20.4.2005.
7 CPU World: MOS Technology 6502/650x/651x architecture. (WWW-dokumentti)
<http://www.cpu-world.com/Arch/650x.html>
13.2.2005, Luettu 22.4.2005.