Assembly Diline Giriş Assembly Örnek Programları

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Uzman Üye
Katılım
16 Kas 2016
Mesajlar
260
Tepki puanı
9
Ödüller
5
Yaş
27
9 HİZMET YILI
Assembly Diline Giriş Assembly Örnek Programları

[font=Tahoma, Geneva, sans-serif]Programlama için günümüzde belki de en az kullanılan bilgisayar dili Assembly'dir. Ancak bilgisayar yapısı dersi kapsamında öğretilmek için kullanılabilecek en iyi dil de odur. Her iki cümledeki ifadelerin de nedeni aynıdır: Assembly, makine diline en yakın dildir.

Assembly öğrenmeye başlamadan önce bir programcının hedefinin ne olması gerektiğinin hatırlanmasında fayda vardır. Bununla birlikte programlamanın temel adımları, yani problemin ortaya konuşu, çözümün planlanması, programın kodlanması, denenmesi ve belgeleme de bu bölüm kapsamındadır.

Assembly dilinin diğer dillere göre nerede olduğunu vurguladıktan sonra programlamaya ve komutlara geçilecektir. Amaç Assembly gurusu yaratmak olmadığından bu bölüme bir giriş olarak bakılmalıdır.

Bu bölümde öğrencinin Assembly dilinin ne olduğunu, diğer dillere göre farklılıklarını kavraması amaçlanmaktadır. Ayrıca probleme bir programcı gözüyle yaklaşması beklenmektedir. Buradan hareketle basit Assembly kodları yazabilmelidir.

[/FONT]

[font=Tahoma, Geneva, sans-serif]Bölüm Hedefi[/FONT]

[font=Tahoma, Geneva, sans-serif]Bu bölümde,[/FONT]

  • Programcının hedeflerini;
  • Programlamanın temel adımlarını;
  • Programlama dillerinin seviyelerini;
  • Assembly dilinin yapısını;
  • Temel assembly kodlarını;
[font=Tahoma, Geneva, sans-serif]öğreneceksiniz.[/FONT]

[font=Tahoma, Geneva, sans-serif]Programcının Hedefi[/FONT]

[font=Tahoma, Geneva, sans-serif]Programcıdan beklenen bir problemin çözümünü bilgisayar komutlarına çevirmesidir. Bunu yaparken algoritmayı kurma, programı yazma, çalıştırma, sonuçları inceleme, hataları düzeltme, gerekli kolaylaştırmaları yapma ve sonunda belgeleme adımlarını sırası ile gerçekleştirmelidir.[/FONT]

[font=Tahoma, Geneva, sans-serif]Programlama[/FONT]

[font=Tahoma, Geneva, sans-serif]Programlama beş adımdan oluşmaktadır;[/FONT]

1L7o5D.png


[font=Tahoma, Geneva, sans-serif]>>> Problemin Tarifi[/FONT]

[font=Tahoma, Geneva, sans-serif]Problemin tarifinde amaç, girdiler, beklenen çıktılar ve yapılacak işlemlerin açıklığa kavuşturulmasıdır. Buradaki diğer adımlar gibi bu adım da herhangi bir işte takip edilmesi gereken adımlardandır. Her işe başlarken, eldekiler ve arzu edilen sonuçlar tariflenmez mi?[/FONT]

m3RDY1.png


[font=Tahoma, Geneva, sans-serif]>>> Çözümün Planlanması[/FONT]

[font=Tahoma, Geneva, sans-serif]Çözümün planlanmasının en çok bilinen yolu adım adım insan lisanı ile algoritmayı oluşturmak veya daha iyisi akış çizelgesi (flowchart) çizmektir. Akış çizgeleri neyin nasıl yapılacağını gösteren haritalar olarak düşünülebilir. Akış çizgelerinde kullanılan elemanlar standartlaşmıştır.[/FONT]

qbyDoD.png


[font=Tahoma, Geneva, sans-serif]TRT1'in teleteksinden saati öğrenmek için hazırlamış akış çizgesi.[/FONT]

[font=Tahoma, Geneva, sans-serif]>>> Programın Kodlanması[/FONT]

[font=Tahoma, Geneva, sans-serif]Bu aşamada akış diyagramındaki mantık silsilesinin bir bilgisayar dilini kullanarak bilgisayara geçirmek amaçlanmaktadır. Bu aşamada bir yazı düzenleyicisi (editor) kullanılır.

Seçilen dilin yazım kurallarına uyarak ve o dilin teknik özellikleri doğrultusunda yazım gerçekleştirilir. Bazı programlama dilini tanıyan düzenleyiciler hataları yazım esnasında bildirme veya çeşitli elemanları ayırt edici renklere boyama özelliklerine sahiptir.[/FONT]


