8086 Programlama – Kısım III Prosedürler

Slides:



Advertisements
Benzer bir sunumlar
X86 Assembly Programlama Dilinde
Advertisements

Programming 8086 – Kısım II Program Akışı ve Döngüler
Kesmeler (Interrupts)
Bilgisayar Programlama Güz 2011
Nesneye Dayalı Programlama
Bölüm 2 C Dilinin Temelleri
TEKNOLOJİ FAKÜLTESİ MEKATRONİK MÜHENDİSLİĞİ BÖLÜMÜ
Bölüm 2 C Dilinin Temelleri Genel Kavramlar
Yapısal Program Geliştirme – if, if-else
Derleyici Araçları FLEX & BISON
8051 MİKROKONTROLÖR AİLESİ
Bilgisayar Organizasyonu
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
DERS 3 MİKROİŞLEMCİ SİSTEM MİMARİSİ
Derleyici Teorisine Giriş
Çoklu dallanma seçimi: switch
Diziler Adres Kavramı Nesnelerin Adresleri sizeof Operatörü
BM-103 Programlamaya Giriş Güz 2014 (8. Sunu)
MATEMATİK ÖĞRENEBİLİR
RAISE RECORD/CURSOR TRIGGER
LD/LDI LD X0 LDI X0 X0 Y0 X0 Y1 Temel Komutlar
8086 Programlama – Kısım III Prosedürler
Intel 8086 Mimarisi Adresleme Modları
Programlama Fonksyionları
Bugünkü konular Programlama dilleri ve Syntax Generic C Program yapısı
ENDÜSTRİYEL GÖMÜLÜ BİLGİSAYAR SİSTEMLERİ
DERS 4 MİKROİŞLEMCİ PROGRAMLAMA. Dr. Emin Argun Oral, Atatürk Üniversitesi 2008 Ders 4, Slayt 2İÇERİK Yüksek seviyeli programlama dilleri Düşük sevyeli.
Amaçlar Assembly dilinin genel özelliklerini tanımak
Bölüm 2 C Dilinin Temelleri Genel Kavramlar Yazım ve Noktalama Kuralları C Kütüphaneleri C Dilindeki Sözcükler Değer Sabitleri Veri Tipleri Değişkenler.
8086 Programlaması – Kısım 1 1 Mikroişlemciler. İçerik 2 Hafıza Eri ş imi MOV komutu De ğ i ş kenler, Array’ler, Sabitler Aritmetik ve Mantık Komutları.
HAZIRLAYANLAR AYHAN ÇINLAR YUNUS BAYIR
Doç. Dr. Hatice Bakkaloğlu Ankara Üniversitesi
Newton’un Hareket Yasaları
19. VE 20. YÜZYILDA BİLİM.
Enerji Kaynakları-Bölüm 7
AKIŞKANLAR DİNAMİĞİ BÖLÜM 8 . BORULARDA AKIŞ.
MUHASEBE YÖNETMELİĞİ KONFERANSI
AZE201 ERKEN ÇOCUKLUKTA ÖZEL EĞİTİM (EÇÖE)
ÇUKUROVA ÜNİVERSİTESİ KARATAŞ TURİZM İŞLETMECİLİĞİ VE OTELCİLİK
EĞİTİMDE YENİ YÖNELİMLER
BAĞIMLILIK SÜRECİ Prof Dr Süheyla Ünal.
PSİKO-SEKSÜEL (RUHSAL) PSİKO-SOSYAL
Can, H. (1997). Organizasyon ve Yönetim.
Bölüm 9 OPERASYONEL MÜKEMMELİYETİ VE MÜŞTERİ YAKINLAŞMASINI BAŞARMA: KURUMSAL UYGULAMALAR VIDEO ÖRNEK OLAYLARI Örnek Olay 1: Sinosteel ERP Uygulamalarıyla.
ERGENLİKTE MADDE KULLANIMI
AKIŞKANLAR MEKANİĞİ 3. BASINÇ VE AKIŞKAN STATİĞİ
FURKAN EĞİTİM VAKFI TEFSİR USULÜNE GİRİŞ
Internet Anadolu’da Çalıştayı Eğitim Notları
Programming 8086 – Kısım II Program Akışı ve Döngüler
C Programlama Dili Bilgisayar Mühendisliği.
C Programlama Dili Çağdaş Hakan Aladağ.
Bilgisayar Donanım ve Sistem Yazılımı
8086 Programlama – Kısım IV Stack’ler, Makro’lar
Diyot uygulamaları Elektronik Devre Lab. Arş. Gör. KEMAL KALAYCI
Mikroişlemciler Adresleme Modları.
Bilgisayar Donanım ve Sistem Yazılımı
Cpu Nasıl Çalışır?.
Bilgisayar Donanım ve Sistem Yazılımı
Mikroişlemci Sistemleri
Bölüm 2 C Dilinin Temelleri
Bilgisayar Donanım ve Sistem Yazılımı
MİKROİŞLEMCİLER VE MİKROBİLGİSAYARLAR
MİKROİŞLEMCİLER VE MİKROBİLGİSAYARLAR
Bilgisayar Mühendisliğine Giriş
MÜHENDİSLİKTE SAYISAL YÖNTEMLER
Bölüm 2 C Dilinin Temelleri
NİŞANTAŞI ÜNİVERSİTESİ
YEDİNCİ BÖLÜM FİNANSAL PLANLAMA.
Çağ Üniversitesi Hukuk Fakültesi.
KÜMELER GEZEGENİNE HOŞ GELDİNİZ.
Sunum transkripti:

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

Prosedürler 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.

Prosedür yapısı 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.

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

Yapı hakkında bazı notlar 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.

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

CALL ve RET 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).

Prosedüre parametre göndermek 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.

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

Örnek hakkında Program, 24’ü 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; }

Örnek: Araştırma (Searching) 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.

Çözüm (Sayfa 1) 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

Çözüm (Sayfa 2) ; 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.'

Çözüm (Sayfa 3) 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 FIND ENDP