Bilgisayar Donanım ve Sistem Yazılımı Aslı Eyecioğlu Özmutlu aozmutlu@bartin.edu.tr
Gündemde Olanlar Mazeret Sınavları Ödevler
Hedefler Kesme (İnterrupts) Emu8086
Kesme (Interrupt) Kesme işlemini günlük hayattan bir örnek vererek açıklayalım: Diyelim ki televizyonda sevdiğiniz bir artistin filmini izliyorsunuz ve bu anda telefon çaldı. Ne yaparsınız? llk olarak konsantrasyonunuz bozulur ve ne yapacağınıza karar verirsiniz. Eğer önemli bir telefon bekliyorsanız, televizyonun sesini keser, video player'in record butonuna basarak filmi kaydedersiniz. Telefon konuşması bittikten sonra da kaydettiğiniz filmi izlemeye başlarsınız. Eğer önemli bir telefon beklemiyorsanız kararınız bu defa telefona cevap vermeyerek arayanın telesekretere mesaj bırakması yönünde olur ve filmi izlemeye devam edersiniz.
Kesme (Interrupt) Interrupt nedir? İnterruptlar bilgisayar içerisinde yapılan bir görevin durdurularak başka bir görevin tamamlanmasını sağlamak için yapılan kesme işlemine denir.
Kesme (Interrupt) Interrupt nasıl çalışır? Programın kesildiği andan itibaren önceden hazırlanan bir alt program çalışır. Alt program işlevini bitirdikten sonra ana program kaldığı yerden itibaren tekrar çalışmasına devam eder. Netice olarak bir kesme, ana programın çalışmasını sadece duraklatır, ama hiçbir zaman işlevini devam ettirmesini engellemez.
Kesme (Interrupt)
Kesme (Interrupt) ISR (Interrupt Service Routine) nedir? ISR, mikroişlemcide yapılan kesmelerin yönetilmesinden sorumlu olan bir programdır.
Kesme (Interrupt) Mikoişlemcilerde 3 tür kesme vardır: Yazılım Kesmeleri (Software Interrupt) Donanım Kesmeleri (Hardware Interrupt) İçsel Kesmeler (Internal Interrupt)
Kesme (Interrupt) Donanım Kesmeleri Her mikro işlemcinin ve mikro denetleyicinin donanım kesmesi için bir INT ucu vardır. Bu INT ucu aktiflendiğinde (elektriksel olarak 5v ya da 0v gerilimle uygulanması durumunda) mikro işlemci o anda çalıştırılmakta olan koda ara verir ve başka bir kodu uygulamaya başlar. Yani bu tur kesmelerde kesmenin oluş mekanizması dışsal ve elektriksel olaylara bağlıdır. Bu yolla donanım kesmesi oluşturulmasına IRQ (interrupt request) denir.
Kesme (Interrupt) Donanım Kesmeleri Örnek: İşletim sistemi, açılması esnasında herbir donanım cihazının hangi numaralı kesmeyi kullanacak olduğunu bilmeye ihtiyacı vardır. Böylece her biri ile uygun olan işleyiciyi ilişkilendirir. Eğer iki farklı cihaz aynı IRQ'yu kullanmaya çalışırsa, kimi zaman kesmeler yanlış işleyiciye gönderilir. Genellikle bu durum cihazın kilitlenmesine ve işletim sisteminin uyku moduna geçmesine ya da çökmesine neden olacak şekilde işletim sistemini kötü bir biçimde yanıltır.
Kesme (Interrupt) İçsel Kesme nedir? Mikro işlemcinin bir makine kodunu çalıştırırken problemle karşılaştığında kendi kendisini çağırdığı kesmelerdir. Diğer bir deyişle bazı geçersiz program sonuçlarının elde edilmesi halinde CPU’nun kendisi tarafından oluşturulmaktadır
Kesme (Interrupt) İçsel Kesme nedir? Örnek: 0 ile bölüm şeklindeki bir işlem sonucunda meydana gelen kesme. MOV AX, 05 MOV DX, 00 DIV DX
Kesme (Interrupt) Yazılım Kesmeleri Bu tür kesmeler, RAM veya ROM’da bulunan alt rutinlerin çağrılmasıyla oluşturulur. Programcı tarafından sık sık kullanılırlar. Yazılım kesmelerinin normal fonksiyon çağırmalarından işlevsel bir farkı yoktur. Programcı tarafından yazılan INT hh makine komutuyla koda dahil edilirler.
Kesme (Interrupt) Yazılım kesmeleri ve donanım kesmeleri arasındakı fark? Donanım kesmeleri CPU’nun direkt etkilendiği kesmelerdir. Sonucunda CPU işleme ara vermek zorunda kalır. Yazılım kesmeleri ise programcının çağırdığı giriş/çıkış (input/output) işlemleri için CPU’dan istekte bulunur ve CPU bunları sıraya koyar.
Kesme (Interrupt) INT komutu INT değer Kodun içerisinde kesme yapmak için kullanılır ve INT komutuyla yazılır: INT değer Değer: 0-255 (0 -FFh ) arasında bir sayıdır. Genellikle heksadesimal sayılarla kullanılır.
Kesme (Interrupt) INT komutu 256 tane fonksiyondan fazla fonksiyon kullanılabilir. Her kesmenin alt fonksiyonları olabilir. Alt fonksiyon tanımlamak için AH register’ına, kesme yapmadan önce bir değer atanır. Her kesmenin 256 tane alt fonksiyonu olabilir. Yani 256*256 = fonksiyon gerçeklenebilir.
Kesme (Interrupt) INT komutu Genellikle AH register’ı kullanılır. Genellikle, diğer register’lar, alt fonksiyonlara parametre veya veri göndermek için kullanılır. Ancak bazı özel durumlarda, alt fonksiyon tanımlamak için diğer register’lar da kullanılabilir.
Kesme (Interrupt) INT komutu En yaygin kullanilanlar sunlardir: INT 10h :Video Servisleri INT 16h : Kalvye Servisleri INT 17h: Yazici Servisleri INT 21h: MS-DOS Servisleri
Kesme (Interrupt) INT komutu INT 0h: Bölme i şleminde bölen 0 ise CPU tarafından 0. kesme çalıştırılır. Ekrana “divide overflow” mesajını göndererek komut satırına hatasız dönüş yapılır.
Kesme (Interrupt) INT 10h (OEH): Ekrana karakter yazdirma AL = 0EH AL kaydedicisine ekrana yazdirilacak karakter yazilir. MOV AL, ‘a’ MOV AH, 0eh İnt 10h
Kesme (Interrupt) INT 10h kesmeye bağlı servisler
Kesme (Interrupt) INT komutu INT 21h servisleri DOS işletim sisteminin ekran, klavye ve disk erişimini kolaylaştıran pek çok servisini barındırır.
Kesme (Interrupt) INT 21h kesmeye bağlı servisleri
Emu8086 Emu8086 bir kod geliştirme ortamıdır. Kod geliştirme ortamları bir programı kaynak metinden başlayarak kullanıcıyı çevirme ve bağlama işlemleriyle yormadan COM veya EXE dosyası oluşturup oluşan makine kodunu aynı zamanda kaynak metin üzerinden takip ederek izleyebilmemizi sağlar. EMU8086 assembly program geliştirme amaçlı eğitsel bir araçtır. Emu8086, Windows XP, 7 and 10 ile uyumludur ve aşağıdaki linklerden indirilebilir: www.emu8086.com https://emu8086-microprocessor- emulator.en.softonic.com/download
Emu8086 Emu8086’nın bileşenleri nelerdir? Metin Editörü Sayı Çeviricisi (Number Convertor) Flags Stack Registers ASCII çevirici .
Emu8086 Emu8086 Metin Editörü EMU86 Editörü komut anımsatıcılarını, hex sayıları ve etiketleri farklı renklendiren özel bir editordür. Metin hazırlandıktan sonra (compile) butonuna basarak kaynak metnin çevrilmesi ve bağlanmasını sağlayabiliriz. Yanındaki (emulate) butonu ise 8086 emulatorunu başlatacaktır.
Emu8086 Emu8086 Metin Editörü EMU8086 dilyapısı (syntax) MASM ve TASM gibi yaygın çeviricilerin dilyapısına çok benzer. Ayrıca EMU8086 da byte ptr ve word ptr anahtar sözcükleri b. ve w. ile kısaltılabilir. Diğer çeviricileri kullanacak olanlar metinde gerekli değiştirmeleri yapmalıdır. LEA ile ilgili sorunlar çıkabilir. LEA ya alternatif komut olarak MOV tercih edilmelidir
Emu8086 Emu8086 Uygulama Örnekleri Kaydedicilere Değerlerin Yüklenmesi Offset adresi-hexadecimal-decimal-ascıı gösterimi
Emu8086 NOTLAR: Belleğe erişim sağlamak için BX, SI,DI,BP kaydedicileri kullanılır. Bu kaydedicileri birarada [ ] sembolü ile kullanarak farklı bellek adreslerine erişim sağlarız. Bunların nasıl kullanıldığını akılda tutmak için aşağıdaki şekilden her bir bölmeden bir tanesi alınır yada hiç alınmaz. Örn: [BX +5] [BX +SI] [DI +BX-4] BX SI Indis BP DI
Emu8086 NOTLAR: Segment Kaydedicilerinin (CS,DS,SS,ES) içindeki değerlere Segment; genel amaçlı kaydedicilerin (BX,SI,DI,BP) aldığı değerlere ise Offset denir. Örnek: DS =1234h ve SI=7890h ise bellek adresi 1234:7890 olarak gösterilir.
Emu8086 MOV Komutu Adresleme Modlari MOV reg,memory MOV memory,reg MOV reg,reg MOV memory,immediate MOV reg,immediate reg: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP memory: [BX], [BX+SI+7] Immediate:5, -34, 3FH, 10001101b
COM ve EXE dosyaları COM ve EXE dosyaları assembly dilinde yazılmış programları çalıştırılabilir hale getiren dosyalardır. İkisi de aynı işi yapar ama farklı özelliklere sahiptirler.
COM ve EXE dosyaları COM (Component Object Model) dosyası CP/M (Control Program/Monitor) and MS-DOS işletim sisteminden itibaren kullanılan ilk çalışabilir dosya formatı. COM dosyasında başlık veya herhangi bir format yoktur. Text dosyalarında yazılır. 100h/ (256 decimal) adresinden başlar. Çünkü ilk 100h adresinde işletim sistemi dosyaları bulunur.
COM ve EXE dosyaları COM dosyası COM uzantılı dosyalar DOS un ilk yıllarında programları daima belleğin aynı bölgesine yükleyerek çalıştırma esasına dayanan yürütülebilir dosyalardır. En fazla 64kBayt olabilir. Kod bölütü, veri bölütüyle çakışık olan bu tip programlar DOS un yığıtını kullanır. Aynı programın COM derlemesi EXE sine göre daha kısadır.
COM ve EXE dosyaları EXE (Executable) dosyası COM dosyasının eksiklerini gidermek için oluşturulan çalıştırılabilir dosya formatıdır. EXE dosyasında kod yazmak için belli bir format kullanılır. EXE dosyaları RAM’i daha iyi kullanır. Başlangıç adresleri yoktur.
COM ve EXE dosyaları EXE dosyası EXE uzantılı çalıştırılabilir dosya biçimi daha geniş ana bellek olanaklarıyla birlikte 64kb kod sınırlamasını kaldırmak üzere oluşturulmuştur. Kod büyüklüğünde sınır yoktur, ve kendi yığıtını tanımlamak zorundadır. Kod ve veri bölütleri istenen yerden başlayabilir. EXE dosyası COM dan daha büyüktür.
COM ve EXE farkları COM EXE Boyutu 64K ile sınırlıdır. Boyut sınırı yoktur. Daha hızlı çalışır. Daha yavaş çalışır. Tek segmentten oluşur. Bu yüzden tüm segmentler aynı adres alanında yer alır. Birden fazla segmentten oluşur. Farklı segmentlerden RAM kullanabilir. Yazı formatı yoktur. Belli bir formatta yazılır. 100h adresinden başlar Başlangıç adresi yoktur.
EXE dosyası formatı .model small .stack 256 .data ; tüm veriler,değişkenler vs. buraya yazılır. .code start: ;Programın çalıştığı yer, program kodunun yazıldığı yer burasıdır. end start
Kaynaklar http://members.comu.edu.tr/boraugurlu/courses/bm307/content/week10/hafta10.pdf https://www.tutorialspoint.com/microprocessor/microprocessor_8086_interrupts.htm
Teşekkürler Sorular? Aslı Eyecioğlu Özmutlu aozmutlu@bartin.edu.tr