Program Kontrol Komutları Mikroişlemciler ve Mikrobilgisayarlar 1
Bu başlık, altında incelenecek olan komutlar program akışını oluşan bazı koşullara göre değiştirmektedirler Program akışında meydana gelen değişiklik genellikle bir CMP veya TEST komutuyla yapılan bir testin sonucuna göre gerçekleştirilir Mikroişlemciler ve Mikrobilgisayarlar 2
I) Dallanma (Branch) İşlemi JMP (jump) komutu ile belleğin bir bölümünden diğer bir bölümüne program akışı yönlendirilebilir Dallanma işlemi direkt olarak yapılabileceği gibi belli bir koşula göre de yapılabilir Mikroişlemciler ve Mikrobilgisayarlar 3
Doğrudan Dallanma JMP komutunun 3 farklı kullanım şekli vardır Bunlar : a)kısa (Short) Dallanma b)yakın (Near) Dallanma c)uzak (Far) Dallanma Mikroişlemciler ve Mikrobilgisayarlar 4
JMP SHORT_ADR Op-Code Operand 2 byte JMP NEAR_ADR Aynı Segment İçerisinde Gerçekleştirilen Dallanma Op-Code Adr(LOW) Adr(HIGH) 3 byte JMP FAR_ADR Bir segmentten diğer bir segmente dallanma gerçekleştirir Op-Code OFFSET(LOW) OFFSET(HIGH) SEGMENT(LOW) SEGMENT(HIGH) 5 byte Mikroişlemciler ve Mikrobilgisayarlar 5
Dallanma komutu, 16 bit bir saklayıcıyı operand olarak kullanabilir Bu tür dallanma, dolaylı dallanmadır ve saklayıcının içindeki adres dallanma adresi olarak kullanılır Saklayıcının adresi IP a alınır ve program bu adresten itibaren yürütülür Örn: ADD SI,SI ; Tablodaki dallanma adresleri 2 byte lık aralıklarla düzenlenmiştir ADD SI, OFFSET TABLO ; Dallanılacak konumun adresi MOV AX, CS:[SI] ; JMP AX ; Altprograma Dallan TABLO : DW SUB0 DW SUB1 DW SUB2 DW SUB3 Mikroişlemciler ve Mikrobilgisayarlar 6
Aynı işlem indisli adresleme kullanılarak da gerçekleştirilebilir ADD SI,SI ADD SI, OFFSET TABLO JMP CS: [SI] ; Tablodaki dallanma adresleri 2 byte lık aralıklarla düzenlenmiştir ; Dallanılacak konumun adresi ; Altprograma Dallan TABLO : DW SUB0 DW SUB1 DW SUB2 DW SUB3 Mikroişlemciler ve Mikrobilgisayarlar 7
Koşullu Dallanma Şartlı dallanma komutlarının ilk harfi J ile başlar ve takip eden 1,2 yada 3 harf şartı gösterir Genele olrak JXXX şeklinde gösterilebilir Duruma bağlı olan dallanmalar; İşaret (Sign-S), Sıfır (Zero-Z), Elde (Carry-C), Eşlik (Parity-P) ve taşma (Overflow-O) bayraklarını test ederler Eğer test edilen durum doğru ise, program akışı dallanma komutu ile belirtilen adresten devam eder Eğer durum yanlış ise, dallanma gerçekleşmez ve sıradaki komut icra edilir Mikroişlemciler ve Mikrobilgisayarlar 8
Bayrakların Durumunu Test Etmek İçin Kullanılan Koşullu Dallanma Komutlar Mikroişlemciler ve Mikrobilgisayarlar 9
İşaretsiz Sayılarda Kullanılan Koşullu Dallanma Komutları Mikroişlemciler ve Mikrobilgisayarlar 10
İşaretli Sayılarda Kullanılan Koşullu Dallanma Komutları Mikroişlemciler ve Mikrobilgisayarlar 11
ÖRNEK MOV AL, 10 ; AL=Ah MOV BL, 15 ; BL=Fh CMP AL,BL ; JNS TABLO CMP işleminin sonucunda negatif bir değer elde edileceği için S bayrağı kurulur (S=1) Ayrıca ilk 4 bitten barrow oluşacağı ve 8 bitin sonunda da barrow oluşacağı için A ve C bayrakları kurulur Bu durumda dallanma gerçekleşmeyecek ve program bir sonraki komutu yürütecektir TABLO : DW SUB0 DW SUB1 DW SUB2 DW SUB3 Mikroişlemciler ve Mikrobilgisayarlar 12
MODEL SMALL STACK32 DATA BUFFER DB BİLGİSAYAR MÜHENDİSLİĞİ,0Ah,0Dh,24h MESAJ DB? CODE ANA PROC TEKRAR: MOV AH,01h ; 21 nolu interruptın 01 nolu fonksiyonu klavyeden karakter okur ANA ENDP INT 21h ; Okunan karakterin ASCII karşılığı AL kaydedicisindedir MOV MESAJ[SI],AL; Karakter DS:MESAJ alanına sırasıyla yerleştiriliyor INC SI CMP AL, 30h ; Girilen karakter 0 mı? (0 ın ASCII karşılığı 30h) JNZ TEKRAR; Sıfır olana kadar döngü icra edilecek DEC SI ; MOV MESAJ[SI],24h; En son girilen 0 karakteri string sonu karakteri ile değiştiriliyor MOV DX, OFFSET MESAJ MOV AH, 09h INT 21h MOV AH,4Ch INT 21h END ANA Mikroişlemciler ve Mikrobilgisayarlar 13
LOOP Komutu Loop komutu CX saklayıcısını azaltma ile duruma bağlı dallanma işlemlerinin birleşimidir Her seferinde CX saklayıcısı 1 azaltılır CX=0 olduğu durumda döngüden çıkılarak normal akış sırası takip edilir MOV SI, OFFSET BLOCK1 TEKRAR: MOV DI, OFFSET BLOCK2 MOV CX,100 LODSW ; Block1 den veri okunmakta (DS:SI in işaret ettiği yerden) ADD AX, ES:[DI]; Block2 verisi ile topla STOSW; ES:[DI] ile belirtilen Block2 bölgesinde sakla LOOP TEKRAR Mikroişlemciler ve Mikrobilgisayarlar 14
II)ALTPROGRAMLAR (SUBROUTINES) Altprogram hafıza alanından tasarruf sağlar ve altprogramlar içeren bir programı yazmak daha az zaman aldığı için kod yazımını kolaylaştırır Altprogram ile ana program arasındaki parametre aktarımı, alt program çağırma (CALL) ve geri dönüş (RET) işlemlerinde fazladan zaman gerektirir Bir altprogram CALL komutu ile çağırılırken, yığın (Stack) hafıza, CALL komutundan sonraki komutun adresini saklamada kullanılırret komutu ile yığından okunan dönüş adresinden itibaren program çalışmasına devam eder Mikroişlemciler ve Mikrobilgisayarlar 15
Altprogram yazılırken PROC direktifi ile başlar ve ENDP direktifi ile son bulur Bu yapı, bir altprogramı diğerlerinden ayrılmasını sağlar PROC direktifi, altprogramın tipini belirten NEAR (segment içi) veya FAR (segmentler arası) direktifini takip eder SUB0 PROC NEAR RET SUB0 ENDP SUB1 PROC FAR RET SUB1 ENDP Mikroişlemciler ve Mikrobilgisayarlar 16
SUB0 PROC NEAR RET Opcode(C3h) SUB0 ENDP SUB1 PROC FAR RET Opcode(CBh) SUB1 ENDP İki altprogram arasındaki fark, assembler tarafından RET komutu için üretilen op-code da bulunur Yakın RET, yığından 16 bitlik bir sayı çeker ve bunu geri dönebilmek için IP e yerleştirir Uzak RET, yığından 32 bitlik bir sayı çeker ve bunu geri dönebilmek için IP ve CS e yerleştirir Mikroişlemciler ve Mikrobilgisayarlar 17
CALL Komutu CALL komutu program akışını bir program akışını bir altprograma aktarır Bu komutun JMP komutundan farkı, bir CALL komutu yürütülürken geri dönüş adresi otomatik olarak yığında saklanır Altprogram sonundaki RET komutuyla bu dönüş adresi yığından çekilir CALL NEAR_ADR Op-Code Adr(LOW) Adr(HIGH) 3 byte CALL FAR_ADR Altprogramın farklı bir segmette olması durumunda Op-Code OFFSET(LOW) OFFSET(HIGH) SEGMENT(LOW) SEGMENT(HIGH) 5 byte Mikroişlemciler ve Mikrobilgisayarlar 18
CALL komutu bir saklayıcı operand olarak kullanılabilir Örn: CALL BX ; Bu komutta ilk önce o anki IP değeri yığına aktarılır ve BX registerindeki ofset adres, o anki CS de bulunan bir altprogram çağırımı için IP a yerleştirilir Mikroişlemciler ve Mikrobilgisayarlar 19
Dolaylı hafıza adresi kullanarak da bir altprogramın çağrılması mümkündür TABLO: DW SUB0 ADD DI,DI DW SUB1 MOV BX, OFFSET TABLO ; Tablonun başlangıcına işaret etmekte CALL CS:[BX+DI] ; Alt programın çağrımı SUB0 PROC NEAR RET SUB0 ENDP SUB1 PROC NEAR RET SUB0 ENDP Burada CS alanında bulunan alt programlara erişilmektedir Eğer ki; CALL FAR PTR [SI] gibi bir ifade kullanılsaydı DS alanında SI ile işaretli 32 bitlik bir adres okunur ve bu adrese ile belirtilen yere dallanılarak alt program icra edilir Mikroişlemciler ve Mikrobilgisayarlar 20
RET Komutu RET komutu, yığın hafızadan, yakın dönüş için 16 bit bir sayı veya uzak dönüş için 32 bit sayı geri çeker Bu sayıyı; yakın dönüşte IP saklayıcısına, uzak dönüşte ise IP ve CS çiftine yerleştirir Mikroişlemciler ve Mikrobilgisayarlar 21
III)Kesmeler (Interrupts) Sistemde meydana gelen kesmeleri 3 farklı incelemek mümkündür Bunlar ; kategori altında a)donanımsal Kesmeler b)içsel Kesmeler c)yazılım Kesmeleri Mikroişlemciler ve Mikrobilgisayarlar 22
Donanımsal Kesmeler Yazılım kesmeleri programcı tarafından çağırılırken donanım kesmeleri elektriksel yolla çağırılmaktadırher 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 Örn: Klavye üzerindeki bir tuşa basılması Böyle bir durumda CPU, yapmakta olduğu işi bırakıp basılan tuşun değerini değerlendirecektir Bu tür kesmeler, 8259A olarak isimlendirilen elektronik devre yardımıyla kontrol altında tutulur Mikroişlemciler ve Mikrobilgisayarlar 23
Sık kullanılan bazı donanımsal kesmeler: Mikroişlemciler ve Mikrobilgisayarlar 24
İçsel Kesmeler 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 Örn: 0 ile bölüm şeklindeki bir işlem sonucunda meydana gelen meydana gelen kesme Mikroişlemciler ve Mikrobilgisayarlar 25
Yazılımsal Kesmeler 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ı yokturbunlar programcı tarafından yazılan INT hh makine komutuyla koda dahil edilirler Kesme çağırma, uzak CALL komutuna benzer, çünkü geri dönüş adresi (IP/CS) ikilisine sırayla yerleştirilir Mikroişlemciler ve Mikrobilgisayarlar 26
Kesme vektörü, mikroişlemci gerçek modda (real mode) çalışırken, hafızanın ilk 1024 byte lık alanında (00000h-003FFh) saklı olan 4 byte lık bir adrestir Dolayısıyla 256 farklı kesme vektörü bulunur Her kesme vektörü, bir kesme hizmet programının adresini oluşturan IP ve CS adresi içerir Kesme Vektörü IP için CS için Hafızada kesme alt programın bulunduğu adresi işaret eder 2 byte 2 byte İlk 32 kesme vektörü (0-31) 8086-80486 ve daha sonraki işlemciler için ayrılmıştır Geriye kalan kesme vektörleri (32-355) kullanıcı içindir Ayrılmış olan vektörlerin bazıları, bölme hatası veya programın yürütümü sırasında oluşan hatalar içindir Kod numaraları 32 ile 96 arasında yer alan interrutptlar DOS interruptlarıdır Mikroişlemciler ve Mikrobilgisayarlar 27
Mikroişlemciler ve Mikrobilgisayarlar 28
Kesme Komutları 3 farklı kesme komutu bulunmaktadır Bunlar: a)int b)into c)int3 Bu komutlar gerçek modda vektör tablosundan (bkz slayt 28) bir vektör okur ve sonra da bu vektörle adreslenen kesme hizmet programını çağırır Korumalı modda ise IDT (Interrrupt Descriptor Table) den bir tanımlayıcı okur Mikroişlemciler ve Mikrobilgisayarlar 29
a) INT Komutu Programcının kullanımına sunulan 256 farklı kesme komutu bulunmaktadır INT 21h Komutu (Desimal 33kesme vektörü) Op-code Operand KesmeVektör Tablosu Bellek 0 1 byte 1 byte 1 2 3 Kesme Alt Programı 33 IP:CS IRET 4 byte 255 Mikroişlemciler ve Mikrobilgisayarlar 30
Kesme vektörünün adresi hesaplanırken, kesme tipi numarası 4 ile çarpılır Örn: 21h x4 = 84h ; Interrupt 21 i kullandığımızda belleğin ilke 1024 bytenın içinden 132 sırada olan (84h) alana gidilecek burada 4 byte lık adres ile belirtilen adrese gidilip kesme altprogramı icra edilecektir INT 21h Komutu (Desimal 33kesme vektörü ve adresi 84h) Bellek KesmeVektör Tablosu Op-code Operand 00000h 1 byte 1 byte Kesme Alt Programı 00084h IP:CS 4 byte IRET 003FFh Mikroişlemciler ve Mikrobilgisayarlar 31
Bir yazılım kesmesi yürütüldüğünde aşağıdaki işlemler gerçekleşir: a) Flag registeri stack üzerine push edilir b) Trap bayrağı resetlenir c) Interrupt bayrağı resetlenir d) CS registeri stack üzerine pust edilir e) INT komutu ile kullanılan interrupt numarası 4 ile çağılır ve X olarak gösterilen bir değer elde edilir f) 0000 segmentinin X no lu offsetinde yer alan ikinci word (2 16 bitlik değer) CS registerine aktarılır g) IP registeri stack üzerine push edilir h) X no lu offset de yer alan ilk word (1 16 bitlik değer) IP registerine aktarılır Yazılım kesmeleri, genellikle sistem programlarını çağırmada kullanılır Mikroişlemciler ve Mikrobilgisayarlar 32
IRET Daha önce incelenen RET komutundan farklı olarak, IRET komutu ile aşağıdaki işlemler gerçekleştirilir a)ip registerinin eski değeri stack üzerinden pop edilir b)cs registerinin eski değeri stack üzerinden pop edilir c)flag registerinin eski değeri, stack üzerinden pop edilir Korumalı moddaki karşılığı IRETD dir Mikroişlemciler ve Mikrobilgisayarlar 33
INTO Taşma (Overflow) durumunda oluşan bir kesmedir Eğer Overflow=0 ise INTO komutu herhangi bir işleme neden olmaz Eğer Overflow=1 ise 4 numaralı kesmeyi çağırır Çalışma mantığı JO (Jump Overlow) komutu ile benzerlik gösterir Mikroişlemciler ve Mikrobilgisayarlar 34
CLI ve STI (Clear Interrupt ve Set Interrupt Flag) Bu komutların kullanım amacı, mikroişlemcinin interrupt sinyallerine cevap vermesini veya vermemesini sağlamaktır CLI komutu kullanıldığında I=0 olur ve mikroişlemci NMI(Nonmaskable Interrupts) olarak isimlendirilen interruptların dışındaki hiçbir interrupt isteğine cevap vermeyecektir STI komutu kullanıldığında I=1 olur ve mikroişlemci tekrar gelen interrupt isteklerine cevap verecektir Mikroişlemciler ve Mikrobilgisayarlar 35