Mikroişlemciler İçin Ön Bilgiler
Mikroişlemci programlama; sayı sistemlerini, sayısal mantığı, bilgisayar mimarisini, assembly dilini, bellek adreslemeyi, kesmeleri, yığına dayalı yürütmeyi, giriş/çıkışı ve temel elektroniği bir araya getirir.
En sağlam hazırlık; ikili ve onaltılık sayılarla, Boole mantığıyla, programlamayla, CPU ile belleğin düzeniyle ve temel sayısal elektronikle uygulamaya dönük bir tanışıklıktır.
Temel ön bilgiler
Bu konular; 8086 programlama modeline, yazmaçlara ve pinlere, kesim:bağıl konum ile bellek erişimine, aritmetik ve mantık komutlarına, prosedürlere, yığına, kesmelere, G/Ç portlarına ve BIOS/DOS hizmetlerine zemin hazırlar.
İkili sayı sistemi
Mikroişlemciler veriyi ve komutları ikili bit örüntüleri olarak gösterir.
İkili aritmetik; yazmaçların, belleğin, işlem kodlarının, bayrakların ve sayısal mantığın temelidir.
- Onluk ve ikili tabanlar arasında dönüşüm.
- İkinin kuvvetlerini tanıma.
- 8 ve 16 bitlik işaretsiz değerlerin aralıkları.
Bağlantılı konular: yazmaçlar, işlem kodları, maskeler, adresler, bayraklar.
Onaltılık sayı sistemi
Onaltılık (hexadecimal) sistem, ikili değerleri kısa biçimde yazmanın bir yoludur.
8086 adresleri, makine kodu baytları, yazmaç değerleri ve bit maskeleri genellikle onaltılık yazılır.
- Onluk↔onaltılık ve ikili↔onaltılık dönüşüm.
- Bir onaltılık basamağın dört bite karşılık gelmesi.
- Bayt ve sözcük değerlerini onaltılık okuma.
Bağlantılı konular: adresler, bellek dökümleri, işlem kodları, hata ayıklama.
İşaretli sayılar ve ikiye tümleyen
İşlemcilerin negatif tam sayıları ikili olarak kodlamanın bir yoluna ihtiyacı vardır.
İkiye tümleyen (two's complement) gösterim, aynı toplayıcı donanımının hem işaretli hem işaretsiz aritmetikte kullanılmasını sağlar.
- İşaret biti ve işaretli değer aralıkları.
- Negatif bir değerin ikiye tümleyenini bulma.
- Elde (carry) ile işaretli taşmayı (overflow) ayırt etme.
Bağlantılı konular: ADD/SUB, işaret bayrağı (SF), taşma bayrağı (OF), koşullu atlamalar.
ASCII karakter kodları
Klavyeden okunan ve ekrana yazılan her karakter, bir baytlık ASCII koduyla taşınır.
Bir sayıyı ekrana yazmak ya da klavyeden okumak, rakam ile ASCII kodu arasında dönüşüm gerektirir. DOS ve BIOS hizmetleri karakterleri bu kodlarla alır ve verir.
- Rakamlar: '0'–'9' = 30h–39h. Bir rakamın değeri, kodundan 30h çıkarılarak bulunur.
- Büyük harfler 'A'–'Z' = 41h–5Ah, küçük harfler 'a'–'z' = 61h–7Ah. Aradaki fark 20h, yani yalnızca 5 numaralı bittir.
- Denetim karakterleri: satır başı (CR) 0Dh, satır besleme (LF) 0Ah. Boşluk 20h, '$' ise 24h'dir.
Bağlantılı konular: INT 21h karakter hizmetleri, sayı okuma ve yazdırma yordamları, dizgiler, '$' ile biten DOS dizgileri.
Ölçü birimleri ve önekler
Saat hızları, komut süreleri ve bellek boyutları önekli birimlerle verilir.
Bir program parçasının süresini hesaplamak saat periyodunu, adres yolunun genişliğini yorumlamak ise ikili öneklerle bellek boyutunu bilmeyi gerektirir.
- Periyot frekansın tersidir: T = 1/f. 5 MHz'lik saatte bir saat periyodu 200 ns'dir.
- Zaman önekleri: 1 ms = 10⁻³ s, 1 µs = 10⁻⁶ s, 1 ns = 10⁻⁹ s.
- Süre = saat turu sayısı × saat periyodu.
- Bellekte ikili önekler kullanılır: 1 KB = 2¹⁰ = 1024 bayt, 1 MB = 2²⁰ bayt. n adres hattı 2ⁿ farklı adres verir; 20 hat 1 MB'lık adres uzayı demektir.
Bağlantılı konular: saat sinyali, komut tur sayıları, gecikme döngüleri, adres yolu genişliği, bellek haritası.
Boole mantığı
Aritmetik ve kontrol devreleri Boole işlemlerinden kurulur.
Mantık komutları bu işlemleri assembly programlarına doğrudan sunar.
- Temel doğruluk tabloları.
- Bit maskeleme.
- XOR ile bitleri tersine çevirme; bir yazmacı kendisiyle XOR'layarak sıfırlama.
Bağlantılı konular: maskeler, bayraklar, aygıt kontrolü, bit alanları.
Sayısal mantığın temelleri
Bir CPU, ikili değerleri saklayan ve dönüştüren sayısal devrelerden oluşur.
Temel mantık kavramları; yazmaçları, ALU'ları, yolları ve kontrol sinyallerini anlamayı kolaylaştırır.
- Birleşimsel ve ardışıl mantık arasındaki fark.
- Kapılar, çoklayıcılar (multiplexer), çözücüler ve flip-floplar.
- Yazmacın saklanan bir ikili durum olması.
Bağlantılı konular: ALU, yazmaç kümesi, komut çözücü, kontrol birimi.
Tutucular ve üç durumlu tamponlar
Bir yola birden çok aygıt bağlandığında, yolu hangi aygıtın sürdüğünü ve bir değerin ne zaman yakalandığını bu yapı taşları belirler.
Adres ve verinin aynı pinlerden sırayla verildiği işlemcilerde adresin bir tutucuda yakalanması, veri yolunun da üç durumlu tamponlarla ayrılması gerekir.
- Tutucu (latch), izin girişi etkinken girişini çıkışa geçirir; izin kalkınca son değeri saklar.
- Üç durumlu çıkış 0 ve 1'in yanında yüksek empedans (Z) durumuna da geçebilir. Bu durumda aygıt yoldan ayrılmış gibidir.
- Bir yolu aynı anda yalnızca bir aygıt sürmelidir. İki çıkışın aynı anda sürmesi yol çakışmasıdır.
- Etkin düşük (active-low) sinyal 0 iken etkindir; adının sonundaki ' işaretiyle ya da üstüne çizilen çizgiyle gösterilir.
Bağlantılı konular: ALE ve adres kilitleri, veri alıcı-vericileri, RD' ve WR' sinyalleri, bellek bankaları.
Temel programlama
Algoritmalardaki akış kontrolüne alışkın olunca assembly daha kolay öğrenilir.
Yüksek düzeyli programlama kavramları, düşük düzeyli komut dizilerine karşılık gelir.
- Atama ve aritmetik ifadeler.
- if/else yapılarını ve döngüleri adım adım izleme.
- Diziler ve fonksiyonlar.
Bağlantılı konular: CMP/Jcc, döngüler, bellekteki değişkenler, prosedürler.
C programlama kavramları
C, yüksek düzeyli kod ile assembly arasında kullanışlı bir köprüdür.
İşlemciye ilişkin birçok kavram; C'deki değişkenler, işaretçiler, fonksiyon çağrıları ve veri boyutlarıyla ilişkilendirildiğinde daha anlaşılır olur.
- Tam sayı tipleri ve diziler.
- Temel işaretçi ve adres kavramları.
- Kavramsal düzeyde fonksiyon çağrıları ve yerel değişkenler.
Bağlantılı konular: yığın çerçeveleri, çağırma kuralları (calling conventions), veri gösterimi.
Bit düzeyinde işlemler
Bitlerle çalışmak, düşük düzeyli programlamanın temelidir.
8086, bit düzeyinde kontrol için özel mantık, kaydırma ve döndürme komutlarına sahiptir.
- Maske oluşturma ve uygulama.
- Tek tek bitleri sınama.
- Mantıksal ve aritmetik kaydırma arasındaki kavramsal fark.
Bağlantılı konular: SHL/SHR, ROL/ROR, aygıt yazmaçları, bayraklar.
Bilgisayar mimarisinin temelleri
Mikroişlemci programlama, CPU'nun bellek ve G/Ç ile nasıl veri alışverişi yaptığını bilmeye dayanır.
Yazmaçlar, yollar, bellek ve kontrol sinyalleri, assembly kodunun gördüğü yürütme ortamını oluşturur.
- CPU, bellek ve giriş/çıkışın (G/Ç) temel görevleri.
- Kavramsal düzeyde adres, veri ve kontrol yolları.
- Getir–çöz–yürüt döngüsü.
Bağlantılı konular: 8086 yol arayüzü, bellek erişimi, komut yürütme.
Yazmaçlar
8086, adlandırılmış küçük bir yazmaç kümesini programların doğrudan kullanımına açar.
Assembly komutları çoğunlukla AX, BX, CX, DX yazmaçları ile kesim, indis ve işaretçi yazmaçları üzerinde çalışır.
- Yazmaçların CPU içindeki küçük ve hızlı saklama alanları olması.
- Genel amaçlı ve özel amaçlı görevlerin ayrımı.
- 16 bitlik yazmaçlar ve uygun olanlarda 8 bitlik yüksek/düşük yarılar.
Bağlantılı konular: AX/AH/AL, BX, CX, DX, SP, BP, SI, DI, CS, DS, SS, ES.
Bellek adresleme
Assembly kodu, adresi açıkça belirtilen bellek gözlerini okur ve yazar.
Belleğin düzenini bilmek; değişkenler, diziler, işaretçiler ve komutlar için vazgeçilmezdir.
- Bayt düzeyinde adreslenen bellek.
- Kavramsal düzeyde little-endian gösterim.
- Etkin adresi tanıma.
Bağlantılı konular: veri değişkenleri, diziler, işaretçiler, komut işlenenleri.
8086'da kesimleme
8086, 20 bitlik fiziksel adresleri 16 bitlik kesim (segment) ve bağıl konum (offset) değerlerinden oluşturur.
Kesimleme, yazmaçları 16 bitlik olan ilk 8086'nın nasıl 1 MiB'a kadar belleği adresleyebildiğini açıklar.
- Fiziksel adres = kesim × 16 + bağıl konum.
- Örtüşen kesimler.
- CS, DS, SS ve ES yazmaçlarının görevleri.
Bağlantılı konular: kod, veri, yığın ve ek kesimler, 20 bitlik adresleme.
Aritmetik ve bayraklar
Aritmetik komutlar hem hedefteki değeri hem de işlemcinin durum bayraklarını günceller.
Bayraklar karşılaştırmalarda, işaretli/işaretsiz kararlarda, döngülerde ve hata algılamada kullanılır.
- Kavramsal düzeyde elde, sıfır, işaret ve taşma bayrakları.
- CMP'nin çıkarma sonucunu saklamadan yalnız bayrakları güncellemesi.
- Bayraklarla koşullu atlamalar arasındaki ilişki.
Bağlantılı konular: ADD, SUB, CMP, Jcc, işaretli ve işaretsiz karşılaştırmalar.
Assembly'de akış kontrolü
Assembly, kararları ve tekrarları etiketler ile dallanma komutları aracılığıyla ifade eder.
Yüksek düzeyli kontrol yapıları, derlendiğinde karşılaştırmalara ve atlamalara dönüşür.
- Koşullu ve koşulsuz atlamaları adım adım izleme.
- Etiketlerin dallanma hedefi olarak kullanılması.
- Basit if/while mantığını düşük düzeyli adımlara dönüştürme.
Bağlantılı konular: JMP, JE/JZ, JNE/JNZ, işaretli/işaretsiz koşullu atlamalar.
Yığının temelleri
Yığın; geçici saklama, prosedürler, dönüş adresleri ve kesmeler için kullanılır.
Yığının düzenli kullanımı, prosedür çağrılarının ve kesme işlemenin doğru çalışması için temeldir.
- LIFO (son giren ilk çıkar) sırası.
- Kavramsal düzeyde PUSH ve POP.
- 8086'da yığının durumunu tutan SP ve SS yazmaçları.
Bağlantılı konular: prosedürler, dönüş adresleri, parametreler, kesmeler.
Prosedürler ve çağrılar
Prosedürler, assembly programlarını yeniden kullanılabilir bloklara ayırır.
CALL ve RET, dönüş bilgisini korumak için yığına dayanır.
- CALL'ın dönüş adresini yığına itmesi.
- RET ile çağıran koda geri dönülmesi.
- Kavramsal düzeyde yazmaçla ve yığınla parametre geçirme.
Bağlantılı konular: modülerlik, yığın, çağırma kuralları.
Kesmeler
Kesmeler, donanım ya da yazılım olaylarına karşılık denetimi bir hizmet yordamına aktarır.
BIOS/DOS hizmetleri, zamanlayıcılar, klavyeler ve aygıtlarla etkileşim kesmelere dayanır.
- Donanım ve yazılım kesmelerinin ayrımı.
- Kesme vektörü kavramı.
- İşlemci durumunun saklanıp geri yüklenmesi gerekliliği.
Bağlantılı konular: INT komutu, kesme vektör tablosu (IVT), kesme hizmet yordamı (ISR), BIOS/DOS hizmetleri.
Giriş/çıkış
Mikroişlemciler çevre birimleriyle açık G/Ç mekanizmaları üzerinden haberleşir.
Port eşlemeli ve bellek eşlemeli G/Ç, yazılımdaki komutları donanım aygıtlarına bağlar.
- Kavramsal düzeyde aygıt yazmaçları.
- x86'da IN ve OUT komutlarının amacı.
- Yoklamalı (polling) ve kesmeli G/Ç.
Bağlantılı konular: portlar, çevre birimleri, klavyeler, ekranlar, denetleyiciler.
Temel elektronik
Mikroişlemciler yalnız soyut komut makineleri değil, aynı zamanda elektrikle çalışan sayısal sistemlerdir.
Temel sinyal ve zamanlama kavramları; saat sinyalini, yolları, pinleri ve arabağlantıyı açıklamaya yardımcı olur.
- Kavramsal düzeyde ikili gerilim düzeyleri.
- Saat sinyalleri.
- Giriş/çıkış yönü ve sinyal zamanlaması.
Bağlantılı konular: saat, sıfırlama (RESET), yol zamanlaması, sayısal arayüzler.
Assembly araçları
Düşük düzeyli programlama, simgesel assembly kodunu çalıştırılabilir makine koduna dönüştüren bir araç zinciri gerektirir.
Araç zincirinin aşamalarını bilmek; söz dizimi, sembol ve çalışma zamanı hatalarının kaynağını bulmayı kolaylaştırır.
- Assembler ile bağlayıcının (linker) görevleri.
- Basit bir bellek/yazmaç dökümünü okuma.
- Kavramsal düzeyde tek adım çalıştırma ve kesme noktaları.
Bağlantılı konular: MASM/TASM/NASM tarzı çalışma düzeni, bağlayıcı, hata ayıklayıcı.
Makine kodunun temelleri
Assembly komutları, kodlanmış makine komutlarının simgesel gösterimidir.
Komut kodlama; işlenenlerin, adresleme modlarının ve komut boyutlarının neden önemli olduğunu açıklar.
- İşlem kodu (opcode) ile işlenen (operand) arasındaki fark.
- Komutların bellekte bayt kapladığı.
- Adresleme modunun kodlamayı etkilediği.
Bağlantılı konular: makine kodu, tersine çevirme (disassembly), komut boyutu.
Yol ve zamanlamanın temelleri
İşlemcinin dış dünyayla haberleşmesi, birbirine uyumlu adres, veri ve kontrol sinyalleriyle gerçekleşir.
Yol zamanlaması, bellek ve çevre birimlerinin ne zaman okuyacağını, yazacağını ya da yanıt vereceğini nasıl bildiğini açıklar.
- Adres bilgisi ile veri bilgisinin ayrımı.
- Kavramsal düzeyde okuma/yazma kontrol sinyalleri.
- Genel hatlarıyla bekleme durumu ve zamanlama.
Bağlantılı konular: bellek döngüleri, G/Ç döngüleri, kontrol pinleri, arabağlantı.