BÖLÜM 2
MERKEZÝ ÝÞLEM BÝRÝMÝ (CPU)
Basit bir mikrobilgisayar birçok yongadan oluþur. Yongalar DIP (Dual In-Lýne
Package) veya QFP (Quad Flat Package) biçiminde ve 40-132 arasýnda bacak içerecek
þekilde yapýlýr. Bu yongalardan en önemlisi Merkezi Ýþlem Birimi (CPU-Central
Processing Unit) adý verilen veya daha çok mikroiþlemci olarak bilinen yongadýr.
CPU’lar birbirlerine göre farklýlýklar göstermelerine raðmen, hemen hepsinde ortak
olan birçok özellikler vardýr. Burada önce bu ortak özellikler incelenecek ve daha sonra
farklýlýklar nedenleriyle açýklanacaktýr. Anlaþýlmasý kolay olsun diye, 8-bitlik CPU’larýn
yapýsý incelenecektir.
2.1 CPU KAYDEDÝCÝLERÝ
1. Akümülatör. CPU dýþýndan alýnan verinin saklandýðý, CPU dýþýna
gönderilecek verinin gönderilmeden önce tutulduðu, veya CPU’da yapýlan iþlemin
doðurduðu sonucun saklandýðý kaydedicilere Akümülatör (A) adý verilir. Bir CPU’da bir
veya birden çok akümülatör bulunabilir. Akümülatörün uzunluðu CPU’nun kaç bitlik
olduðunun bir göstergesidir. Her CPU’da bulunmasý zorunlu olan bu kaydedici mevcut
CPU’lar için 8-, 16-, veya 32-bit uzunluðunda olabilir.
Assembli dili emirler ya yalnýz akümülatör içeriði üzerinde iþlem yapar veya
akümülatör içeriði ile bellekten alýnan veriyi birlikte iþleme sokar. Þekil 2.1.a ve b’de
bellek içeriðinin iki farklý yoldan tümlenmesi gösterilmiþtir. Þekil 2.1.a’da, 1. adýmda veri
bellekten alýnarak akümülatöre taþýnmakta, 2. adýmda CPU içindeki ALU’da (aritmetik
lojik birim) tümlenip sonuç tekrar akümülatöre getirilmekte, ve 3. adýmda ise tümlenmiþ
deðer baþka bir emirle bellekte saklanmaktadýr.
Þekil 2.1.b’de ise veri yalnýz bir emirle bellekten alýnýp CPU’da tümlendikten
sonra sonuç yine ayný bellek adresinde saklanmaktadýr. Bu iþlemde akümülatör
kullanýlmamýþtýr.
21
CPU
CPU
ALU
2.adým
Akümülatör
bir adýmlý iþlem
1.adým
3. adým
Bellek
Bellek
(a) Üç adýmlý tümleme
(b) Bir adýmlý tümleme
Þekil 2.1 Bellek içeriðinin iki farklý tümleniþi.
Yukarýda gösterilen “bir adýmlý iþlem” her zaman geçerli deðildir. Bazý CPU
iþlemleri bellekten iki verinin alýnmasýný gerektirir.
(A verisi) ADD (B verisi) → (C toplamý)
2. Genel Amaçlý Kaydediciler. Bir adýmlý iþlemde olduðu gibi, her zaman
bellekten verinin alýnmasý ve sonucun tekrar belleðe döndürülmesi gerekmeyebilir. Bellek
eriþimleri uzun zaman gerektiren iþlemlerdir. Bu yüzden eðer bir emirin oluþturduðu sonuç
o program içinde birkaç emir sonra tekrar kullanýlacaksa, bu sonucu belleðe yazarak zaman
harcayacak yerde, onu CPU içinde genel amaçlý kaydedici (GR) adý verilen
saklayýcýlarda tutmak ve buradan çaðýrarak kullanmak daha elveriþlidir. Böylece belleðe
verinin yazýlmasý ve okunmasý iþlemleri en aza indirildiði için program icrasý kýsalmýþ
olur. Bellek adresleme, CPU kaydedicilerini adreslemekten daha uzun süre gerektirir.
Genelde bir CPU’da çok sayýda genel amaçlý kaydedici bulunur. Bu kaydediciye sahip
olmayan CPU’lar, bu gereksinimini “küçük adres” kullanarak belleðin
0. sayfasý ile
karþýlar. 0. sayfa 256 baytlýk bir kaydedici takýmý olarak görülür, ve 8-bitlik küçük bir
adresle rahatça adreslenebilir. Halbuki CPU kaydedicilerin adresleri emir kodu içinde
bulunan bir bit dizisi ile oluþturulur.
22
Genel amaçlý kaydediciler akümülatör uzunluðunda olmakla beraber, kaydedici
çiftleri kullanýlarak daha büyük sayýlara uygun saklayýcýlar kurulabilir. Bir CPU’da
bulunabilecek kaydediciler Þekil 2.2’de gösterilmiþtir.
Bir CPU’da belleði adreslemek amacýyla kullanýlan çok sayýda kaydedici vardýr.
Basit bir mikrobilgisayarda bellek üç ana bölüme ayrýlabilir: Program bellek, veri bellek,
ve yýðýn bellek. Bu bellek bölümleri sýrasýyla program sayýcý (Program Counter, PC),
veri sayýcý (Data Counter, DC) ve yýðýn gösterici (Stack Pointer, SP) ile adreslenir.
A7......A0
C7......C0
DC15......
PC15......
IR15.......
SP15......
I7........I0
B7.............B0
DC1 DC0
PC1 PC0
IR2 IR1
SP2 SP1
Akümülatör
(A)
Genel amaçlý Kaydedici (2 adet) (GR)
Veri sayýcý
(DC)
Program sayýcý (PC)
Ýndex kaydedici (IR)
Yýðýn gösterici (SP)
Emir kaydedici (I)
Þekil 2.2 CPU kaydedicileri.
3. Veri Sayýcý. Veri belleði adreslemeye yarayan ve “LOAD DC, Data” yükleme
emiriyle içeriði belirlenen kaydediciye veri sayýcý (DC) denir. Veri belleðin sýralý
adreslenmesi pek olasý olmadýðý için bu kaydedicinin içeriði bellek eriþiminden sonra
kendiliðinden artmaz. Birer artarak veri belleðin adreslenmesi için genellikle “INC DC” bir
arttýrma emiri kullanýlýr. Her CPU’da bulunmasý gerekmez. Veri sayýcýnýn uzunluðu
genellikle CPU’nun adresleyebileceði belleðin büyüklüðüne baðlýdýr.
4. Program Sayýcý. Program belleði adreslemeye yarayan ve her program bellek
eriþiminden sonra içeriði kendiliðinden bir artan kaydediciye program sayýcý (PC) denir.
Bu bir artarak sayma özelliði, belleðe boþluk býrakýlmadan yerleþtirilmiþ emirlerin
adreslenmesi için yeterlidir. RESET iþaretiyle içeriði sýfýrlanýr ve yalnýz “JUMP Adres”
atlama emiriyle belirli bir deðerle yüklenebilir. Uzunluðu CPU’nun adresleyebileceði
belleðin büyüklüðüne baðlýdýr ve her CPU’da bulunmasý zorunludur. Veri sayýcýnýn
zorunlu olmamasýna ve bir veya birden çok bulunabilmesine raðmen, program sayýcý bir
CPU’da yalnýz bir tane olabilir.
5. Indeks Kaydedici. Genellikle her CPU’da bulunan ve veri belleði adreslemeye
yarayan bir diðer kaydedici indeks kaydedicidir (IR). Bir CPU’da birden çok indeks
kaydedici bulunabilir. Kullaným biçimi veri sayýcýsýna benzer; ama bellek adresi, bu
23
kaydedicinin içeriðinden ziyade, bu içeriðe emirin taþýdýðý öteleme (offset) bilgisinin
eklenmesinden sonra bulunan deðerdir.
6. Yýðýn Gösterici (Stack Pointer). Yýðýn belleði adreslemeye yarayan ve her
CPU’da bulunmasý zorunlu bir kaydedicidir. Yýðýn belleðe yazýlan veya okunan bilgi
uzunluðuna baðlý olarak yýðýn gösterici (SP)
içeriði güncelleþtirilir. Belleðin yýðýn
olarak ayrýlan alanýný göstermek için baþlangýçta içeriði belirli bir deðere ayarlanýr.
Yýðýn göstericiye ilerideki bölümlerde daha ayrýntýlý olarak deðinilecektir.
7. Emir (Instruction) Kaydedici. Program bellekten çaðrýlan emirlere iliþkin emir
kodlarýn CPU’da saklanacaðý yere emir kaydedici (I) denir. Emir kaydedicinin büyüklüðü
CPU’nun kaç bitlik olduðuna baðlý olmayýp, emir sayýsýnýn ve CPU karmaþýklýðýnýn
bir fonksiyonudur.
Program sayýcý ile veri sayýcý arasýnda yalnýz bir önemli fark vardýr. Bellekte
boþluk býrakýlmadan ardýþýk bellek kelimeleri halinde belleðe program yerleþtirilirse,
program sayýcýda emir adreslerinin oluþturulmasý problemi kolayca çözülmüþ olur.
Burada gerekli olan tek þey, program sayýcýya programýn baþlangýç adresini yüklemektir.
Her program bellek eriþiminden sonra program sayýcýnýn içeriði kendiliðinden bir artarak
programýn çaðýrýlmasý saðlanmýþ olur.
Veri sayýcýnýn, uzun ardýþýk bellek eriþimlerine sahip olmasý pek olasý deðildir.
Eðer çok baytlý veriler varsa, veya birbiri ardýsýra gelen bellek adreslerinde saklanan bir
tablo varsa, o zaman veri sayýcý ardýþýk bellek adreslerini üretmek zorunda kalacaktýr.
Veri sayýcýnýn ardýþýk bellek bölgelerine eriþmesi gerekse bile, alçak bellek adresinden
baþlayýp birer birer yükseleceði veya yüksek bellek adresinden baþlayýp birer birer
azalacaðý açýk deðildir. Bundan dolayý veri sayýcýya adreslerin koyulabilmesi için, CPU
lojiði kullanýcýya bazý olanaklar saðlamýþtýr.
CPU mimarisine baðlý olarak kaydedicilerin türleri ve sayýlarý deðiþebilir. Örneðin
Z80 CPU’sunda yukardaki kaydedicilere ilaveten Kesme (Interrupt) Vektör Kaydedicisi ve
tazeleme (Refresh) Kaydedicisi vardýr. Ayrýca 16-bitlik CPU’larýn adresleme kapasitesi
genelde 1M bayttan daha büyük olduðundan ve bu CPU’lar 8-bitlik CPU’lardaki adres
kaydedicilerin yapýsýný aynen kabul ettiðinden, bu CPU’lar büyük adresleri üretebilmek
için kaydedici çiftler kullanmaktadýr. Bu amaçla Dilim (Segment) Kaydedicilerden
24
yararlanýlýr. Örneðin kod dilim kaydedici ile program sayýcý içeriklerinin kaydýrýlmýþ
toplamý program bellek adresini verir.
2.2 DURUM BAYRAKLARI
Emirlerin gerçekleþtirdiði iþlem sonuçlarý hakkýnda bilgi vermek amacýyla
kendiliðinden birlenen veya sýfýrlanan bir bitlik bellek hücre takýmýnýn CPU’da
bulunmasý gerekir. Bu hücrelerin her birine durum bayraðý (status flag) adý verilir. CPU
mimarisine baðlý olarak durum bayraklarý farklýlýk göstermekle beraber, aþaðýda her
CPU’da bulunmasý gereken bayraklar verilmiþtir.
1. Elde ve Ara - Elde Bayraklarý (Carry and Intermediate Carry Flags). Çok
baytlý aritmetik iþlemler yapýlýrken anlamsýz baytlarýn toplamýndan doðan eldenin bir
yerde saklanarak, daha anlamlý baytlar toplanýrken iþleme sokulmasý gerekir. Ayrýca 8bitlik bir sayýnýn her hangi bir bitinin 0 veya 1 olup olmadýðýný belirleyebilmek için,
döndürme emiriyle o bit bir bitlik hücreye taþýnarak koþullu dallanma emirleriyle
incelenebilir. Bu iþlemlerde kullanýlan hücreye elde bayraðý denir.
Anlamlý bayt
Anlamsýz bayt
01011001
11000101
00010101
10011010
1 ←
01101111
Anlamsýz baytýn en anlamlý
bitinden çýkan elde
01011111
En anlamlý bitler
Elde bayraðý çok baytlý sayýlarýn bir bit saða veya sola kaydýrýlmasýnda çok
elveriþli olmaktadýr. ”ROR Bellek” elde üzerinden döndürme emiri kullanýldýðý zaman,
eldedeki bit anlamlý baytýn en anlamlý hanesine gelirken en anlamsýz biti de eldeye çýkar.
Ýkinci ROR emiri eldedeki bu biti anlamsýz baytýn en anlamlý hanesine taþýr ve diðer
bitler bir hane saða kaymýþ olur.
C elde bayraðý
25
1.ROR emiri
Bellek adresi
2.ROR emiri
Bellek adresi +1
BCD toplama iþlemini gerçekleyebilmek için, 8-bitlik verilerin anlamsýz 4-bitinin
toplamýndan doðacak eldenin saklandýðý hücreye ara-elde bayraðý denir. Bu bayrak 4.
bitlerin toplamýndan doðan eldeyi tuttuðu için, toplama emirinin hemen ardýndan gelen
onlu düzeltme emiri (DAA) elde ve ara-elde bayraklarýna ve toplama bakarak elde edilen
2-onaltýlý haneli toplamýn her iki hanesini BCD sayýya dönüþtürür.
Çok baytlý sayýlarýn toplanmasýný inceleyelim. Ýki tane 2-baytlýk sayýnýn
anlamsýz baytlarýnýn toplamýndan doðan eldenin elde bayraðýnda saklandýðýný
görmüþtük. Anlamlý baytlar toplanýrken, anlamsýz baytlarýn doðurduðu elde toplama
katýlýr. Bu gösteriyor ki, CPU kaydedicilerine anlamlý baytlar yüklenirken elde durumu
korunmalýdýr. Bu yüzden CPU tasarýmcýsý yükleme emirlerinin elde yaratmamasýna çok
özen göstermelidir. Durum bayraklar, CPU’da yeni gerçekleþtirilmiþ iþleme iliþkin
durumlarý göstermekten ziyade en son gerçekleþtirilen seçilmiþ önemli iþlemlerin
sonuçlarýný yansýtmalýdýr.
2. Sýfýr (Zero) Bayraðý. Verilerin iþlenmesinden elde edilen sonucun sýfýrdeðerli olduðunu göstermek amacýyla lojik-1 deðerini alan bayraða Sýfýr Bayraðý (Zero
Flag) denir. Bu bayrak diðer durumlarda sýfýrlanacaktýr. Ýþlem sonucunun sýfýr
olmasýnýn, bu bayraðý birlediðine dikkat edilmelidir. Diðer bir deyiþle sýfýr bayraðý,
iþlem sonuç durumunun tümleyenine oturtulur. Sayýlarýn karþýlaþtýrýlmasýnda, yani
eþitlik denetlenmesinde, ve sayýcý yapýmýnda çok kullanýlan bir bayraktýr. Hangi
emirlerin bu bayraðý birleyeceðinin mikroiþlemci tasarýmcýsý tarafýndan çok iyi
belirlenmesi gerekir.
3. Ýþaret (Sign) Bayraðý. Bilgisayarlarda genellikle iþaretli sayýlar kullanýlýr.
Ýþaret biti bir baytlý veya çok baytlý sayýnýn daima en anlamlý bitidir. CPU ise her baytýn
en anlamlý bitini iþaret biti olarak yorumlar. Bu yüzden iþaret bayraðýnýn ne zaman
gözönüne alýnacaðýna programcýnýn karar vermesi gerekir. Ýþlem sonucunda elde edilen
sayýnýn
8.biti iþaret biti olarak iþaret bayraðýnda saklanýr. Bu bayraktan sayýlarýn
büyüklük karþýlaþtýrýlmasýnda ve sayýcý yapýmýnda yararlanýlabilir.
26
En anlamlý bayt
En anlamsýz bayt
iþaret biti
Çok baytlý sayý
CPU tüm ikili sayý toplamalarýna saf ikili olarak bakar. CPU, bir bellek içeriðinin
yalnýz bir baytlýk bir sayý mý, yoksa çok kelimeli bir sayýnýn bir parçasý mý olduðunu
bilemez. Bundan dolayý çok baytlý sayýlarýn her baytýnýn toplamýndan çýkan elde daima
geçerlidir.
4. Taþma (Overflow) Bayraðý. 8-bitlik bir verinin en anlamlý biti iþaret biti
olarak yorumlandýðý zaman,
ikinci en anlamlý bitin vereceði elde veri taþmasýný
(overflow) gösterir; yani ayrýlan alana sonuç sýðmamýþtýr denir. Taþmanýn oluþumunu
gösterebilmek için aþaðýdaki örneði inceleyelim. Toplamýn negatif çýkmasý iþlemin
hatalý olduðunu gösterir.
Ýþaret biti
En anlamlý veri biti
+ 65
+ + 38
+ 9D
0110 0101
0011 1000
1001 1101 = -63 ?
Anlamlý veri bitinden çýkan elde, sonucun ayrýlan
alana sýðmadýðýný gösterir.
Hatalý sonuçlarý belirleyebilen bir yöntemin bulunabilmesi için aþaðýdaki örnekleri
inceleyelim. Bu örneklerde iþaret bitinden çýkan elde için
Cs, en anlamlý bitlerin
toplamýndan doðan elde için ise Cp sembolü kullanýlmýþtýr.
+ 08
+ + 07
+ 0F
Cs=0
0000 1000
0000 0111
0000 1111 = 0F
Cp=0
Cs = 0 ve Cp = 0 oldu ve sonuç doðru olarak hesaplandý. Þimdi de Cs = Cp = 1 olan
örnekleri inceleyelim.
+38
+ -24
+14
Cs= 1
0011 1000
1101 1100
0001 0100 = 14
Cp=1
27
Sonuç yine doðrudur. Burada negatif sayýlar için 2’li tümleyen kullanýlmýþtýr. Cs
ve Cp birbirinden farklý olduðu zaman, yani biri 1, diðeri 0 olduðu zaman sonuç daima
hatalýdýr.
+
+66
+7E
+E4
Cs=0
0110 0110
0111 1110
1110 0100 = -1C ?
Cp=1
Taþma bayraðýnýn birlenmesi veya sýfýrlanmasý iþlemi bu örnekler sonucunda
daha açýklýk kazanmýþtýr. Görüldüðü gibi; Cs ve Cp’nin farklý deðerlerinde sonuç ayrýlan
alana sýðmamýþtýr, yani yanlýþtýr. Ayný deðerlerinde ise sýðmýþtýr, yani doðrudur. Ýki
bitin ayný olup olmadýðýný belirleyen XOR iþlemi olduðundan, taþma bayraðý
Taþma= Cs XOR Cp
iþlem sonucu ile birlenirse, sonucun hatalý olduðu yansýtýlmýþ olur.
5. Eþitlik (Parity) Bayraðý. Her CPU’da bulunmayan, genelde Intel ailesinde
karþýlaþýlan diðer bir bayrak Eþitlik Bayraðýdýr. Bu bayrak iþlem sonucunda elde edilen
bayttaki lojik-1 deðerli bitlerin sayýsýnýn tek veya çift oluþuna baðlý olarak birlenen veya
sýfýrlanan bir bayraktýr. Genelde çift sayýda 1 bu bayraðý birler tek sayýda 1 ise sýfýrlar.
Veri transferinde hatalý baytlarýn algýlanmasýnda kullanýlýr.
2.3 CPU KAYDEDÝCÝLERÝNÝN KULLANILMASI
CPU’daki kaydedicilerin nasýl kullanýldýðýný daha iyi anlamak için, CPU’daki beþ
kaydedici içeriðinin nasýl güncelleþtirildiðini gösteren bir toplama örneði incelenecektir.
Bu örneðin seçilmesinin nedeni,
CPU ve bellekten oluþan
basit bir mikrobilgisayar
gerektirmesi ve CPU kaydedicilerini en fazla ölçüde kullanmasýdýr.
Bu örnekte biri 0A20H ve diðeri 0A21H adreslerinde tutulan herbiri bir bayt
büyüklüðündeki iki sayý toplanarak toplam 0A23H adresine yerleþtirilecektir. Toplamayý
gerçekleyecek program adýmlarý aþaðýdaki gibi düzenlenebilir.
1. Toplanacak birinci sayýnýn adresini belirle
2. Bu adresteki bilgiyi akümülatöre taþý
3. Toplanacak ikinci sayýnýn adresini belirle
28
4. Bu adresteki sayý ile 2. adýmda akümülatöre taþýnmýþ sayýyý topla
5. Toplamýn saklanacaðý bellek adresini belirle
6. Toplamý bu adrese yaz.
Bu altý adýmlý ikili toplamayý gerçeklemek için bazý emir kodlarý üretilecektir.
Veri belleði adreslemek için CPU’da veri sayýcý ve indeks kaydedici olmak üzere iki
kaydedici vardý. Ýlk adýmý gerçeklemek amacýyla, veri sayýcýyý kendi ardýndan gelen iki
baytlýk bilgi ile yükleyen A3H emir kodlu üç baytlýk bir emir oluþturulabilir.
A3
0A
20
Bu emir kodu, ardýndan gelen iki baytlýk
bilgiyi okur ve onlarý veri bellek adresi
olarak yorumlayarak DC’ye koyar.
Ýkinci adým, adreslenen bellek içeriðinin okunmasýný ve bu içeriðin veri olarak
yorumlanýp akümülatöre yerleþtirilmesini gerektirir. Veri türünü emirin bilmesine gerek
yoktur. Programcýnýn veri türünü bildiði ve ona uygun olmayan herhangi bir þey
yapmadýðý varsayýlýr. Bu emir kodu 38H ile gösterilir. O zaman program aþaðýdaki
biçimi alýr.
A3
0A
20
38
1.adým
DC ile adreslenen bellek içeriðini okuyup saf ikili deðer
olarak yorumlayarak akümülatöre koyar
Ýkinci sayýcýnýn adreslenmesi için indeks kaydediciden yararlanýlacaktýr. Ýndeks
kaydedicinin yüklenmesi DC’nin yüklenmesine benzer. Bu emirin kodu 8BH seçilirse
program aþaðýdaki biçimi alýr.
A3
0A
20
38
8B
0A
21
1.adým
2. adým
0A21H deðerini veri bellek adresi olarak yorumlayýp
indeks kaydediciye koyar.
29
Dördüncü adýmda iki sayýnýn toplanmasý saðlanacaktýr. Toplama emiri birinci
sayýyý akümülatörden, ikinci sayýyý ise IR+öteleme ile belirlenen bellek adresinden alarak
Aritmetik ve Lojik Birimde (ALU) toplar ve toplamý akümülatörde saklar. Bu iþlemi
gerçekleyen emir kodu B0H seçilirse, ve IR içeriðinin 0A21H alýnmasý öteleme bilgisinin
00H olmasýný gerektireceðinden program aþaðýdaki biçimi alýr. Burada öteleme bilgisi
iþaretli 8-bitlik bir sayýdýr.
A3
0A
20
38
8B
0A
21
B0
00
1.adým
2. adým
3. adým
(0A21H+00H) adresindeki veriyi okur ve akümülatördeki sayý
ile toplayýp toplamý akümülatöre koyar. Burada emir kodundan
sonra gelen bayt öteleme miktarýný gösterir.
Beþinci ve altýncý adýmlarý birlikte yorumlamak daha uygundur. Toplam, IR’nin
gösterdiði yerden yalnýz 02H kadar ilerideki bir adrese yazýlacaktýr. Bu nedenle
ötelemenin 02H deðerine çýkarýlmasý toplamýn adresinin belirlenmesi için yeterlidir.
Böylece altýncý adýmý gerçekleyecek saklama emiri 83H emir kodu 02H öteleme deðeri
olmak üzere iki baytlýk bir emir olur.
A3
0A
20
38
8B
0A
21
B0
00
83
30
1.adým
2. adým
3. adým
4. adým
Akümülatördeki toplamý (0A21H + 02H)
02
adresine yazar
Þimdi bu altý adýmdan oluþan ve beþ emirle gerçeklenecek toplamanýn, CPU
kaydedicileri kullanýlarak yapýlýþýný inceleyelim. Programýn 0100H adresinden itibaren
yerleþtirildiði ve 0A20H ile 0A21H veri bellek adreslerinde sýrasýyla 3BH ve 78H
deðerlerinin bulunduðu varsayýlsýn.
Program
bellek
Veri
bellek
Bellek
Adresleri
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
010A
0A20
0A21
0A22
0A23
A3
0A
20
38
8B
0A
21
B0
00
83
02
1.emir
2.emir
0100
3.emir
A
DC
IR
PC
I
4.emir
5.emir
3B
78
B3
Programýn koþulabilmesi için baþlangýç adresinin PC’ye yüklenmesi zorunludur.
Gerilim uygulandýðýnda veya RESET verildiðinde PC içeriði sýfýrlandýðý için CPU
0000H adresinden itibaren yerleþtirilmiþ programý koþmaya çalýþýr. Toplama programý
0100H adresine yerleþtirildiðinden PC’ye bu adresin koyulmasý gerekir. Bu iþlem yazýlým
veya donanýmla yapýlabilir. Yazýlým yönteminde 0000H adresine “JMP Adres” emirini
koymak yeterlidir. Donaným yönteminde ise, gerilim uygulandýðýnda veya RESET
verildiðinde CPU‘nun adres yollarýnda 0000H adresi yerine 0100H adresini üretecek özel
bir donaným kurulmalýdýr. Bu iþlemlerin ayrýntýlarýna burada girilmeyecek, ama 0100H
deðerinin PC’ye herhangi bir yöntemle yerleþtirilmiþ olduðu varsayýlacaktýr.
Baþlangýçta PC ile adreslenen belleðin içeriði I emir kaydediciye yüklenir ve
böylece emir kodu olarak yorumlanmasý saðlanmýþ olur. Daha sonra PC’nin içeriði CPU
tarafýndan kendiliðinden bir artýrýlýr.
31
0101
A3
A
DC
IR
PC
I
I’deki A3H emir kodu CPU’nun iki adýmlýk iþlem yapmasýna sebep olur. Ýlk
olarak PC ile adreslenen belleðin içeriði alýnýp DC’nin anlamlý yarýsýna koyulur. CPU
daha sonra PC’nin içeriðini bir artýrýr.
0A00
0102
A3
A
DC
IR
PC
I
Ýkinci olarak, PC ile adreslenen belleðin içeriði alýnýp DC’nin anlamsýz yarýsýna
yerleþtirilir. Program belleðe eriþildiðinden PC’nin içeriði bir artýrýlýr. Böylece 1. emirin
icrasý bitmiþ olur. Burada emir kodundan sonra gelen 0A20H bilgisinin program bellekten
alýnmasýna raðmen DC’ye koyulmasýna dikkat edilmelidir. Program bellekte emir
kodlarýndan hemen sonra gelen emir olmayan bilgiler yakýn (literal veya immediate) veri
olarak adlandýrýlýr.
A
DC
IR
0103
PC
A3
I
Birinci emirin icrasýnýn sonunda PC’nin içeriði 0103H olmuþtur. CPU, her emir
0A20
icrasýndan sonraki ilk program bellek eriþiminde aldýðý bilgiyi emir kodu olarak yorumlar.
Bu nedenle 0103H adresinden alýnacak 38H bilgisi de emir kodu olarak yorumlanýp I’ya
yerleþtirilirken PC’nin içeriði de bir artýrýlýr.
0A20
0104
38
A
DC
IR
PC
I
Bu emir kodu DC ile adreslenen belleðin içeriðini CPU’ya taþýr ve A
akümülatörüne koyar. Burada ne DC ne de PC’nin içeriði deðiþir. Çünkü 3BH yakýn veri
32
olmadýðýndan veri bellekten getirilmiþtir. Veri belleðin ardýþýl adresleneceðini gösteren
herhangi bir delil olmadýðýndan DC’nin içeriði bir arttýrýlmaz.
3B
0A20
0104
38
A
DC
IR
PC
I
Þimdi PC, 3. emir kodunun bulunduðu bellek bölgesini adreslemektedir. 3. emirin 1.
emirden tek farký alýnan yakýn verinin DC yerine IR’ye koyulmasýdýr. 3. emir icra
edildiði zaman CPU kaydedicileri üç adýmlýk bir deðiþim geçirir. Birinci adýmda emir
kodu I’ya taþýnýr.
3B
0A20
0105
8B
A
DC
IR
PC
I
Ýkinci adýmda 0105H adresinden 0AH alýnýp IR’nin anlamlý yarýsýna koyulur ve PC bir
artýrýlýr. Üçüncü adýmda ise 0106H adresindeki 01H alýnýp IR’nin anlamsýz yarýsýna
koyulur ve program belleðe eriþildiðinden PC yine bir artýrýlýr.
3B
A
0A20
DC
0A00
IR
0106
PC
8B
I
PC’nin içeriði sayesinde
3B
0A20
0A21
0107
8B
0107H adresindeki 4. emirin
A
DC
IR
PC
I
kodu B0H alýnýp I’ya
koyulur ve PC bir artýrýlýr. Bu emir kodu, hemen ardýndan gelen 00H öteleme verisinin
okunmasýný ve IR’ye eklenmesini gerektirir. [ IR] + 00H toplamý IR’ye yazýlmaz ama veri
bellek adresi olarak yorumlanýp veri bellekten 78H verisinin CPU’ya taþýnmasýnda
kullanýlýr.
3B
0A20
0A21
0108
B0
A
DC
IR
PC
I
3B
0A20
0A21
0109
B0
A
DC
IR
PC
I
33
B0H emir kodunun gereði olarak bu 78H verisi ile daha önce akümülatöre taþýnmýþ olan
3BH verisi ALU’da toplanarak toplam tekrar akümülatöre yazýlýr.
B3
0A20
0A21
0109
B0
A
DC
IR
PC
I
PC içeriði yardýmýyla program bellekten 5. emir kodu (83H) adreslenerek I’ya
yerleþtirilir. Bu emir kodu, ardýndan gelen yakýn veriyi alarak IR içeriðine ekler ve
bulduðu toplamý IR’ye yüklemeyip sadece bu adreste akümülatör içeriðini saklar. Saklama
emirinin 3. adýmý veri belleðe eriþimi gerektirdiði için PC içeriði deðiþmemiþtir, ama
0A23H veri bellek adresine akümülatör içeriði B3H yazýlmýþtýr.
B3
0A20
0A21
010A
83
0A20
0A21
0A22
0A23
A
DC
IR
PC
I
3B
78
B3
0A20
0A21
010B
83
A
DC
IR
PC
I
Veri
Bellek
B3
Bütün programlar mutlaka uygun bir emirle sonlandýrýlmalýdýr. Aksi halde CPU
010BH’dan itibaren var olan programý koþmaya devam edecektir. Belleðin bu alanýna
daha önce programcý tarafýndan hiçbir þey yazýlmamýþ olsa bile, gerilim uygulandýktan
hemen sonra RAM bellek içeriðinin ne olduðunu kimsenin bilmesi mümkün deðildir. Bu
alanda bazý deðerler bulunur ve CPU’da bu deðerleri emir olarak yorumlayýp koþar. Bu
durum daha önce koþulan toplama programýnýn oluþturduðu sonucun ve hatta toplama
programýn bellekten silinmesine yol açabilir.
2.4 ARÝTMETÝK VE LOJÝK BÝRÝM (ALU)
Veriler üzerindeki iþlemler CPU içinde Aritmetik ve Lojik Birim (ALU) adý
verilen bir takým ayrýk lojik tarafýndan yürütülür. ALU ikili veriler üzerinde bazý
34
aritmetik ve lojik iþlemleri yapabilecek yetenekte olmalýdýr. ALU mimarisi genelde
aþaðýdaki iþlemleri gerçekleyecek lojiðe sahip olmalýdýr.
1. Ýkili toplama
2. Boole iþlemleri
3. Veri tümleme
4. Veriyi bir bit saða veya sola kaydýrma
Basit bir ALU’da Toplama ve Boole Lojiði, Tümleyici, Kaydýrýcý ve Durum
Bayraklarý bulunur, Þekil 2.3. Toplayýcý, ikili aritmetik mantýðýna uygun olarak iki
kaydedicinin içeriklerini toplayabilecek yetenektedir. Veriler, iþlemciye bellekten veya
diðer giriþlerden gelebilir. Basit CPU’larda çarpma ve bölme iþlemleri programcýnýn
yazacaðý altprogramlarla yapýlýr. Çoðu ALU; çýkarma, Boole lojik iþlemleri ve kaydýrma
iþlemi için yerleþik (built- in) fonksiyonlar saðlar. CPU’dan istenen herhangi bir karmaþýk
veri iþlemi ALU’nun bu birimleri tarafýndan yapýlýr.
2.5 DENETLEME BÝRÝMÝ
Denetleme birimi (CU), herhangi bir iþlemi gerçeklemek için ALU’nun
elemanlarýný sýrasýyla yetkilendirir. Denetleme birimi emir kaydedicinin içeriðiyle
sürülür. Diðer bir deyiþle emir kaydedicideki emir kodu denetleme birimi tarafýndan
çözülür. Emir kodunun bit dizisine cevap olarak, denetleme birimi veri akýþýný saðlamak
ve uygun zamanda ALU elemanlarýný yetkilendirmek için bir dizi yetki iþaretleri doðurur.
Denetleme biriminin fonksiyonel biçimi Þekil 2.3’te gösterilmiþtir. Denetleme birimi
hakkýnda ayrýntýlý bilgi ilerideki kýsýmlarda verilecektir.
35
Þekil 2.3 CPU’nun genel yapýsý.
2.6 CPU BACAKLARI
8-bit veri ve 16-bit adres yoluna sahip bir CPU’nun bacak yapýsý Þekil 2.4’te
gösterilmiþtir. CPU, programla sürülen ardýþýl bir devre olduðundan iki adet besleme ve
bir veya iki adet de saat bacaðýna sahip olmalýdýr. Besleme bacaklarýna Vcc=+5V ve
GND=0V gerilimleri uygulanýr. 8080 gibi eski CPU’larda +12 Voltluk baþka bir bacak
bulunur. Günümüzde CPU’lar yalnýz tek kaynak gerektirmektedir.
Sayýsal devrelerde olduðu gibi, CPU’daki iþlemler frekansý 1-60 Mhz arasýnda
deðiþebilen bir saat (φ) tarafýndan denetlenir. Saat iþaretini üreten lojik CPU ile ayný
yonga üzerinde bulunabileceði gibi CPU dýþýnda da bulunabilir. Saat frekansýnýn kararlý
olmasý için genellikle kristalli osilatörler kullanýlýr. Saat devresi CPU içinde ise, kristalin
veya kristal yerine kullanýlacak kondansatörün CPU’ya baðlanabilmesi için CPU da iki
saat bacaðý bulunur. Bunlara örnek olarak 8085 CPU’su verilebilir. Bu CPU’lar dýþarýda
üretilen bir saat iþaretiyle de sürülebilir. Denetleme iþlerinde kullanýlmak amacýyla
geliþtirilen CPU’larýn saat devreleri, mikrobilgisayar sistemi basit olsun diye, CPU
üzerindedir. Geliþmiþ CPU’larda tek fazlý dýþ saat iþareti kulllanýlýr.
Saat iþareti (φ)
36
Vcc
GND
Saat(φ)
Adres
Bacaklarý
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
A10
A11
A12
A13
A14
A15
→ 1
→ 2
→ 3
4
← 5
← 6
← 7
← 8
← 9
← 10
← 11
← 12
← 13
← 14
← 15
← 16
← 17
← 18
← 19
← 20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
↔
↔
↔
↔
↔
↔
↔
↔
→
→
→
→
←
D0
D1
D2
D3
D4
D5
D6
D7
RD
MREQ
WR
IOREQ
WAIT
Veri
bacaklarý
(Okuma)
(Bellek isteme)
(Yazma)
(Giriþ\Çýkýþ ist.)
(Bekle)
Þekil 2.4 CPU bacak yapýsý.
Eðer bellek adresi 0-65536 arasýnda deðiþiyorsa, 16-bitlik adres yolu gereklidir.
CPU adres kaydedicilerinin 16-bitlik seçilmesinin nedeni budur. Adres bacaklarý, CPU’dan
dýþarýya bilgi taþýr, yani bunlar tek yönlü yalnýz çýkýþ olabilen uçlardýr.
Tek yonga halinde yapýlmýþ bazý CPU’larda bacak sayýsýný en az yapabilmek için
bir bacaktan birden çok amaç için yararlanma yoluna gidilir. Bu yüzden farklý zaman
dilimlerinde üretilmesi gereken iþaretlerin bir bacaktan alýnýp verilmesinde herhangi bir
sakýnca yoktur. Genellikle adres bilgisi veri bilgisinden önce gönderildiði için, adres ve
veri yollarýný ortak yapmakta bir sakýnca yoktur. Burada tek problem adresin, veri alýnýpverilirken de devam etmesidir. Bu koþulu saðlayabilmek için adres yoluna adres bilgileri
koyulduktan sonra, veri için bu yolu kullanmadan önce, adresi bir kaydediciye yazmaktýr.
Ortak adres/veri yolu Þekil 2.5’ teki gibi kurulabilir.
Tüm veriler CPU’ya 8-bitlik iki yönlü iþaretler olarak girer ve çýkar. Veri yolundan
emir kodu, yakýn veri (adres kaydedicilere koyulacak adres bilgisi), veri, ve kesmeli
37
çalýþmada kullanýlan kimlik bilgisi veya adres gönderilebilir. CPU’nun adres, veri, ve
denetim yollarýnýn hepsi YÜKSEK-Z özelliðine sahiptir.
Þekil 2.5 Ortak adres/ veri bacaklý CPU’da adres ve veri yollarýnýn ayrýlýþý.
CPU’larý tanýtan en önemli bacaklar denetim bacaklarýdýr. Her CPU’da bazý
farklýlýklar göstermelerine raðmen yaygýn olanlar burada verilmeye çalýþýlacaktýr. Bu
bacaklardan bazýlarý CPU’ya giriþ bazýlarý ise çýkýþtýr. Giriþ olan bacak çýkýþ, çýkýþ
olan da giriþ olamaz. Bir denetim bacaðýndan birçok denetim iþaretini alýp/verebilen
CPU’lar vardýr. Denetim bacaklarýnýn sayýsý CPU’dan CPU’ya deðiþebilir.
Yapýlan iþlerin ne gibi denetim iþaretleri gerektirdiðini toplama örneðini gözönüne
alarak inceleyelim. Bu amaçla emir kodu alma iþlemine iliþkin zamanlamayý vereceðiz,
Þekil 2.6. Zamanlama diyagramý basit olsun diye bütünlük arzeden en küçük iþin bir saat
periyodunda tamamlandýðýný varsayýyoruz. Gerçek CPU’larda bu iþlem birden çok saat
periyodu gerektirir. Emir kodu alýmý bir bellek okuma iþlemidir. Bu yüzden CPU’dan
belleðe gönderilen RD okuma iþareti ve MREQ bellek isteme iþareti olmalýdýr. MREQ
denetim iþareti RD iþaretinin belleðe mi yoksa giriþ/çýkýþa mý ait olduðunu gösterir. Bu
denetim iþaretleri genelde aktif alçaktýr. MREQ , alçak olduðu zaman A0-A15 adresinin
kodu çözülerek bu adresteki veri mikrobilgisayarýn veriyoluna koyulur.
38
Þekil 2. 6 Emir kodu alma zamanlamasý.
Toplama örneðindeki en basit emir DC ile adreslenen bellek içeriðini akümülatöre
koyan 38H emiridir. Her emir icrasýnda olduðu gibi, bu emirde de ilk iþlem emir kodunun
alýnmasýdýr. Emir kodu alýmý az önce anlatýlmýþ olduðundan, burada emir icrasýnýn
diðer dönemleri açýklanacaktýr. 38H emir kodu denetim biriminde yorumlanýr ve buna
cevap olarak veri bellekten verinin alýnmasýna baþlanýr. Emir icrasý esnasýnda CPU’nun
yaptýðý þey gerekli iþaretleri CPU bacaklarýnda doðurmaktýr. Veri almak için CPU’nun
ürettiði iþaretler, emir kodu almak için üretilenler ile tamamen aynýdýr, Þekil 2.7.
Þekil 2.7 Bellek okuma emirinin zamanlanmasý.
Emir kodu alýmý ile veri alýmý arasýnda iki önemli fark vardýr. Birincisi; emir
kodu alýmýnda adres yolunda PC’nin içeriði bulunduðu halde, veri alýmýnda DC’nin
içeriði bulunur. Ýkincisi; emir kodu alýmýnda alýnan bilgi emir kaydedicide saklanýrken,
veri alýmýnda akümülatörde saklanýr.
39
Toplama örneðinde farklý denetim iþareti gerektiren emir, toplamý belleðe
gönderen 83H bellek yazma emiridir. Bellek okuma ile bellek yazma emirlerinin
gerektirdiði denetim iþaretleri arasýndaki tek fark, verinin belleðe yazýlmasý esnasýnda
kullanýlan aktif alçak WR yazma iþaretidir, Þekil 2.8.
Þekil 2.8 Bellek yazma emirinin zamanlanmasý.
Zamanlama diyagramýndan görüleceði üzere; veri bellek adresi, indeks kaydedici
içeriðiyle 2. saat periyodunda program bellekten alýnan öteleme bilgisinin toplamý olarak,
3.saat periyodunda CPU içinde hesaplanýr. 3. saat periyodunda CPU bacak iþaretlerinde
herhangi bir deðiþim olmaz.
Veri sayýcýyý yükleyen emir üç bellek adresi iþgal eder. Veri sayýcýyý yükleme ve
bellek okuma emirleri için CPU içindeki lojik iþlemler tamamen farklý olmasýna raðmen,
CPU dýþýndaki olaylar her iki emir için oldukça benzerdir, Þekil 2.9. Veri sayýcýyý
yükleme emiri, aþaðýdaki farklar hariç, iki bellek okuma iþlemine eþdeðerdir.
1. A3H veri sayýcýyý yükle emir kodu iki bellek okuma iþlemi gerçekleþtirdiði
halde, 38H bellek okuma emir kodu yalnýz bir bellek okuma iþlemi gerçekleþtirir.
2. Veri
sayýcýyý yükle emiri, PC ile adreslenen bellek bölgesinden verileri
almasýna karþýn, bellek okuma emiri DC ile adreslenen bölgeden veriyi alýr.
40
3. Veri sayýcýyý yükle emiri, bellekten okunan verileri DC’ye koyar. Halbuki
bellek okuma emiri veriyi akümülatöre koyar.
CPU’da bulunan diðer denetim bacaklarýnýn türetilmesine ilerideki konularda
devam edilecektir.
Þekil 2.9 Veri sayýcýya yükleme emirinin zamanlanmasý.
2.7 EMÝR KARMAÞIKLIÐI
Emir karmaþýklýðý, bir emire yüklenebilecek iþ miktarýný gösterir. Basit emirlerin
kullanýlmasý denetim birimindeki mikroprogramlarý basitleþtirir. Çok sayýda emirin
kullanýlmasý ise mikroprogramlardan oluþan denetim biriminin büyümesine yol açar.
Yarýiletken
teknolojisindeki
geliþmeler sonucunda,
bir CPU yongasýnda
yerleþtirilebilecek tranzistör sayýsý oldukça büyük deðerlere çýkarýlmýþtýr. Bu gösteriyor
ki, CPU’nun denetim birimi çok sayýda büyük mikroprogramlarý içerebilecek biçimde inþa
edilebilir. Sýnýrlama sadece emir sayýsýnýn, yani mikroprogramýn, çok fazla olmasý
durumunda emir kodu çözümünün uzun süre almasýndan gelir. Ama deneyimler gösterdi
ki, orta derecede karmaþýk ama eþit icra süreli emirlerin kullanýlmasý CPU performansýný
artýrmýþtýr. RISC (Ýndirgenmiþ Emir Takýmlý Bilgisayar) bu düþüncenin ürünüdür.
Þimdi daha basit ve daha karmaþýk emirlerin kullanýlmasý durumunda nelerin
olabileceðini görelim.
41
Veri sayýcýyý yükleme emiri, emir kodunu izleyen iki 8-bitlik veriyi DC’ye
yüklüyordu. Þimdi bu emiri, biri DC’nýn anlamsýz yarýsýný diðeri de anlamlý yarýsýný
yüklemek üzere iki emire bölelim, Þekil 2.10.
A3
0A
20
0A00H hazýr
verisini DC’ye
yükle
A4
0A
A5
20
(a)
DC’nin anlamlý yarýsýna
0AH hazýr verisine yükle.
DC’nin anlamsýz yarýsýna
00H hazýr verisini yükle.
(b)
Þekil 2.10 (a) 3-baytlýk veri sayýcý yükleme emiri,
(b) iki adet 2-baytlýk veri sayýcý yükleme emiri.
3-baytlýk veri sayýcýyý yükleme emirinin iþaretleri ve zamanlamasý daha önce
verilmiþti. Þimdi iki adet 2-baytlýk emirin herbirine iliþkin iþaretleri ve zamanlamayý
verelim, Þekil 2.11.
Þekil 2.11 Ýki adet 2-baytlýk veri sayýcýyý yükleme emiri.
3-baytlýk veri sayýcýyý
yükleme emirini
iki adet 2-baytlýk emire ayýrmak,
CPU’nun dýþ lojikten olan isteklerini azaltmaz, ama CPU’nun denetleme birimini
basitleþtirir. Ayrýca, zamanlama diyagramýndan görülebileceði gibi icra süresi 3’ten 4 saat
periyoduna çýkmýþtýr.
Daha karmaþýk emir yapmak amacýyla veri sayýcýyý yükleme emiriyle bellek
okuma emirini birleþtirelim, Þekil 2.12.
42
39
0A
20
Bu 3-baytlýk emirin son iki baytý
ile adreslenen belleðin içeriðini akümülatöre yükle.
Þekil 2.12 Doðrudan adresleyen veri yükleme emiri.
Bu emirde olduðu gibi, referanslanacak bellek adresini kendisi belirleyen emirlere
doðrudan bellek adreslemeye sahiptir denir. Doðrudan adreslemeli bu bellek okuma
emirinin iþaretleri ve zamanlamasý Þekil 2.13’te gösterilmiþtir. Doðrudan adresleyen
emirler karmaþýk denetim birimi gerektirir. Ama Þekil 2.13’ten görülebileceði üzere;
akümülatöre 3BH verisinin koyulmasý iþlemi, doðrudan adresleme sayesinde 5’ten 4 saat
periyoduna inmiþtir.
Þekil 2.13 Doðrudan adresleyen bellek okuma emiri zamanlamasý.
Buna raðmen doðrudan adreslemenin istenmediði uygulamalar da vardýr. Doðrudan
adresleme, veri bellek adresi yanlýz bir kere kullanýlacaksa veya hiç deðiþtirilmeden
defalarca
kullanýlacaksa
elveriþli
olmaktadýr.
Eðer
bir
veri
adresi
küçük
güncelleþtirmelerle defalarca kullanýlacaksa, bu veri adresini DC’ye koyup DC üzerinden
veri belleði adreslemek çok daha elveriþlidir. Bu durumu veri tablolarýnýn referanslanmasý
örneðiyle açýklayalým.
Dýþ cihazdan 8-bitlik verileri alýp bellek adreslerinde peþpeþe saklayan bir
program düþünelim. RAM’da peþpeþe dizilen bu veriler veri tablosu oluþturur, Þekil 2.14.
43
0B20
0B21
0B22
0B23
0B24
0B25
0B26
Akümülatör
Dýþ cihazdan
verilerin geliþi
Þekil 2.14 Veri tablosunun referanslanmasý.
Þimdilik veri tablosunda kaç adet verinin saklanacaðýný gözönüne almazsak, Þekil
2.15’teki emir dizisi veri tablosunu doldurabilecektir.
Program
bellek
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209
A3
0B
20
DB
28
60
22
BC
FA
DC’ye 0B20H hazýr verisini koy
28H adresli dýþ cihazdan 8-bitlik
veriyi akümülatöre gir
DC ile adreslenen bellek bölgesine akümülatör içeriðini gönder
DC’yý bir artýr
PC’nýn içeriðini 0203H deðerine indir
Þekil 2.15 Dýþ cihazdan gelen verileri tabloya yerleþtiren program.
Programýn ilk emiri veri tablosunun 0B20H baþlangýç adresini DC’ye yükler.
Ýkinci emir 28H adresli dýþ cihazdan akümülatöre 8-bitlik verileri girer. Üçüncü emir
DC’nin gösterdiði bellek adresine akümülatör içeriðini yazar. Dördüncü emir, daha sonra
gönderilecek veri için veri tablosu adresinin DC’de üretilmesini saðlar. Son emir 2., 3., ve
diðer verilerin ayný program emirleriyle veri tablosuna yerleþtirilmesini saðlamak
amacýyla PC içeriðini 0203H deðerine indirir, yani PC içeriðinden 06H deðerini çýkarýr.
Böylece programýn
icrasý dýþ cihazdan bir sonraki veriyi akümülatöre giren emire
yönlendirilmiþ olur. Bir program parçasýnýn defalarca koþulmasý program döngüsü
olarak bilinir.
Þimdi imalý adresleme, yani DC üzerinden veri bellek adresleme, yerine doðrudan
adresleyen emirler kullanarak ayný veri tablosunu dolduran bir program yazalým, Þekil
2.16. 61H emir kodu, ardýndan gelen iki bayt ile adreslenen bellek bölgesine akümülatör
44
içeriðini yazar. Daha sonra gelecek veriler için 0203H ve 0204H adreslerindeki veri bellek
adresi her defasýnda bir artýrýlarak güncelleþtirilmelidir. Ancak RAM bellekte bu adresi
bir emirle güncelleþtirmek mümkün deðildir, çünkü veri bellek adresinin hem anlamsýz
hem de gerektiðinde anlamlý yarýsý bir artýrýlmalýdýr. Program ROM bellekte ise
güncelleþtirme hiç mümkün deðildir, çünkü ROM belleðe yazma yapýlamaz.
Program
bellek
0200
0201
0202
0203
0204
0205
DB
28
61
0B
20
28H adresli dýþ cihazdan 8-bitlik veriyi
akümülatöre gir
Emirin 2. ve 3. baytlarý ile adreslenen
veri bellek adresine akümülatör içeriðini yaz
Veri bellek adresini bir artýr, ama nasýl?
Þekil 2.16 Doðrudan adresleyen emirli tablo doldurma programý.
Veri tablo örneðinde verileri dýþ cihazdan akümülatöre giren yeni bir giriþ emiri ile
tanýþtýk. Dýþ cihazlarýn sayýsý bellek hücrelerinin sayýsýndan çok az olduðundan, bir
baytlýk adres tüm dýþ cihazlarý adreslemek için çoðu kez yeterli olmaktadýr. Bu emirin
icrasý yeni bir denetim iþaretini yani IOREQ giriþ/çýkýþ isteme iþaretini gerektirir. Bu
IOREQ denetim iþareti, adres yolundaki adresin belleðe deðil, bir giriþ/çýkýþ cihazýna ait
olduðunu gösterir. Emirin zamanlanmasý Þekil 2.17’de gösterilmiþtir.
45
Þekil 2.17 Giriþ emirinin zamanlamasý.
Veri sayýcýyý bir artýrma emiri, veri sayýcýnýn içeriðini bir artýrýr. Bu iþlemde
CPU dýþýndaki lojik emir kodu alýmýndan sonra boþ kalýr, Þekil 2.18. CPU iþlem emiri
olarak bilinen bu emirlerin icrasý esnasýnda, yetenekli CPU’lar yollarý boþ býrakmayarak,
yani dýþ lojik ile iliþkisini kesmeyerek, daha sonra icra edilecek emirlerin CPU’ya
taþýnmasýný gerçekler. CPU’ya taþýnan emirler yýðýn (stack) adý verilen küçük bir
bellekte tutulur. CPU daha sonra yýðýndaki hazýr emirleri icra ettiðinden, emir alýmý için
zaman harcamamýþ olur; ve böylece program icra süresi küçülmüþ olur. Ancak önceden
emir almanýn yararlý olmayacaðý durumlar da vardýr. Koþullu emirlerin peþinden gelen
emirlerin icrasý koþulun saðlanmasýna baðlý olduðundan, önceden yýðýna taþýnmýþ olan
koþulmasý koþula baðlý program parçasý bazen icra edilmeden yýðýndan atýlmak zorunda
kalabilir. Bazý CPU’lar yollarýn boþ kaldýðý anlarda dinamik belleklerin tazelenmesi
iþlevini gerçekler.
Tablo doldurma örneðinde bir baþka yeni emir, PC içeriðini deðiþtirerek program
icrasýný programýn baþka bir noktasýna yönlendiren emirdir. Böyle icra yönlendirme
emirlerine dallanma (branch) veya atlama (jump) emirleri denir.
Mutlak ve baðýl olmak üzere iki farklý yönlendirme vardýr. Bütün yönlendirmeler
koþullu olabilir. Mutlak yönlendirmede PC’nin her iki yarýsý amaç (destination) adresiyle
yüklenir. 16-bitlik adres kullanýldýðýndan böyle bir emirin emir koduyla birlikte en az 3baytlýk olmasý gerekir. Amaç adresi Þekil 2.19’daki gibi PC’ye BD emiriyle yüklenebilir.
Þekil 2.18 CPU iþlem emiri zamanlamasý.
46
0207
0208
0209
BD
02
03
0209
BD
Emir
esnasýnda
PC
I
icrasý
0207
0208
0209
BD
02
03
0203
PC
BD
I
Emir icrasý sonunda
Þekil 2.19 Mutlak atlama.
Bu örnekte PC’nin yalnýz anlamsýz yarýsýnýn 03H deðeriyle yüklenmesi, istenen
program yönlendirmeyi saðlayabilirdi. Üstelik amaç adresi bir bayt küçüleceðinden 2baytlýk emir yeterli olacaktý. Ancak programýn sayfa sýnýrýna yerleþtirilmesi durumunda
2-baytlýk böyle bir yönlendirme emiri çalýþmaz, Þekil 2.20.
Çünkü sayfa sýnýrýnda
PC’nin her iki yarýsý da deðiþtirilmiþtir. Programýn icrasý 02FFH yerine 03FFH’e
yönelecektir. Küçük adres kullanmanýn yolu PC’ye göre baðýl atlama yapmaktýr.
Baðýl yönlendirmede emir kodundan sonra gelen deðer iþaretli sayý olarak PC
içeriðine eklenir. Tablo doldurma programýnda, Þekil 2.15, 0207H ve 0208H
adreslerindeki emir bir baðýl atlama emiridir. FAH öteleme bilgisi bellekten alýndýðý
zaman PC’de 0209H deðeri oluþmuþtur. Program icrasý 0203H adresine yönlendirilmek
istendiði için 06H kadar programda geri gidilmesi gerekir. Ýleri yöndeki atlamalar pozitif,
geri yöndeki atlamalar ise negatif deðerle gösterildiðinden, 06H pozitif sayýsýnýn negatifi
(FAH) alýnmalýdýr. PC içeriðinin 16-bit olmasý farklý bit uzunluðundaki sayýlarýn
toplanmasýný gerektirir. Sayýlarý ayný uzunlukta yapabilmek için FAH öteleme bilgisi,
iþaret biti tekrarlanarak FFFAH biçiminde yazýlýr.
PC (eski)
Öteleme
0000 0010 0000 1001 = 0209H
1111 1111 1111 1010 = FFFAH
PC(yeni) 0000 0010 0000 0011 = 0203H
Ýletilen
Ýþaret biti
iþaret biti
02FC
02FD
A3
0B
DC’yý 0B20H ile yükle
47
02FE
02FF
0300
0301
0302
0303
0304
0305
20
DB
28
60
22
BE
FF
28H adresli dýþ cihazdan
8-bitlik veriyi akümülatöre gir
Akümülatör içeriðini DC ile adreslenen yere yaz
DC’yý bir artýr
FF’ e atla
Þekil 2.20 Sayfa sýnýrýna yerleþtirilmiþ küçük amaç adresli mutlak yönlendirmenin þaþýrmasý.
Ýleri yöndeki atlamalar için öteleme bilgisi pozitif olacaðýndan, hem iþaret biti
hem de iletilen iþaret biti sýfýr olacaktýr. Baðýl atlama emirlerinde öteleme bilgisi 8-bitlik
iþaretli sayý olduðundan, programda en fazla +127 bayt ileri ve -128 bayt geri atlanabilir.
Bu tür atlama emirleri her CPU’da vardýr ve genellikle koþullu emirlerdir. Daha uzun
atlamalar için biri baðýl diðeri mutlak iki atlama emiri kullanýlabilir.
CPU ve bellekten oluþan en basit mikrobilgisayarýn uyum içinde çalýþabilmesi bu
iki elemanýn hýz uyumluluðuna baðlýdýr. Hýz uyumluluðu her zaman saðlanamayabilir.
Bellek, bilgisayar maliyetini belirleyen en önemli faktörlerden biridir. Ucuz bilgisayar
yapýlmak istendiðinde, ucuz bellek kullanma yoluna gidilir. Ucuz belleklerin genelde
hýzlarý düþük olduðu için, CPU ile hýz uyuþmazlýðýna sebep olurlar. Bu hýz
uyuþmazlýðý sorununun çözümü, hýzlý çalýþan elemaný yavaþlatarak yavaþ çalýþanýn
hýzýna uydurmaktýr.
Bu iþ CPU’lardaki WAIT (bekle) giriþi ile yürütülür. CPU, RD veya WR iþaretini
alçak yaptýktan belli bir süre sonra, WAIT giriþinde isteðin olup olmadýðýný test eder.
Yavaþ çalýþan cihaz test iþleminden önce bekle isteðini CPU’ya göndermiþ olmalýdýr.
CPU, isteðe rastlarsa RD veya WR denetim iþaretini bir saat periyodu uzatýr, ve bir saat
periyodu sonunda yeniden test eder. WAIT giriþinde istek iþaretine rastladýðý sürece CPU
bu denetim iþaretlerini her defasýnda bir saat periyodu uzatýr, Þekil 2.21.
48
Þekil 2.21 Bekleme durumu zamanlamasý.
WAIT iþaretinin amacý her türlü okuma veya yazma iþlemi için RD veya WR
iþaretlerinin süresini uzatmaktýr. Bu yüzden okuma veya yazma gerektiren her makina
periyodunda WAIT iþareti CPU’ya gönderilebilir. Yetenekli olmayan cihazlar için, bu
iþaret onlarýn adýna özel bir devrede üretilir. Beklemenin ne kadar süreceðini mikro–
bilgisayar
tasarýmcýsý bilmelidir. Sonuç olarak CPU’nun denetim hatlarý, WAIT
iþaretinin ilavesiyle bir artmýþ olur.
2.8
DENETÝM
BÝRÝMÝ
VE
MÝKROPROGRAMLAMA
Denetim birimi tasarýmcý açýsýndan bilgisayarýn en karmaþýk birimidir. Görevi
bilgisayardaki diðer birimlerin gerektirdiði denetim iþaretlerini üretmektir. Bir emir
periyodu üç dönemden oluþur: Emir kodu alýmý (fetch), etkin adresin hesaplanmasý, ve
icra. Bu dönemlerin herbiri birkaç mikroemirden oluþur, ve mikroemirler de yalnýz bir
kaydedici transferine veya bir aritmetik veya lojik iþlemli kaydedici transferine karþý
düþer. Þekil 2.22’de akümülatör içeriðini ALU’ya taþýyarak bir artýran bir INC A emirinin
mikroemirleri gösterilmiþtir.
Aslýnda CPU, bir dizi denetim iþaretleri tarafýndan harekete geçirilen, yani
yetkilendirilen, çok sayýda lojik elemandan oluþmuþ bir ardýþýl lojik devredir. Yetki
iþaretleri mikroemirlerin kodu çözülerek üretilir. Þimdi bu yetki iþaretlerinin üretildiðini
varsayarak, INC A emirinin icra adýmlarýný inceleyelim.
49
(1) Akümülatör içeriðini iç veri yoluna taþý.
(2) Ýç veri yolunu ALU ya gönder.
(3) Bir artýrmak amacýyla ALU lojiðini yetkilendir.
(4) ALU içeriðini iç veri yoluna taþý.
50
(5) Ýç veri yolu içeriðini akümülatöre taþý.
Þekil 2.22 Akümülatör içeriðini bir artýran mikroprogramýn icrasý.
Akümülatör içeriðini bir artýrmak için beþ adýmlýk iþlem yapýldý. Bu adýmlarýn
herbiri bir mikroemir tarafýndan gerçeklendi. O halde mikroemir en küçük iþi gerçeklemek
amacýyla CPU’daki birimleri yetkilendirmek için kullanýlan ikili kod dizisidir. Denetim
birimi herhangi sayýda mikroemiri sýralayarak belirli bir iþi yerine getirebilir. Bu
mikroemir dizisine makroemir denir, ve assembli dili emir koduna CPU’nun cevabýný
teþkil eder.
Akümülatör içerðini bir artýr emirinde olduðu gibi, belirli bir iþi yapan denetim
birimindeki mikroemir dizisine mikroprogram denir. Herhangi bir mikroemire iliþkin
iþlemlerin karmaþýklýðý, makroemir icrasýnýn baþlattýðý mikroprogram büyüklüðünün
fonksiyonudur. Herhangi bir makroemir koduna cevap olarak icra edilen mikroprogramýn
sonu tamamen tasarýmcýnýn görüþüne kalmýþtýr. Karmaþýk mikroprogramlar geniþ
denetim birimi gerektirir. Mikroprogramlar birçok kere tekrarlanan mikroemir dizilerinden
oluþabilir. Kendisine çok sýk ihtiyaç duyulan mikroemir dizileri yeniden kullanýlarak
tekrar tekrar yazýlmalarýnýn önlenmesi yararlýdýr.
Mikroprogramlý denetleme birimi yöntemi, donanýmsal (hardwired) denetleme
birimi yönteminden daha esnektir, çünkü emirin anlamý mikroemir dizisi yeniden
düzenlenerek deðiþtirilebilir, ve yeni mikroiþlem dizileri içeren bir ROM ilave ederek emir
takýmý büyütülebilir. Bu gerçeklemede donanýmdaki deðiþim en azdýr. Donanýmsal
yöntemde, emir takýmýndaki herhangi bir deðiþme donanýmsal lojikte büyük deðiþim
gerektirir. Ama mikroprogramlý yönteme göre daha hýzlý çalýþýr ve bu yüzden denetleme
biriminin hýzlý çalýþmasý gereken yerlerde kullanýlýr.
Mikroprogramlý bilgisayarlarda, kullanýcý tarafýndan mikroprogramýn deðiþtirile–
bilme
derecesi
makinadan
makinaya
deðiþir.
Bazý
makinalar,
kullanýcýnýn
51
mikroprogramý deðiþtirmesine izin vermez, bazýlarý kýsmen deðiþimlere ve ilavelere izin
verir, ve bazýlarý ise kendi emir takýmýna sahip deðildir ve kullanýcýnýn uygulamasýna
uygun tüm emir takýmýnýn mikroprogramlanmasýna izin verir. Bu tür makinaya yumuþak
makina veya mikroiþlemci dilimine dayalý makina denir.
2.9
MÝKROÝÞLEMCÝYE
DAYALI
MÝKROBÝLGÝSAYAR
Bu bilgisayarlarda CPU’ya eriþme imkaný vardýr, ama denetim birimine
eriþilemez. Assembli dili emir takýmý olarak adlandýrýlan makroemirleri kullanarak CPU
lojiðini sýralamak mümkündür. Ama bu mikrobilgisayarlarý mikroprogramlamak mümkün
deðildir.
Mikroprogram yapýmýna geçmeden önce, mikroemir bit uzunluðunu belirleyelim.
Bu bölümün baþýnda incelenecek CPU için kelime uzunluðu 8-bit olarak seçilmiþti. Bu
kelime boyu, emir kodlarýn gösterilmesine ilave olarak karakterlerin ve sayýsal verilerin de
gösterilebilmesinde kullanýþlýdýr. Denetim birimi, sayýsal veri veya emir kodlarýný
göstermediðinden, mikroemir
bit uzunluðu mikrobilgisayarýn ihtiyacýna baðlý olarak
keyfidir. Daha doðrusu CPU karmaþýklýðýnýn bir fonksiyonudur. Mikroemir kodundan
çok sayýda yetki iþareti üretilecekse, o zaman mikroemir bit uzunluðu büyük olmalýdýr.
Burada 9-bitlik mikroemirlerin kullanýldýðý varsayýlacaktýr.
Bu bölümde geliþtirilmeye çalýþýlan CPU’nun ayrýntýlý yapýsý Þekil 2.23’te
gösterilmiþtir. Denetleme biriminden adreslenerek dýþarý alýnan mikroemir kodlarý
kodçözücülerde yorumlanarak, CPU birimlerini aktif duruma sokacak yetki iþaretleri
üretilir. Mikroemir bitlerinin nasýl yorumlanacaðý Tablo 2.1, 2.2, ve 2.3’te gösterilmiþtir.
C0≠C1 iken; C2, C3, C4, C5, C6 bitlerinin kodu, veri akýþýný seçmek üzere Tablo 2.2’deki
gibi seçilebilir.
52
Þekil 2.23 Denetim birimi iþaretleri.
Tablo 2.1’den görüleceði üzere C0 = C1 = 1 iken denetim yolunda denetim iþaretleri
üretilmektedir. C2 = 1, C3 = 1 ve C4 = 0 ise; C5, C6, C7 ve C8 bitleri, denetim biriminin
yonga uçlarýndan sýrasýyla MREQ, IOREQ, WR ve RD denetim iþaretlerini dýþarý
gönderdiði varsayýlsýn.
Tablo 2.1 Mikroemir bitlerinin anlamý .
Bit
C0 = 0, C1 = 0
C0 , C1
C0 = 1, C1 = 0
Görevi
; Ýç Veri Yolundan veya Adres Kaydediciden veri
alýnmaz veya verilmez. ALU iþlemleri yapýlýr.
; Ýç Veri Yoluna veya Adres Kaydediciye veri
53
gönderilir.
; Ýç Veri Yolundan veya Adres Kaydediciden veri
atýlýr.
C0 = 1, C1 = 1
; Denetim yolunda denetim iþareti üretilir veya bayrak
testi yapýlýr.
,
bu dört bitin kodu özel veri akýþýný seçmek için
C0 ≠ C1 iken
Tablo 2.2’deki gibi çözülür
C0 = C1 = 0 iken , bu üç bitin kodu ALU iþlemlerini seçmek için Tablo
2.3’teki gibi çözülür
C0 = C1 = 1 iken , eðer C3C2=11 ve C4=0 ise, o zaman C5, C6, C7, C8
bitleri sýrasýyla MREQ, IOREQ, WR, RD’e karþý
düþer. Eðer C3C2 = 01 veya 10 ise, hangi bayraðýn
inceleneceðini gösterir.
C0 = 0, C1 = 1
C2 , C3 , C4 , C5
C6 , C7 , C8
C5 , C6 , C7 , C8
Tablo 2.2 C0≠C1 iken veri akýþý seçimi.
C6 C5 C4 C3 C2
0 0 0 1 0
0 1 1 0 0
0 0 1 0 0
0 1 0 0 0
0 0 0 0 1
1 0 0 0 0
1 1 0 0 0
1 0 1 0 0
1 1 1 0 0
1 0 0 1 0
1 1 0 1 0
1 0 1 1 0
1 1 1 1 0
1 0 0 0 1
1 1 0 0 1
1 0 1 0 1
1 1 1 0 1
1 0 0 1 1
1 1 0 1 1
1 0 1 1 1
1 1 1 1 1
0 1 0 1 0
0 1 1 1 0
0 1 1 1 1
0 0 1 1 0
0 0 1 1 1
C8
C7
Görevi
ATK anlamlý bayt
ATK anlamsýz bayt
GRC
GRB
Veri Kaydedici
Akümülatör
DC anlamlý bayt
DC anlamsýz bayt
PC anlamlý bayt
PC anlamsýz bayt
Emir Kaydedici
Durum Kaydedici
Kaydýrýcý
Tümleyici
ALU latch
Veri Tampon Kaydedici
Veri Kaydedici
DC
PC
SP
IR
ATK (Adres Tampon Kaydedici)
IR anlamlý bayt
IR anlamsýz bayt
SP anlamlý bayt
SP anlamsýz bayt
C6
C5
C4
0
C3
1
C2
1
C1
1
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Veri Tampon Kaydedici
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Adres Kaydedici seçme
Adres Kaydedici seçme
Adres Kaydedici seçme
Adres Kaydedici seçme
Adres Kaydedici seçme
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Ýç Veri Yolu seçme
Yetki
Ýþaretle
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
C0
1
Çýkýþ denetim iþaretlerini
üretileceðini gösterir
Bu bitin deðeri MREQ’i belirler
54
Bu bitin deðeri IOREQ’i belirler
Bu bitin deðeri WR’i belirler
Bu bitin deðeri RD’i belirler
C0 = C1 = 0 iken C2 = C3 = C4 = 0, C5 = 1 olduðunda; C6-C8 bitlerinin kodu, denetim
birimindeki 8 aritmetik-lojik iþlemden birini belirlemek için Tablo 2.3’teki gibi çözülür.
Bu iþlemler burada tümleme, kaydýrma, toplama, ALU latch içeriðini bir artýrma/ azaltma,
ve bilinen bazý lojik iþlemler (AND, OR, XOR) olarak seçilmiþtir.
C8
C7
C6
C5
1
C4
0
C3
0
C2
0
C1
0
C0
0
ALU iþlemlemi yapýlýr
Lojik iþlem türünü gösteren kod
C0 = C1 = 1 iken, C3C2 = 01/10 ise; C, O, Z, S durumlarý denetim görevini yapmak
üzere incelenir. Eðer C3C2 = 01 ise, o zaman C5, C6, C7, C8 sýrasýyla Z, S, O, C
durumlarýna karþý düþtüðü þeklinde yorumlanabilir. Eðer C4 = 0 ise ALU’daki durumlar
incelenir. C5-C8 bitlerinin lojik-1 olup olmadýðý test edilir ve lojik-1 deðerli olanlara karþý
düþen durum incelenir. Ýncelenen durum 1 deðerine sahipse, o zaman bir sonraki emir
atlanýr.
C8
C7
C6
C5
C4
C3
0
C2
1
C1
1
C0
1
Durum = 1 olmasý halinde bir
sonraki emiri atla
0 =ALU durumlarýný belirtir
1 =CU veri tampon durumunu belirtir
Z = 1 ise durum seçilir ve
S
1 olup olmadýðý incelenir
O
C = 0 ise durum incelenmez.
Eðer C3C2= 10 ise; ilgili durumlar, bir sonraki emiri atlamak için gerekli koþul
olarak “ 0 ” deðeri için incelenecektir.
C8
C7
C6
C5
C4
C3
1
C2
0
C1
1
C0
1
Durum = 0 olmasý halinde bir
sonraki emiri atla
0 =ALU durumlarýný belirtir
55
1 =CU veri tampon durumunu belirtir
Z = 1 ise durum seçilir ve
S
0 olup olmadýðý incelenir
O
C = 0 ise durum incelenmez.
Tablo 2.3 ALU seçme iþaretleri
C8 C7 C6
0 0 0
1 0 0
0 1 0
1 1 0
0 0 1
1 0 1
0 1 1
1 1 1
Görevi
Kaydýrýcýyý seç
Tümleyiciyi seç
Toplayýcýyý seç*
AND lojiðini seç*
OR lojiðini seç*
XOR lojiðini seç*
ALU latch içeriðini 1 artýr
ALU latch içeriðini 1 azalt
* Ýþlem ALU latch içeriði veya tampon kaydedici içeriði üzerinde gerçekleþtirilir.
Sonuç ALU latchlarýnda tutulur.
Veri akýþýný düzenleyen ve CPU içindeki gerekli birimleri yetkilendiren iþaretlerin
mikroemir kodundan nasýl üretilebileceði belirlenmiþ bulunuyor. Þimdi basitten
baþlayarak ilk olarak makroemir kodu alýmýna iliþkin mikroemir dizisi yazýlacaktýr. Her
emir icrasý, emir kodu alýmý ile baþlar. Bu yüzden emir kodu alma mikroemir dizisi, emir
icrasýndaki herhangi bir diziden önce gelmelidir. Bu dizi Tablo 2.4’te verilmiþtir.
9-bitlik ilk mikroemirde C0 = 1 ve C1 = 0 yapýlarak bilginin veri yoluna veya adres
kaydediciye taþýnacaðý tanýmlanýr ( Tablo 2.1’e bakýnýz ). C6C5C4C3C2 = 11011
yapýlmasý PC içeriðinin adres kaydediciye gönderileceðini gösterir ( Tablo 2.2’ye
bakýnýz). Ayný anda ALU iþlemi yapýlamayacaðý için; E3 yetkisi, kodçözücüyü aktif
yapmayacaktýr. 1. mikroemir PC içeriðini adres kaydediciye taþýyarak, emir kodu adresi
program belleðe gönderilmiþ olur. 2. mikroemirde RD ve MREQ iþaretleri aktif WR
iþareti pasif yapýlarak bellekten emir kodunu vermesi istenir. Bu isteðe 3-13 mikroemirleri
arasýnda belleðin cevap vermesi gerekir.
Tablo 2.4 Emir kodu alma mikroemir dizisi.
Emir
numarasý
1
2
3
56
Mikroemir kodu
C8 C7 C6 C5 C4 C3 C2 C1 C0
1 1 1 1 0 1 1 0 1
0 1 1 0 0 1 1 1 1
1 1 1 0 0 1 0 0 1
Görevi
PC’yi AR’ye taþý
RD ve MREQ’i ALÇAK, WR ve IOREQ’i YÜKSEK yap
PC’nin anlamsýz baytýný Ýç Veri Yoluna taþý
4
5
6
7
8
9
10
11
12
13
14
15
1
0
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
1
1
1
0
1
1
1
1
1
1
1
1
0
1
1
0
1
1
1
1
1
0
0
0
0
1
0
0
0
0
1
1
0
0
0
0
1
0
0
1
0
0
0
0
1
1
0
1
0
0
1
0
0
1
0
1
0
1
0
0
1
0
1
1
0
0
1
0
1
0
0
1
0
1
0
1
0
1
0
1
0
Ýç Veri Yolunu ALU latchlarýna taþý
ALU latch içeriðini 1 artýr.
ALU latch içeriðini Ýç Veri Yoluna taþý
Ýç Veri Yolunu PC’nin anlamsýz baytýna taþý
PC’nin anlamlý baytýný Ýç Veri Yoluna taþý
Ýç Veri Yolunu ALU latchlarýna taþý
C = 0 ise bir sonraki emiri atla
ALU latch içeriðini1 artýr
ALU latch içeriðini Ýç Veri Yoluna taþý
Ýç Veri Yolunu PC’nin anlamlý baytýna taþý
VR’yi Ýç Veri Yoluna taþý
Ýç Veri Yolunu I’ya taþý
Her emir kodu alýmýnda gerektiði gibi, 3-13 mikroemirleri PC’yi 1 artýrýr. PC 16bitlik ve CPU içindeki lojik 8-bitlik olduðundan PC’nin 1 artýrýlmasý 2 adýmda yapýlýr.
3-7 mikroemirleri PC’nin anlamsýz yarýsýný 1 artýrýr. Eðer bu artýrma ALU’daki eldenin
birlenmesiyle sonuçlanýrsa, o zaman PC’nin anlamlý yarýsý da bir artýrýlmalýdýr. Eðer
elde birlenmezse 11 mikroemiri atlandýðýndan PC’nin anlamlý yarýsý deðiþmeden kalýr.
9-13 mikroemirleri PC’nin anlamlý yarýsýný iþler. 14-15 mikroemirleri veri kaydediciden
emir kodunu I’ya taþýr.
Denetleme birimi ALU’daki durum latchlarýný herhangi bir anda deðerlendirebilir.
PC artýþýný denetleme aracý olarak elde (C) durumunun kullanýlmasý, denetleme
biriminde elde durumu geçici olarak kaydedilmiþ ise geçerlidir. Assembli dili emirleri, CU
veri tamponunda saklanan durumlarý deðerlendirir, ALU’dakileri deðerlendiremez. ALU
latchlarýndaki durumlar CU veri tamponunda saklanacaksa, en anlamsýz iki biti C0 = C1 =
1 olan bir mikroemir koþulmalýdýr.
Akümülatör içeriðini bir artýrabilmek için daha önce açýklanan beþ adýmlý diziyi
yazalým. Eðer emir kodu alma programýnýn 15. mikroemirinde emir kaydediciye yüklenen
kod akümülatör içeriðini bir artýran emir kodu ise, o zaman denetleme birimi Tablo 2.5’te
gösterilen mikroemir dizisine baþvurur.
Tablo 2.5 Akümülatör içeriðini bir artýran mikroemir dizisi.
Emir
Numaras
ý
1
2
3
Mikroemir kodu
C8 C7 C6 C5 C4 C3 C2 C1 C0
Görevi
1 1 1 0 0 0 0 0 1
1 1 1 1 0 0 1 1 0
0 1 1 1 0 0 0 0 0
Akümülatörü Ýç Veri Yoluna taþý
Ýç Veri Yolunu ALU latchlarýný taþý
ALU latch içeriðini 1 artýr
57
4
5
1 1 1 1 0 0 1 0 1
1 1 1 0 0 0 0 1 0
ALU latch içeriðini Ýç Veri Yoluna taþý
Ýç Veri Yolunu Akümülatöre taþý
Ýmalý adresleme veya doðrudan adresleme yöntemini kullanarak veriyi
akümülatöre yerleþtirebilen emirlere iliþkin mikroemir dizileri Tablo 2.6 ve 2.7’de
gösterilmiþtir. Mikroprogramlarýn birçok kere tekrarlanan
mikroemir dizilerinden
oluþtuðu bu tablolardan görülmektedir. CPU tasarýmcýsý, kendisine çok sýk ihtiyaç
duyulan mikroemir dizilerini yeniden kullanarak onlarýn tekrarlanmalarýný önlemeye
çalýþmalýdýr.
Tablo 2.6 Ýmalý adresleme ile akümülatörün yüklenmesi.
(a) Veri sayýcýyý yükleyen mikroemir dizileri.
Emir
Numaras
ý
1
.
.
14
15
Mikroemir kodu
C8 C7 C6 C5 C4 C3 C2 C1 C0
Görevi
.
.
.
.
1 1 1 0 1 0 0 1 0
Emir kodu alma mikroemir dizisindeki
1-14 mikroemirlerini tekrarla
(Tablo 2.4)
16
17
0 0 0 0 0 0 0 0 0
.
.
.
.
1 1 1 1 0 0 0 1 0
30
31
Ýç Veri Yolunu DC’nin anlamsýz baytýna
taþý
Zaman doldurma (iþlem yapýlmýyor)
Emir kodu alma mikroemir dizisindeki
1-14 mikroemirlerini tekrarla
(Tablo 2.4).
Ýç Veri Yolunu DC’nin anlamlý baytýna taþý
Mikroemir dizilerinin ayný sayýda mikroemir içermedikleri emir kodu alma dizisi
ile akümülatör içeriðini bir artýrma dizisinden hemen görülebilir. Halbuki burada
tasarlanan CPU’da bu iki diziye (her biri bir makina periyoduna karþý düþer) ayrýlan süre
bir saat periyodudur. Dolayýsýyla, bir saat periyodu en fazla mikroemir içeren dizideki
emir sayýsýna bölünerek bir mikroemirin icra süresi bulunur. Küçük dizilerin icrasý bir
saat periyodu bitmeden tamamlanmasýna raðmen, senkronizasyondan dolayý daha sonraki
dizinin icrasý için bir sonraki saat periyoduna kadar beklenir. Bu zaman kaybýný önlemek
için mikroemir dizilerinin icrasýný birden çok saat periyoduna karþý düþürmek uygundur.
Tablo 2.6’nýn devamý.
(b) DC ile adreslenen bellek içeriðini akümülatöre yükleyen mikroemir dizisi.
Emir Mikroemir kodu
Görevi
Numarasý C8 C7 C6 C5 C4 C3 C2 C1 C0
1
1 1 1 0 0 1 1 0 1 DC’yi Adres Kaydediciye taþý
58
2
3
.
.
.
14
15
16
0 1 1 0 0
0 0 0 0 0
.
.
.
0 0 0 0 0
1 1 1 1 1
1 1 1 0 0
1 1 1 1
0 0 0 0
0 0 0 0
0 1 0 1
0 0 1 0
RD ve MREQ’i ALÇAK, WR ve IOREQ’i YÜKSEK yap
Zaman doldurma. Veriyi almak için
dýþ lojiðe ilave zaman verecek 12
adet iþlemsiz durum
Veri Kaydediciyi Ýç Veri Yoluna taþý
Ýç Veri Yolunu Akümülatöre taþý
Tablo 2.7 Doðrudan adresleyerek akümülatörü yükleyen mikroemir dizileri.
Emir
Numaras
ý
1
.
.
.
14
15
16
17
.
.
.
30
31
32
33
34
35
.
.
.
46
47
48
Mikroemir kodu
C8 C7 C6 C5 C4 C3 C2 C1 C0
.
.
.
Emir kodu alma dizisindeki
1-14 mikroemirleri (Tablo 2.4).
1 1 0 1 1 0 0 1 0
0 0 0 0 0 0 0 0 0
1 1 0 0 0 1 0 1 0
0
1
0
0
0
1
1
0
0
0
1
0
0
0
0
0
0
0
0
0
Görevi
0
1
1
0
0
0
1
0
0
0
1
0
0
1
1
0
0 0 0 0 0 0 0 0 0
1 1 1 1 1 0 1 0 1
1 1 1 0 0 0 0 1 0
Ýç Veri Yolunu Adres Tampon Kaydedicinin
anlamsýz yarýsýna taþý
Zaman doldurma
Emir kodu alma dizisindeki
1-14 mikroemirlerini tekrarla (Tablo 2.4).
Ýç Veri Yolunu Adres Tampon Kaydedicinin anlamlý yarýsýna
taþý
Zaman doldurma
Adres Tampon Kaydediciyi Adres Kaydediciye taþý
RD ve MREQ’i ALÇAK, WR ve IOREQ’i YÜKSEK yap
Veri almak için dýþ lojiðe ilave zaman verecek
12 adet iþlemsiz durum
VR’yi Ýç Veri Yoluna taþý
Ýç Veri Yolunu Akümülatöre taþý
59
Download

BÖLÜM 2 MERKEZİ İŞLEM BİRİMİ (CPU)