[font=Tahoma, Geneva, sans-serif]>>> Programın Denenmesi[/FONT]

[font=Tahoma, Geneva, sans-serif]Bir defada hatasız kodlama yapılması çok zordur. Bunun için önce gözle bir kontrol yapılır. Sonra çevirici programına başvurulur. Bunlar derleyiciler veya Assembler'lar olabilir. Onlar da bize göremediğimiz yazım hatalarını bildirebilir. Daha sonra hata ayıklayıcı program ile (debugger) var olduğunu düşündüğümüz mantıksal hatalarımızı ayıklarız. Bu son aşamada gerekirse işlem adımlarının üzerinden programın adım adım geçmesi gözlenir. Herhangi bir komutta program istemediğimiz bir sonuç üretiyorsa hatanın olduğu bölge yakalanmış demektir.

Derleyici hata mesajı ile durmazsa nesne modülünü oluşturur. Link programları da bu nesne modülünü gerekiyorsa başka kütüphane programlarını da kullanarak işler ve böylece yürütülebilir (executable) programı oluşturur.[/FONT]


[font=Tahoma, Geneva, sans-serif]>>> Belgeleme[/FONT]

[font=Tahoma, Geneva, sans-serif]Belgeleme iki safhadır:[/FONT]

JaWGoo.png


[font=Tahoma, Geneva, sans-serif]Bu belgeleme programcının ve sonraki programcıların işlerini kolaylaştıracaktır. Ayrıca bazı durumlarda kullanıcılar için de programın davranışını daha iyi kavramak açısından çok faydalıdır.

Programın uzun soluklu olması için belgeleme ihmal edilmemelidir.[/FONT]


[font=Tahoma, Geneva, sans-serif]Dil Seviyeleri[/FONT]

[font=Tahoma, Geneva, sans-serif]Daha önce de bahsi geçmesine karşın Assembly'nin yerini göstermek açısından programlama dillerinin sınıflandırmasını vurgulamakta fayda var. Programlama dillerini şu şekilde seviyelendirebiliriz:[/FONT]

1L7ozp.png


[font=Tahoma, Geneva, sans-serif]>>> Düşük Seviyeli Diller[/FONT]

[font=Tahoma, Geneva, sans-serif]En düşük seviyeli dil elbette ki makine dilidir. Ona en yakın olarak da Assembly dilleri karşımıza çıkar. İşlemci bağımlı olan bu diller hızlı çalışmakla birlikte programlaması çok zordur. Komutlar daha yüksek seviyelerdeki dillerde olduğu gibi çok işlevli değildir.

Günümüzde geliştirilen yazılımlarda artık bu dil kullanımdan kalkmış gibidir. Yazılan kodlar makine diline Assembler denilen çeviricilerle dönüştürülür.[/FONT]


1L7ozA.png


[font=Tahoma, Geneva, sans-serif]>>> Yüksek Seviyeli Diller[/FONT]

[font=Tahoma, Geneva, sans-serif]Programcının daha az çaba ile daha çok şeyler yapabilmesi isteğinden bu nesil diller ortaya çıkmıştır. 1960'larda ortaya çıkmaya başlayan İngilizce'ye benzeyen bu diller halen en çok kullanılanlardır. Derleyicilerle makine diline dönüştürülürler. Bazı dillerde kodlar çalışma anında komutların dönüştürülmesi prensibi ile ele alınır. Elbette ki bu durumda önemli ölçüde bir yavaşlama söz konusu olmaktadır.

BASIC, COBOL, FORTRAN, C, C++, Java, HTML, PASCAL, Perl, vb. bilinen yüksek (üçüncü) seviyeli dillerdir.[/FONT]


Qaynbk.png


[font=Tahoma, Geneva, sans-serif]>>> Çok Yüksek Seviyeli Diller[/FONT]

[font=Tahoma, Geneva, sans-serif]4. nesil diller kullanılarak, 3. nesil dillerin 100 satırda yaptığını birkaç satırda yapmak mümkün olabilmektedir. Ancak yapılabilecekler ayrıntı bakımından sınırlıdır. Bu diller çeşitli amaçlar için özelleşmiş dillerdir. Örneğin veritabanı sorgulama dilleri bunların bir çeşitidir. Birkaç satırlık komutla çeşitli bilgilere ulaşılıp, grafikler çıkarılıp, istatistikler toparlanabilir.

