Sunum yükleniyor. Lütfen bekleyiniz

Sunum yükleniyor. Lütfen bekleyiniz

8086 Programlama – Kısım III Prosedürler 1 Mikroişlemciler.

Benzer bir sunumlar


... konulu sunumlar: "8086 Programlama – Kısım III Prosedürler 1 Mikroişlemciler."— Sunum transkripti:

1 8086 Programlama – Kısım III Prosedürler 1 Mikroişlemciler

2 Prosedürler 2 Prosedür (Procedure), belli bir i ş i gerçekle ş tirmek için programınızdan ça ğ ırabildi ğ iniz kod parçasıdır (C programlama dilindeki fonksiyonları hatırlayınız) Prosedürler, programlarınızın daha yapısal olmasını ve kolay anla ş ılır olmasını sa ğ larlar. Genellikle prosedürler, gerekli i ş lemleri gerçekle ş tirdikten sonra ça ğ rıldıkları noktaya geri dönerler.

3 Prosedür yapısı 3 isim PROC ; prosedür kodu RET isim ENDP İ sim: prosedürün ismi Aynı isim, prosedürün hem üstünde hem de altında yer almalıdır.

4 Prosedür örneği 4 SUMS PROC ADD AX, BX ADD AX, CX ADD AX, DX RET SUMS ENDP

5 Yapı hakkında bazı notlar 5 Bildi ğ iniz gibi, RET komutu, i ş letim sistemine dönmek için kullanılır. Aynı komut, prosedürden dönmek için de kullanılır (aslında, i ş letim sistemi, sizin programınızı da özel bir prosedür olarak görmektedir) PROC ve ENDP komutları ise, compiler tanımlamalarıdır. Gerçekte makine koduna dönü ş türülmezler. Compiler, prosedürlerin adreslerini hatırlar.

6 Prosedür çağrısı 6 CALL komutu, prosedür ça ğ rıları için kullanılır. Örnek: ORG 100H CALL m1 MOV AX, 2 RET ; i ş letim sistemine dön. m1PROC MOV BX, 5 RET ; ça ğ rıyı yapan kısma dön. m1ENDP END

7 CALL ve RET 7 CALL komutu ile, dönü ş adresi yı ğ ın bölümünde saklanır. RET komutu ile ise, yı ğ ın bölümünde saklanan adres alınır ve IP içerisine atanır. Prosedürlerin sonuna RET komutu yerle ş tirmeyi unutmayın! Prosedürünüzün içerisinde birden fazla RET komutu yerle ş tirebilirsiniz (C programlama dilindeki return komutu gibi).

8 Prosedüre parametre göndermek 8 Prosedürlere parametre göndermek için birkaç yol vardır. En kolay yoll, register’ların kullanılmasıdır Parametreleri register’lara yerle ş tirin ve prosedürü ça ğ ırın Prosedür, bu register’ları kullanacak ş ekilde dizayn edilmelidir. Ba ş ka bir yol da yı ğ ın bölümünü kullanmaktır Parametreleri yı ğ ın bölümüne atın ve prosedürü ça ğ ırın Prosedür, parametreleri yı ğ ın bölümünden çekecek biçimde dizayn edilmelidir Her iki yolda da, programlayıcı, prosedürün genel yapısını bilmelidir.

9 Örnek 9 ORG 100h MOV AL, 1 MOV BL, 2 CALL m2 RET ; i ş letim sistemine dön. m2PROC MUL BL ; AX = AL * BL. RET ; ça ğ rıyı yapan kısma dön. m2ENDP END

10 Örnek hakkında 10 Program, 2 4 ’ü hesaplamaktadır. Prosedür, parametreleri AL ve BL’den almaktadır; onları çarpmaktadır, sonucu ise AX’te saklamaktadır. C programlama e ş iti, a ş a ğ ıdaki gibi dü ş ünülebilir: short m2(char al, char bl) { short ax = al * bl; return ax; }

11 Örnek: Araştırma (Searching) 11 Word array’inde bulunan sayılar arasından bir sayıyı arayan bir prosedür yazınız. Prosedür, SI register’ından, array’in ba ş langıç adresini alacaktır. Aranacak sayı ise BX register’ında bulunmaktadır. Array içerisinde bulunan eleman sayısı ise CX register’ında bulunmaktadır. Prosedür, bulunan sayının offset de ğ erini DI register’ında saklayacaktır. E ğ er sayı bulunamaz ise, DI’ın de ğ eri 0 olacaktır.

12 Çözüm (Sayfa 1) 12 include emu8086.inc ORG 100H ; 2500H … 2514H arasına veri yerle ş tir MOV SI, 2500H MOV AX, 10 MOV CX, 10 LOOP1: MOV [SI], AX INC SI DEC AX LOOP LOOP1

13 Çözüm (Sayfa 2) 13 ; Parametreleri set et: MOV SI, 2500H ; start address MOV CX, 10 ; number of elements MOV BX, 1 ; number to be searched ; Prosedürü ça ğ ır: CALL FIND ; Sayının bulunup bulunmadı ğ ını kontrol et: CMP DI, 0 JNE NUMFOUND PRINT 'The number is not found' RET NUMFOUND: PRINT 'The number is found.' RET

14 Çözüm (Sayfa 3) 14 FIND PROC L1: MOV AX, [SI] ; array’den sıradaki elemanı oku CMP AX, BX ; AX’deki sayı ile kar ş ıla ş tır JE FOUND ; Bulundu ise, FOUND bölümüne atla INC SI ; Bulunmadı ise, sıradaki elemanı kontrol et INC SI ; Word array’i oldu ğ u için, SI 2 arttırılmalıdır. LOOP L1 ; Bu satıra gelindi ise, array içerisinde sayı bulunamamı ş demektir: JMP NOTFOUND FOUND: MOV DI, SI ; SI’ı, DI’a kopyala ve geri dön RET NOTFOUND: MOV DI, 0 ; DI’a sıfır’ı kopyala ve geri dön RET FIND ENDP


"8086 Programlama – Kısım III Prosedürler 1 Mikroişlemciler." indir ppt

Benzer bir sunumlar


Google Reklamları