2. ASSEMBLY NEDÄ°R?
• Bilgisayar programlarının yazılmasında kullanılan alt seviyeli bir dildir. Alt
seviye denilmesindeki sebep programlamanın Java, .NET gibi dillerden farklı
olarak bilgisayarın çalışma prensibi olan iki sayı sistemine en yakın
programlamayı yapabilmesidir.
• Diğer programlama dillerine göre daha zordur. Gelişmiş bir kullanıcı arayüzü
yoktur.
3. NEDEN ASSEMBLY?
Assembly ile yazılan programların elbette zorluğunun karşılığında avantajlarıda
mevcuttur.
• İşlemci üzerindeki komutlara aracısız erişim sağlanmaktadır.
• İşlemci gücünü en iyi ortaya koyan programlama dilidir.
• Hızlı çalıştığı için hız gerektiren uygulamalarda avantaj sağlar.
• Boyut olarak daha az yer kapladığı için daha az bellek tüketir.
4. BINARY SAYI SÄ°STEMÄ°
• Bilgisayar binary sayı sisteminde çalıştığı için binary sayı sisteminin
bilinmesi gerekmektedir.
• İkili sayı sistemi, konum gösterimi kullanır. Yani bir basamağın yazıldığı her
konum farklı bir değere sahiptir. Her pozisyon ikili sayı sisteminde 2’nin
katları şeklinde artar.
5. BINARY SAYI SÄ°STEMÄ°
• Verimizin 11100000 olduğu düşünüldüğünde en sağdaki bit (LSB) en değersiz bit
olarak adlandırılır. En soldaki bit ise en değerli bit (MSB) olarak
adlandırılır. Her bir konumun 2’nin 0’dan başlayarak 1’er artan bir üs değeri
vardır.
• Verilen sayının hesabı yapılırken, verinin değeri (0 veya 1) ile bulunduğu bit
sayısı 2n (n=bit numarası)ile çarpılarak tüm bitlerin toplanmasıyla elde
edilir. Bu örnekteki sayının değeri;
1.27 + 1.26 + 1.25 + 0.24 + 0.23 + 0.22 + 0.21 + 0.20 = 224
şeklinde hesaplanır.
6. HEXADECIMAL SAYI SÄ°STEMÄ°
• Bu sayı sisteminde rakamlar 0 ile
15 arasındadır. Bu sayı sisteminin
kuralına göre A,B,C,D,E,F,
harfleri sırasıyla
10,11,12,13,14,15 deÄŸerlerine
karşılık gelmektedir. Binary sayı
sisteminde gösterimi kısaltmak
için kullanılır.
• Aşağıdaki tabloda sayıların
Decimal, Binary ve Hexadecimal
karşılıkları verilmiştir. Onluk
sayı sistemi günlük hayatta
kullandığımız sayı sistemidir.
12. SEGMENTLER
Data Segment
.data ve .bss ile gösterilir. .data bölümü veri elemanlarının program için
saklandığı bellek bölgesini bildirmek için kullanılır.
Code Segment
.text ile gösterilen kısımdır. Bu alan, komutları saklayan bölgeyi gösterir.
Sabit bir alandır.
Stack(Yığın)
Bu bölüm geçici depolama alanı olarak kullanılır. Yığın, LIFO mantığı ile
çalışır. (Last İn First Out). Eklenen veriler yığının üst kısmına eklenir ve üst
kısmında çıkar. Yığının üst kısmına veri ekleme PUSH, verinin üst kısmından veri
çıkarma POP olarak adlandırılır.
13. ENDIANNESS
• İnsanların soldan sağa veya sağdan sola alfabelere sahip olmaları gibi
işlemciler de baytları saklarken önemli byte'ın solda veya sağda olmasına göre
sınıflandırılır. Buna endianness denir. Diğer bir anlatım ile endianness, byte
sıralamasıdır.
• Değerli byte'ın solda olduğu sıralamaya big-endian (düz sıralı) denir.
• Değerli byte'ın sağda olduğu sıralamaya ise little-endian (ters sıralı) denir.
14. GENERAL REGISTERS
Data Registers
Data registerlar aritmetik ve mantıksal işlemler için kullanılırlar.
Pointer Registers
Hafızada adreslerinin tutulmasında kullanılırlar.
Index Registers
Hedef ve kaynak adreslerinin tutulmasında kullanılırlar.
15. CONTROL REGISTERS
• 32 bit intruction register ve 32 bit flag registerı, control registers olarak
kabul edilir.
• Birçok komut, matematiksel hesaplamaları içerir ve flag durumunu değiştirir.
• Bazı durumlarda başka fonksiyona dallanma işleminin olup olmayacağını
flaglardan kontrol eder.
16. SEGMENT REGISTERS
Code Segment
• Yürütülecek olan tüm komutları içerir.16 bitlik bir code segment register veya
CS registerı kodun başladığı alanın adresini saklar.
Data Segment
• Veri,sabitler ve çalışma alanlarının adresleri burada tutulur.16 bitlik bir
data register(DS), data bölümünün başlangıç adresini tutar.
Stack Segment
• Bir fonksiyonun dönüş adresini tutar. Stack yapısı uygulanır (LIFO).Stack
register(SS) stack başlangıç adresini tutar.
19. LINUX SÄ°STEM Ç´¡Äž¸é±õ³¢´¡¸é±õ
Sistem çağrıları, kullanıcı ile çekirdek arasında arayüz için kullanılan
API’lerdir.
Yazılan Assembly programında Linux sistem çağrılarını kullanabilmek için aşağıdaki
adımlar uygulanmalıdır.
• EAX registerına sistem çağrı numarası eklenir.
• Argümanlar registerlarda (EBX,ECX gibi) sistem çağrısına kaydedilir.
• Uygun olan kesme çağrılır.(80h)
• İşlem sonucunda çıkan sonuç genellikle EAX registerına döndürülür.
21. STACK ve HEAP
• Yazılan programlar çalıştırılırken hafızada yer kaplar.
• Kapladığı yer kimi zaman belliyken kimi zamanda program esnasında kullanıcının
gireceği verilere göre değişebilir.
• Program esnasında boyutları bildirilmiş değişmez değerler kullanılıyorsa stack,
değişebilir değerler kullanılıyorsa heap kullanılması tavsiye edilir.
23. INC, DEC, ADD, SUB
• Bir değeri birer birer arttırmak için INC komutu kullanılır.
>> INC [destination]
• Bir değeri birer birer azaltmak için DEC komutu kullanılır.
>> DEC [destination]
• İki değeri toplamak için ADD komutu, iki değeri birbirinden çıkarmak için SUB
komutu kullanılır.
>> ADD eax,ebx
>> SUB eax,ebx
25. AND, OR, XOR, TEST, NOT
• AND komutunda iki bitin değeri de 1 ise o zaman sonuç 1 olur. Geri kalan tüm
durumlarda sonuç sıfır olur.
• OR komutunda sonucun 1 olması için herhangi bir bitin 1 olması yeterlidir.
• XOR komutunda ise bitler aynıysa sonuç 0, bitler farklıysa sonuç 1 olur.
• TEST komutu AND komutunun aynısıdır ancak çıkan sonuç PF,SF ve ZF bayraklarını
etkiler. Bir sayının çift mi tek mi olduğu bulunurken kullanılabilir.
• NOT komutu bir bit olarak işlem gerçekleştirir. Bir işlemcide bulunan tüm bitler
bu komut sayesinde tersine çevrilebilir.
27. KoÅŸullu ve KoÅŸulsuz Dallanma
• Bu JMP komutu ile gerçekleştirilir. Koşullu dallanma, çoğunlukla, yürütülen
komutu takip etmeyen bir komut adresinde iÅŸleme devam etmeyi emreder.
• Bu duruma göre j<koşulu> ile gerçekleştirilir. Koşullu komutlar ardışık akışı
bozarak kontrolü devreder ve offset değerini değiştirerek bunu yaparlar.
32. PROCEDURES
• Fonksiyonlar bir isim ile tanımlanır. Daha sonra yapacağı işler yazıldıktıktan
sonra "ret" komutu ile bitirilir.
• CALL komutu kullanılarak fonksiyon başka bir fonksiyondan çağrılabilir.
>> CALL func_name
33. MACRO
• Modüler, yönetimi kolay bir program yazmanın bir diğer yolu da makrolardır.
• Makro, bir isimle atanan ve programın herhangi bir yerinde kullanılabilen
komutlar dizisidir.
• NASM'da makrolar %macro - %endmacro komutlarıyla kullanılabilir.
• %macro macronun başladığını %endmacro bittiğini belirtir.
35. FILE DESCRIPTOR
• File decsriptor, bir dosyaya veya ağ soketi gibi başka bir giriş / çıkış
kaynağına erişmek için kullanılan soyut bir göstergedir.
• Yeni bir dosya oluştuğu zaman veya mevcut dosya açıldığı zaman dosyaya erişmek
için bu ID numarası kullanılır.
• Standart dosya akışlarının dosya tanımlayıcısı stdin, stdout, stderr sırasıyla
0,1,2'dir.
36. FILE POINTER
• File pointer, dosyada okuma/yazma işleminin konumunu byte cinsinden belirtir.
• Her dosya byte dizisi olarak kabul edilir. Her açık dosya, dosyanın başlangıcına
göre byte cinsinden bir uzaklık belirten bir file pointer ile ilişkilendirilir.
• Dosya açıldığında file pointer resetlenir.