Belki de 3. nesil dillerinin sonrasındakiler programlama dilleri değil, programlardır. Çünkü programcı işlem adımlarının ayrıntısından bütünüyle kopmuş olduğundan yapılan bir bilgisayarın programlanmasından çok programların programlanmasına doğru kaymıştır. Her durumda bu da bir programlamadır ve dil olsun veya olmasın bu kısmıyla bizim ilgi alanımızdadır.[/FONT]


z3yD6Y.png


[font=Tahoma, Geneva, sans-serif]>>> Doğal Diller[/FONT]

[font=Tahoma, Geneva, sans-serif]Bu diller doğal konuşma ile veya buna karşılık gelen yazılarla bilgisayara hükmetmek için tasarlanmaktadır. Bunlar bir program yazmaktan çok, tıpkı bir kısım 4. nesil dilde olduğu gibi sorgulama yapmak için tercih edilebilirler. Özellikle bilgisayardan biraz uzak kalmış insanlar (görme özürlüler gibi) için bunlar idealdir.

Ne yazık ki bilgisayarın ne istendiğini anlamadığında verdiği nazik hata iletisini fazlaca duymamak için, söz konusu dildeki komutlara da aşinalık gerekmektedir.[/FONT]


[font=Tahoma, Geneva, sans-serif]Assembly ile Programlama[/FONT]

[font=Tahoma, Geneva, sans-serif]Daha önce de vurgulandığı gibi, Assembly dili sisteme bağımlıdır. Biz x86 ailesinden IBM uyumlu bir PC üzerinde programlama yapacağız. Yani ucuz bir 80486 bizim için yeterli olacaktır.[/FONT]

[font=Tahoma, Geneva, sans-serif] >>> Yazmaçlar[/FONT]

[font=Tahoma, Geneva, sans-serif]Önce yeni yazmaçlarımızı tanıyalım:
4 tane hem 16 hem de 8 ikil için kullanılabilen içsel yazmacımız var: A, B, C, D. Bunların sonuna X getirildiğinde (AX gibi) 16 bitlik, H veya L getirildiğinde de 8 bitlik yazmaç gibi kullanılabilirler. AH, A yazmacının yüksek baytına, AL ise düşük baytına karşılık gelir.[/FONT]


Eg20XA.png


[font=Tahoma, Geneva, sans-serif]Yazmaçlar ve isimleri şöyledir:[/FONT]

ld4DMX.png


[font=Tahoma, Geneva, sans-serif]>>> Debug Programı[/FONT]

[font=Tahoma, Geneva, sans-serif]Microsoft Assembler, Turbo Assembler gibi programlar kullanılabilirse de biz öncelikle her PC'de olan bir DOS programını, DEBUG'ı kullanacağız. Bunun için Windows'ta iken bir DOS komut istemi açmak veya başlat menüsünden çalıştır demek, sonra da debug yazmak ve enter'a basmak gerekir.[/FONT]

[font=Tahoma, Geneva, sans-serif]Gelen ekranda sadece bir - işareti vardır ve imleç yanıp sönmektedir. Böylece programlama alanına girmiş oluruz.[/FONT]

[font=Tahoma, Geneva, sans-serif]DEBUG sadece COM uzantılı programlar oluşturabilir ve bu programların boyutu 64 KB'ı geçemez.[/FONT]

[font=Tahoma, Geneva, sans-serif]Komutların büyük/küçük harf duyarlılığı yoktur. Yeri geldikçe gerekli komutları göreceğiz. Kullanıcının girişleri yeşil boyalı olanlardır.

İlk göreceğimiz DEBUG komutu '?', yani help komutudur. Sonraki DEBUG komutu 'r', yani register komutudur. Yazmaçların o anki durumunu gösterir:[/FONT]


[font=Tahoma, Geneva, sans-serif]Bir program yazmaya a komutunu verdikten sonra başlanır. Eğer güncel kesimin (segment) 0100h adresi değiştirilmek isteniyorsa o da komutun sonuna eklenir. Her komut yazıldıktan sonra enter'a basılır. Hatalı ise yeniden denenir. Yazma bittikten sonra iki defa enter'a basılır. Yazma modundan böylece çıkılır. Sonra yazılan programın komutlarını birer birer işletmek için 't' komutu kullanılır.[/FONT]

[font=Tahoma, Geneva, sans-serif]Eğer bizi yazmaçların biri ilgilendiriyorsa bunu da belirtebiliriz. Hatta bu yazmacın değerini bile değiştirebiliriz.[/FONT]

gqbG73.png


NpGoaO.png

LyG6kj.png
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst