Ders 3 ADRESLEME MODLARI ve TEMEL KOMUTLAR GÖMÜLÜ PROGRAMLAMA Selçuk Üniversitesi Bilgisayar Mühendisliği Bölümü 2012-2013 Bahar Dönemi Doç.Dr.Erkan ÜLKER 1
İçerik 1. Adresleme Modları 2. İskelet Program 3. Temel Komutlar 2
Adresleme Modları X86 mikroişlemcilerde etkili yazılım geliştirme için, her komutun kullanmış olduğu adresleme modunu bilmek gerekir: Veri adresleme: kaydediciler arasında ve kaydedicilerle hafıza arasında yapılan 8-bit, 16-bit veya 32-bitlik veri aktarımı işlemlerinde MOV komutunun kullandığı adresleme yöntemidir. Program adresleme: Programa karar verme özelliği sağlayarak program akışını kontrol eden veya değiştiren CALL ve JMP komutlarının kullandığı adresleme yöntemidir. Yığın adresleme: PUSH ve POP gibi komutlarla hafızanın stack adı verilen alanında yapılan/başvurulan adresleme yöntemidir
Adresleme Modları Veri adresleme Modları: CPU nun operandlara erişim şekilleridir. 1. Kaydedici (Register Addressing) 2. İvedi (Immediate Addressing) 3. Doğrudan (Direct Memory/Offset/Indexed Addressing) 4. Dolaylı (Indirect Memory/register Addressing) 5. Saklayıcı [Taban ve indeks] Göreceli (Based/Indexed Relative Addressing) 6. Taban indisli [ve yayılımlı] (Base-plus- Index Addressing and Base-Index with Displacement Addressing) Veri aktarım yönü Program adresleme Modları JMP ve CALL komutlarıyla kullanılmaktadır 1. Program Göreceli 2. Doğrudan (Direct) 3. Dolaylı (indirect) Yığın adresleme Modları 1. Son Giren İlk Çıkar - LIFO
Kaydedici adresleme (Register Addressing) - Kaynak ve Hedefin her ikisi de kaydedicidir. - Belleğe erişim yapılmadığı için çok hızlıdır. - Kaydediciler 8, 16, veya 32 bit olabilir. Ama karışık kullanılamaz (hedef büyüklüğü>=kaynak büyüklüğü). - Her iki taraf da Segment kaydedicisi verilemez. - CS kaydedicisi hedef olamaz (komut adresi CS:IP ikilisindedir) - MOV komutunun bütün kullanım şekillerinin burada verilmesi imkansızdır. Çünkü MOV komutunun sadece 8 bitlik kullanım örneklerinin sayısı 64 tür.
Örnek AL, BH Not:Bu ve peşi sıra gelen slide lardaki tablolar büyük oranda Alfa yayınları tarafından yayınlanan Haluk Gümüşkaya nın kitabından alıntıdır.
İvedi adresleme (Immediate Addressing) - Kaynak operand,türü Sabit olan bir ifade değeri içerir BYTE_VAL DB 150 WORD_VAL DW 300 DBWD_VAL DD 0 SUB BYTE_VAL, 50 MOV WORD_VAL, 40H MOV DBWD_VAL, 0 MOV AX, 0245H - İvedilik (immediate-ness) sağ operand daki değerlerden dolayıdır - Herhangi bir sabit, ilk operandın uzunluğundan daha büyük bir veri olamaz, ama daha küçük bir veri olabilir. - Segment kaydedicileri ve Bayrak kaydedicisi hariç tüm kaydediciler ilk operand (Hedef) olarak kullanılabilir.
Örnek!Ters bayt sıralaması
Doğrudan adresleme (Direct Memory Addressing) Doğrudan adreslemeli veri adresleme - Operandın biri, bir bellek bölgesini referans etmektedir - Diğer operand, bir kaydediciyi referans etmektedir - Referans edilen bellek bölgesi için varsayılan offset değeri DS kaydedicisindedir ADD BYTE_VAL, DL MOV BX, WORD_VAL AX ve AL kaydedicileri ile hafıza arasında yapılan aktarım komutları programlarda çok sık kullanıldıkları için, Intel bu komutları 3-byte uzunluğunda gerçekler. (Diğerleri >=4 byte)
Doğrudan adresleme (Direct Offset Addressing) Direk-ofset adresleme veya değişim/yayılım (displacement) adreslemesi olarak da bilinir. - Adres modifikasyonlarında aritmetik operatörler kullanılır BYTE_TBL DB 12, 15, 16, 22 WORD_TBL DB 163, 227, 485 DBWD_TBL DB 465, 563, 897 MOV CL, BYTE_TBL[2] ; 16 yı aktarır MOV CL, BYTE_TBL+2 ; aynı MOV CX, WORD_TBL[4] ; 485 i aktarır MOV CX, WORD_TBL+4 ; aynı MOV ECX, DBWD_TBL[8] ; 897 yi aktarır MOV ECX, DBWD_TBL+8 ; aynı
Doğrudan adresleme (Direct Offset Addressing) Komut operandından hemen sonra gelen bellekteki verinin adresi bir Sabittir Adres ise ofset adresidir. Ofset adresi köşeli parantez içine yerleştirilir Örnek: MOV DL,[2400] ; DS:2400H bellek bölgesindeki veriyi/içeriği DL kaydedicisine taşır Örnek: Aşağıdaki işlemin çalıştırılmasından sonra bellek bölgesinin fiziksel adresi hesaplanır ve o adresdeki veriye/içeriğe ulaşılır. (Örneğin DS=1512H gösteriyor olsun) MOV AL,99H MOV [3518],AL Fiziksel adres hesaplanır DS:3518 => 15120+3518=18638H 18638H adresindeki bellek bölgesi 99H değerini içerecektir
Örnek
Doğrudan adresleme (Direct Indexed Addressing) - DI ve SI kaydedicilerine ek olarak matris formunda ofset veya değişim/yayılım değeri (displacement) içerir. - Tablo elemanına ulaşmada kullanılır. Operanddaki yayılım değeri tablonun başlangıcını, indis kaydedicisi tablo içerisindeki bir elemanı gösterir. - Örnek DATATBL DB 365 DUP(?) LEA BX, DATATBL MOV BYTE PTR [BX+2],0 ;nerede? Diğer örnekler: ADD CL,[DI+12] SUB DATATBL[SI], 25 MOV DATATBL[DI], DL MOV DX, [EAX+4] ADD DATATBL[EDX], CL