Yığın MİKROİŞLEMCİ SİSTEMLERİ Yrd.Doç.Dr. Şule Öğüdücü Geçici olarak veri saklamak amacıyla kullanıcı tarafından bellek içinde ayrılmış bir alandır. Yığında en son saklanan veri yığından ilk olarak çekilir. (LIFO) Bellekte küçülen adreslere doğru büyür. Kullanıcı yığının dip adresini tanımlar. Yığın Yığın için bellekte yüksek adreslerden başlayarak yer ayrılması, yığın ve kullanıcı programlarının birbirini ezmesini önler. İki şekilde kullanılır Program içinde verileri saklamak YIĞ ve ÇEK buyrukları ile MİB tarafından altprogramlara ve kesme hizmet programlarına dallanırken dönüş adresini saklamak ve parametre aktarmak Program Yığın $0000 Örnek MİB için Yığın Örnek MİB de 6 bitlik bir yığın göstergesi () vardır. nin değeri yığının en üstündeki boş bellek gözünü işaret eder. MİB akümülatör içeriklerini yığına aktarılabilir, ya da yığının en üstündeki veri akümülatörlere çekilebilir. Yığın büyük adreslerden küçük adreslere doğru büyür. Genelde bellekteki en büyük adres yığın göstergesine yüklenir. Yığma İşlemi Çekme İşlemi Yığın bellek içinde istenen bir adresten başlayarak kurulur YÜK, Yığına yeni bir veri yazmak için Yığın göstergesinin gösterdiği bellek gözüne veri yazılır. <> Yığın göstergesi değeri bir azalır. - B Yığından bir veri çekmek için ÇEK B Yığın göstergesinin değeri bir artırılarak işlem yapılacak bellek gözünü işaret eder. + Yığın göstergesinin işaret ettiği bellek gözündeki veri alınır. B <> B
Yığın İşlemleri Yığma ve çekme işlemlerinde işlenenlerin sırası ters olmalıdır. ÇEK B ÇEK Eğer çekme işlemi yapmadan çok fazla yığma işlemi yapılırsa, yığın programları ve verileri ezer. Yığının üst adresini kontrol etmek gerekir. Örnek- Bellekte $00 adresinden başlayan elemanlı bir dizi var. Dizi aynı adresten başlayarak ters sırada saklanacaktır. BŞL YÜK,$2000 YÜK SK,$00 YÜK B,$0 GERI DEE ILERI YÜK,<SK+0> RT SK Sayı ZT B DL GERI ILERI YÜK SK,$00 YÜK B,$0 DONGU DEE SON ÇEK YZ,<SK+0> RT SK ZT B DL DONGU SON Sayı Sayı 2 Sayı ltprogram Program içinde tekrarlanan program parçaları altprogramlara dönüştürülür. Programın çeşitli yerlerinde aynı program kodunu yazmak yerine altprogram çağrılır. ynı işlem farklı parametrelerle yürütülebilir. sembler dilinde altprogram ana programın herhangi bir yerinde yer alabilir. Genellikle ana programdan farklı bir alanda yazılır. ltprogramı çağırmak için LT komutu kullanılır. ltprogramdan ana programa dönmek için komutu kullanılır. ltprogram için Kullanılan Buyruklar Örnek MİB de altprograma dallanmak ve altprogramdan dönmek için kullanılan buyruklar LTD DRES Verilen adresteki altprograma dallan. <> PS(düşük), - <> PS(yüksek), - PS DRES LT DIM dım miktarı kadar ötedeki altprograma dallan. <> PS(düşük), - <> PS(yüksek), - PS PS + DIM naprograma dön. +, PS(yüksek) +, PS(düşük) ltprogram na programda LT komutu görüldüğü zaman LT komutunu izleyen buyruğun adresi yığında saklanır. Program sayacı altprogramın başladığı adres ile yüklenir. N PROG. ltprogram ltprogramdan komutu ile ana programa dönülür. Yığının en üstünden ana programa dönüş adresi çekilir. Program sayacına ana programa dönüş adresi yüklenir. N PROG. $00 LT KOŞUL $0 $00 KOŞUL $ 0 PC=$ 00 0 $00 $0 $00 $0 LT KOŞUL KOŞUL PC=$0 0 2
ltprogram BSL PROG 2 $000 YÜK,# $0C LT PROG $00 LT PROG2 $0F $00D SON DUR 0 0D 0 2 F 0 F PROG2 $00 ltprograma gitmeden önce yığın göstergesine başlangıç değeri atamak gerekir. Eğer yığın göstergesine değer atanmazsa, dönüş adresi bellekte verilerin bulunduğu yere yazılabilir ya da yığın göstergesi değeri bellek bulunmayan bir adresi işaret ediyorsa anaprograma dönüş adresi saklanmaz. Örnek-2 Bir sayının mutlak değerini bulan altprogram. Sonuç CC üzerinden ana programa aktarılıyor. BŞL YÜK, YÜK,$9 YZ,<$00> YÜK,$7 YZ,<$0> LT MUTDEG YÜK,<$00> LT MUTDEG SON ---------------------------- MUTDEG SIN,$80 DEE BİTTİ EKS BITTI Değişkenlerin Taşınması ltprograma değişkenler kütükler üzerinden gönderilir. ltprograma gönderilmek istenen veriler akümülatör ve yardımcı kütüklere yüklenir. Sonuçlar akümülatör ve yardımcı kütükler üzerinden ana programa gönderilir. Bu iş için ayrılmış bellek gözleri kullanılarak değişkenler taşınır. na program değişkenleri bellekte ayrılan gözlere yazar, altprogram bu gözlerden değişkenleri okuyarak işlem yapar. Yığın göstergesi kullanılarak yapılır. lt programa gitmeden önce değişkenler yığına aktarılır. Başvuru ktarımı Değer ktarımı Başvuru ktarımıparametrelerin adresleri altprograma gönderilir. Değer ktarımı Parametrelerin değerleri altprograma gönderilir. Örnek-2 de değişkenlerin değerleri altprograma aktarılmıştır. Eğer değişkenlerin bulunduğu bellek gözlerinin adresi altprograma aktarılırsa, değişkenlerin değerleri değiştirilebilir. Örnek- Örnek-2 de değişkenlerin adresleri altprograma sıralama kütüğü üzerinden gönderiliyor. ltprogram sonucu değişkenin bulunduğu bellek gözüne yazıyor. BSL YÜK, YÜK,$9 YZ,<$00> YÜK,$7 YZ,<$0> YÜK SK,$0 LT MUTDEG YÜK SK,$00 Sıralama kütüğü üzerinden LT MUTDEG başvuru aktarımı SON ---------------------------------- MUTDEG YÜK,<SK+0> SIN,$80 DEE BITTI EKS YZ,<SK+0> BITTI ÇEK ltprogramlarda Yığın Kullanımı na programa dönüş adresini saklamak Parametre aktarımı na program değişken değerlerini yığına aktarır. ltprogram ve ana program yığın göstergesi değerini bilir. Kütük değerlerini korumak ltprogramlarda yerel değişken yaratmak
Örnek- Iki ikili sayıyı toplayan bir altprogram yazılacaktır. Parametreler yığın üzerinden değer aktarımı yöntemi ile aktarılacaktır. Örnek- Iki ikili sayıyı toplayan bir altprogram yazılacaktır. Parametreler yığın üzerinden değer aktarımı yöntemi ile aktarılacaktır. BŞL YÜK, YÜK,$9 YZ,<$00> YÜK,$7 YZ,<$0> LT TOPL YZ,<$0> SON TOPL YÜK,<+> TOP,<+> DR-H DR-L BŞL YÜK, YÜK,$9 YZ,<$00> YÜK,$7 YZ,<$0> LT TOPL YZ,<$0> SON TOPL YÜK,<+> TOP,<+> SYI-2 SYI-2 SYI- SYI- Örnek- Örnek- ltprograma değişkenlerin adresleri ve toplamın yazılacağı bellek gözünün adresi yığın üzerinden gönderiliyor. Değişkenler altprogramdan dönüldüğü zaman 0 değerini alıyor Başvuru ktarımı BŞL YÜK, YÜK,$9 YZ,<$00> YÜK SK,$00 KT B,SK YÜK,$7 YZ,<$0> YÜK,$0 YÜK,$ YÜK SK,$0 KT B,SK LT TOPSİL SON $FFF7 DR-H DR-L 0 0 00 TOPSİL KT SK, SİL B YÜK CD,<SK+09> YÜK,<CD> YZ B,<CD> YÜK CD,<SK+07> TOP,<CD> YZ B,<CD> YÜK CD,<SK+0> YZ,<CD> ÇEK B ÇEK $FFF B DR-H DR-L 0 0 00 0 2 6 7 8 9 Yerel Değişkenler Örnek-6 ltprogram kullandığı yerel değişkenler için yığında yer alır. Yığından yerel değişkenler için yer almak ve yığına geri vermek altprogramın görevidir. Örnek 6 bitlik bir sayının yüksek anlamlı ve düşük anlamlı bitlerinin yer değiştirmesi. C void swap(short int *number) { char temp; temp = *number; *number = *(number + ); *(number + ) = temp; } BŞL YÜK, YÜK SK,$00 KT B,SK YÜK,$ LT SWP SON 0 TEMP DR-H DR-L 00 2 6 SWP ZT *yerel değişken için yer alındı* KT SK, YÜK CD,<SK+0> *yüksek anlamlı 8 bitin adresi* YÜK,<CD> *CC <- yüksek anlamlı 8 bit* YZ,<SK+> *temp <- yüksek anlamlı 8 bit* RT CD *düşük anlamlı 8 bitin adresi* YÜK,<CD> *CC <- düşük anlamlı 8 bit* ZT CD YZ,<CD> *takas* YÜK,<SK+> *CC <- temp* RT CD YZ,<CD> *CC düşük anlamlı kısma aktarıldı* RT *yerel değişkenin yeri geri verildi* ÇEK
Dikkat!! YIĞ ve ÇEK işlemlerinde işlenenlerin ters sırada olması gerekir. YIĞ işlemi sayısı kadar ÇEK işlemi olması gerekir. ksi halde komutu ile yığından yanlış adres çekilir ve program çalışmasında hata oluşur. Döngü içinde YIĞ ve ÇEK işlemleri yapılmaması iyi olur. ltprogramdan komutu ile dönülmesi gerekir. acil durum işareti olarak görülebilir MİB, o an yapmakta olduğu işe en kısa sürede ara vererek gelen kesmeye cevap vermek üzere Hizmet programına gider. nin geldiği birime göre her birimin kendi Hizmet Programı vardır. Hizmet Programına Dallanma Maskelenemez MİB nin kesme girişine gelen kesmeye o anda yapmakta olduğu işe ara vererek cevap verir. Maskelenebilir MİB nin İsteği girişine gelen kesmeye durum kütüğündeki kesme maskesi bitinin değerine göre cevap verir ya da vermez. K= isteği engellenir. K=0 isteğine cevap verilir. lbaştan (Reset) Ilk açıldığı hale getirir. lbaştan İsteği Yalıtım Yalıtıldı Oku/Yaz Bel- Bekle Saat Girişi K T Saat Çıkışı Lojiği S N Y E dres Yolu Veri Yolu Hizmet programları bir altprogram gibi çalışır. MİB kesme hizmet programına gitmeden önce dönüş adresini (kütüklerin içeriklerini) yığında saklar. hizmet programından (K) komutu ile dönülür. hizmet programına iki şekilde dallanılır Başlangıç adresi doğrudan hizmet programının başlangıç adresi bellidir. Başlangıç adresi dolaylı hizmet programının başlangıç adresinin yazılacağı bellek gözleri bellidir. nin Donanım Yapısı Yoklama Yöntemi alındığında kesmenin nerden geldiğine iki şekilde karar verilebilir Yoklama yöntemi hizmet programına gidilerek kesme gelebilecek birimler sırayla sınanır. Uzun sürebilir. MİB +V Sıralıyıcı Bir kesme öncelik devresi ile kesmenin hangi birimden geldiği anlaşılır.
Sıralıyıcı +V MİB Veri Yolu Sıralıyıcı dres Yolu 6