BÖLÜM 2 MERKEZİ İŞLEM BİRİMİ (CPU)
Transkript
BÖLÜM 2 MERKEZİ İŞLEM BİRİMİ (CPU)
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