BIM404_Sistem_Programlama_Ch2_8086_Mimari_Yapi.pdf
Document Details
Uploaded by RetractableParrot
Yıldız Technical University
Tags
Full Transcript
BIM404 Sistem Programlama 8086/8088 MİMARİ YAPISI Dr. Öğr. Üys. Abdullah Sönmez 8086-8088 İç Yapısı Sistem Programlama 2 8086-8088 İç Yapısı (Devam) Sistem Programlama 3 8086-8088 Bellek Yapısı FFFFFH FFFFFH Tekliler (Odd bank) Çiftliler (Even bank) FFFFEH FFFFCH FFFFAH FFFFDH FFFFBH FFFFEH FFFFDH 5...
BIM404 Sistem Programlama 8086/8088 MİMARİ YAPISI Dr. Öğr. Üys. Abdullah Sönmez 8086-8088 İç Yapısı Sistem Programlama 2 8086-8088 İç Yapısı (Devam) Sistem Programlama 3 8086-8088 Bellek Yapısı FFFFFH FFFFFH Tekliler (Odd bank) Çiftliler (Even bank) FFFFEH FFFFCH FFFFAH FFFFDH FFFFBH FFFFEH FFFFDH 512 K Byte 1M Bytes 00002H 00001H 00000H 512 K Byte 00005H 00004H 00003H 00001H 00002H 00000H 16 bit 8086/8088 Lojik Bellek Haritası Sistem Programlama 8086 Fiziksel Bellek Haritası 4 8086-8088 Saklayıcıları (Registers) 8 Bits 8 Bits AH AL BH CH DH BL CL DL AX BX Akümülatör Taban CX DX Sayı Veri SP BP SI DI IP Yığın İşaretçisi Taban İşaretçisi Kaynak İndeksi Hedef İndeksi Komut İşaretçisi CS Kod Segmenti DS SS ES Veri Segmenti Yığın Segmenti Ekstra Segment Genel Amaçlı Saklayıcılar 8 Bits 8 Bits AH AL BH CH DH BL CL DL İşaretçi ve İndeks Saklayıcıları Segment Saklayıcıları AX BX Accumulator Base CX DX Count Data SP BP SI DI IP Stack Pointer Base Pointer Source Index Destination Index Instruction Pointer Pointer and Index Registers CS DS SS ES Code Segment Data Segment Stack Segment Extra Segment Segment Registers General Purpose Register Flags 16 Bits Bayraklar 16 Bits Sistem Programlama 5 Adresleme Problemi ▪ İndeks ve işaretçi saklayıcıları 16 bit uzunluğunda. ▪ Ancak 8086/8088’deki bellek 1 M 220 sekizli 20 bit gerekli ▪ O halde indeks ve işaretçi saklayıcıları belleği adresleyebilmek için yeterli uzunlukta değil. ▪ Bu duruma çözüm olarak: ▪ Segment saklayıcıları 64K.’lık bir bellek bölgesini adresleyebilsin. ▪ İndeks saklayıcıları da segment içinde adresleme yapsın. Sistem Programlama 6 Adresleme Problemi (Devam) ▪ 4 farklı tipte segment saklayıcısı: ▪ Kod segmenti (CS) ▪ Veri segmenti (DS) ▪ Yığın segmenti (SS) ▪ Ekstra segment (ES) ▪ Segment içi indeksleme için: ▪ İndeks saklayıcıları (SI, DI) ▪ İşaretçi saklayıcıları (SP, BP) ▪ Taban saklayıcısı (BX) ▪ Komut saklayıcısı (IP) Sistem Programlama 7 Adresleme Problemi (Devam) ▪ Her bir segment saklayıcısı 20 bit’lik bellek adresinin yüksek anlamlı 16 bitini saklar. ▪ İndeks saklayıcısındaki göreli konum (offset) bu adresin düşük anlamlı 4 bitini oluşturur. 10010H offset BX 0010 ▪ DS’deki değer 10H değeri ile çarpılır ve indeks saklayıcısındaki değer ilave edilerek 20 bit adres hesaplanır. 1000H * 10H = 10000H 10000H+0010H = 10010H 10000H Sistem Programlama DS 1000 8 Segmentler Hakkında ▪ Kod segmenti (Code Segment) (CS) ▪ Belleğin 64K sekizli uzunluğundaki program kodunu içeren kısım ▪ Bu saklayıcı genellikle sıklıkla dallanma (jump), çağırma(call) ve dönüş (return) komutları ile değişir. ▪ Bir sonraki çalıştırılacak komut CS*10H + IP ile hesaplanır. ▪ Veri segmenti (Data Segment) (DS) ▪ Belleğin 64K sekizli uzunluğundaki hemen hemen tüm komutlarca ve birçok adresleme modu ile başvurulan verileri içeren kısım. ▪ Erişilecek veri DS*10H + (BX, SI, DI) ile hesaplanır. Sistem Programlama 9 Segmentler Hakkında (Devam) ▪ Yığın segmenti (Stack Segment) (SS) ▪ Belleğin 64K sekizli uzunluğundaki LIFO (Last In First Out) (Son Giren İlk Çıkar) mantalitesi ile çalışan yığın için bellekte ayrılan kısım ▪ Etkin yığın adresi SS*10H + (SP, BP) ile hesaplanır. ▪ BP ile başvurulan veriler de normalde yığın segmentinde bulunur. ▪ Ekstra segment (Extra Segment) (ES) ▪ Normalde sadece katar işlemlerinde kullanılan özel bir segment saklayıcısıdır. ▪ Bir katar komutu çalıştırıldığında hedef adres ES*10H + DI ile, kaynak adresi ise ES*10H + SI ile hesaplanır. Sistem Programlama 10 8086-8088 Segmentleri AFFFFH A0000H 8FFFFH 80000H SS Yığın segmenti ES Ekstra segment 3FFFFH 30000H 1FFFFH 10000H Sistem Programlama A000 Veri segmenti Varsayılan Segment Alternatif Segment Göreli konum (Offset) 8000 Komut alma (Instruction Fetch) CS - IP DS Yığın İşlemi (Stack Operation) SS - SP Veri İşlemi (Data) (Aşağıdakiler hariç) DS CS, ES veya SS Çeşitli Katar kaynağı (String source) DS CS, ES veya SS SI Katar hedefi (String destination) ES - DI BP taban olarak kullanıldığında SS CS, ES veya SS Çeşitli 3000 CS Kod segmenti Referans Tipi 1000 11 Adresleme Örnekleri CS IP + Komut Adresi 3 3 4 8 A 0 4 2 1 4 8 A B 4 SS SP + Yığın adresi DS DI + Veri adresi Sistem Programlama 1 1 2 3 4 0 0 0 2 2 2 3 6 2 5 5 0 0 0 0 F F E 0 F F E 0 12 8086-8088 Bayrak Saklayıcısı (Flag Register) F15 F14 F13 F12 F11 F10 F9 F8 F7 F6 O D I T S Z F5 F4 A F3 F2 F1 P F0 C C (Elde) (Carry) Toplamadan sonraki eldeyi (Carry) ve çıkarmadan sonraki ödüncü (borrow) belirtmek için kullanılır. P (Parite) (Parity) Çift sayıda «1» varsa lojik “0” ; tek sayıda «1» varsa lojik “1” ile ifade edilir. A (Yardımcı elde) (Auxiliary carry) Yapılan aritmetiksel işlem sonucunda, 3. ve 4. bitler arasında olan carry ve borrow durumunu belirtmek için kullanılır. Z (Sıfır) (Zero) Aritmetik veya lojik işlemin sonucunun 0 olduğunu belirtir. S (İşaret) (Sign) Toplama veya çıkarma işleminden sonra sonucun aritmetik işaretini belirtir. Sistem Programlama 13 8086-8088 Bayrak Saklayıcısı (Flag Register) F15 F14 F13 F12 F11 F10 F9 F8 F7 F6 O D I T S Z F5 F4 A F3 F2 F1 P F0 C T (Yakalama) (Trap) Bu bayrak 1 ise, tüm devre, hata ayıklama (debugging) durumuna girer. I (Kesme) (Interrupt) INTR girişini kontrol eder. I=1 ise INTR aktif durumdadır. I=0 ise INTR pasif durumdadır. Bu durumda iken gelen kesmelere cevap verilmez. D (Yön) (Direction) String işlemleri yapılırken, DI ve SI saklayıcılarının arttırılması veya azaltılmasını düzenler. D=1 azaltılır, D=0 ise arttırılır. O (Taşma) (Overflow) İşaretli sayıların toplanıp çıkarılmasından sonra taşma olup olmadığını bildirir. Sistem Programlama 14