X86 Assembly Programlama Dilinde Komut yapısı, talimatlar ve veri tanımlamaları
DEVAM: ADD AL,07H komut satırı incelendiğinde Program Formatı Komut yapısı: DEVAM: ADD AL,07H komut satırı incelendiğinde ETİKET ALANI ÖZELLİKLERİ: 1- A’dan Z’ye büyük ve küçük harfler kullanılabilir. Assembler büyük-küçük harf ayrımı yapmaz. 2- Sayısal 0 ile 9 arası rakkamlar kullanılabilir. 3- Özel karakterler $,@,% ve ? gibi karakterler kullanılabilir. 4- Etiket adı en fazla 32 karakter olmalıdır. 5- İlk karakter muhakkak harf olmalıdır. 6- Program komutları etiket adı olarak kullanılmamalıdır. 7- Karakterler arasında boşluk bırakılmamalıdır.
Komut alanı Komutlar mnemonic olarak adlandırılan ingilizce kelimelerin kısaltmalarından meydana gelen yapıdır. İngilizce olarak opcode alanı olarak isimlendirilir.
Tek başına bir anlam ifade etmez. Komuttan sonra gelir. Operand Alanı: Operand alanı işlemci içerisinde işlenecek verinin nerede olduğunu belirten kısımdır. Tek başına bir anlam ifade etmez. Komuttan sonra gelir. Operandı olmayan komutlar da vardır. (PUSH, NOT vb..) Bu alanın yazılması için komuttan sonra en az bir karakterlik boşluk bırakılması gerekir.
Bu alan kaynak operandı ve hedef operandı olmak üzere iki bölümden oluşur. Her bölüm kendi içinde üçe ayrılır. Bunlar, veri, kaydedici ve bellek alanıdır. Kaynak operand, doğrudan bir veri, kaydedici, bellek adresi yada o adresi gösteren bir kaydedici olabilir. Hedef operand, kaydedici veya bellek adresi yada o adresi gösteren bir kaydedici olabilir.
H Hexadecimal (onaltılık) D Decimal (onluk) O Oktal (sekizlik) Ayrıca, doğrudan verilerin sonunda B,H,D ve O harfleriyle sayının formatı belirtilebilir. B Binary (ikilik) H Hexadecimal (onaltılık) D Decimal (onluk) O Oktal (sekizlik) demektir.
TALİMATLAR Talimatlar, program içerisinde segmentlerin tanımlanması, altyordam gibi prosedürlerin kurulması, verilerin tanımlanması ve bellek alanlarının ayrılması gibi işlemleri yapmak için kullanılır. Talimatlar amaç kodları üretmezler. Bu alanda yazılan ifadeler doğrudan derleyici ile ilgilidir. Talimatlar komutları belli bir düzene sokarak işlemciye ulaştırır.
SEGMENT TALİMATLARI Bu talimat ile segmentin başlangıcını ve sonunu tanımlarız. Her segmentin açılması bir anlamlı adla başlar ve aynı adla kapanır. Bir programda birden fazla segment tanımlaması yapılabilir. 4 adet segment alanı vardır. Bunlar, kod segment ile komutların yerleştirildiği, data segment ile verilerin depolandığı, ekstra segment ile sonuçların yazıldığı ve yığın segmenti ile verilerin geçici bir süre atıldığı bellek alanını ifade eder.
Her segment’de align, combine ve class olmak üzere üç yardımcı operand mevcuttur.
Align Parametresinin Kullanımı Program kodlarının belleğe yüklenmesini belli bir düzen içerisinde gerçekleştirir. Bu yerleşim çeşitleri; byte(bir byte’lık yerleşim, word(iki byte’lık yerleşim), doubleword(dört byte’lık yerleşim) ve para(16 byte’lık yerleşim, paragraf) şeklindedir. Program içerisinde bu parametre kullanılmadığı zaman(default) “para” parametresi olarak 16 byte’lık yerleşim gerçekleşir.
Combine Operandı Aynı adla tanımlanmış segmentlerin birbirleri ile arasındaki bağı (koordine eder) kurar. Parametreler ise; public, stack, common, memory ve AT operandlarıdır
Class Operandı Segmentte depolanacak veri veya komut kodlarının alanını (sınıfını) belirtir. Genel olarak parametrelerin kullanım şeklini aşağıdaki şekille gösterecek olursak.
PROC TALİMATI Özel bir amaçla yazılmış program parçalarına prosedür denir. Genel bir program içerisinde birisi ana prosedür olmak üzere bir den çok prosedür bulunabilir. Prosedürler içerisinden prosedürler çağrılabilir. Alt prosedürler genelde ana prosedür içerisinden CALL komutu yardımı ile çağrılır. Açılan her prosedür açıldığı adla birlikte kapatılır. Bunu kullanan komut ise ENDP’dir. Prosedür çağrılarının aynı segmentte mi yada başka bir segmentte mi olduğunu ifade eden FAR ve NEAR operandları mevcuttur. Segment dışı çağrılar için FAR operandı segment içi çağrılar için ise NEAR operandı kullanılır.
Basit bir prosedür kullanımı aşağıdaki gibidir… Prosedürlerle yazılmış bir programın programcıya sağladığı faydalar şunlardır: Tekrarlı komut yazımından kazanç sağlar. Ortak prosedürler kullanılarak komut sayısı azaltılır. Daha iyi bir program analizi sağlar. Program hataları açık bir şekilde görülür. Prosedürlerin düzeltilmesi kolaylaşır.
İçiçe geçmiş bir prosedür yapısı..
ASSUME TALİMATI Assume talimatı hangi segment kaydedicilerini kullanacağını tanımlar. Kullanım şekli aşağıdaki gibidir. Segment kaydedicileri CS, DS, SS ve ES’dir. Yukarıdaki kullanım şeklinde segment_kaydedicisi yerine bu dördünden biri yazılır. Segment_adı ise kullanıcı tarafından belirlenir. Bir segmente atanan segment kaydedicisi, program içerisinde daha sonraları istenildiğinde yeni bir assume ile değiştirlebilir.
END Talimatı End talimatı başlatılan işlemin sonlandırılması anlamındadır. Yanına gelen takılar ile işlevdeki hareketi sonlandırır. ENDS ile segment sonu, ENDP ile prosedür sonu, Takısız END hali ile programın sona erdiğini ifade eder.