assembly e kitap

Upload: 123142asdad

Post on 04-Apr-2018

232 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/29/2019 Assembly E Kitap

    1/175

    1 NEDEN SEMBOLK MAKNA DL RENLMELDR? .....................................6

    1.1 MKROLEMCLERN ALIMA BMLER ............................................................................61.2 TPK BRRAMN YAPISI...............................................................................................71.3 CPU LE RAM ARASINDAK BALANTI.............................................................................71.4 MAKNA KOMUTU KAVRAMI..............................................................................................8

    1.5 MAKNA KOMUTLARININ GENEL BM..............................................................................81.6 80X86 MKROLEMCSNN ALIMA MODLARI...................................................................91.7 8086 LEMCSNN YAZMA YAPISI...................................................................................91.8 80386 VE YUKARI MODELLERN REGSTER YAPISI.............................................................11

    2 MAKNE KOMUTLARINDAK BELLEK OPERANDLARI ..................................12

    2.1 16 BT ALIMADA BELLEK OPERANDININ OLUTURULMASI................................................ 132.2 16 BT ADRESLEME LEM..............................................................................................152.3 32 BT ADRESLEME LEM..............................................................................................162.4 32 BT BELLEK OPERANDININ OLUTURULMASI..................................................................162.5 16 BT ALIMADA FLAG REGSTERI...............................................................................17

    2.6 TURBO DEBUGGER..........................................................................................................192.7 CS VE IP REGSTERLARININ NEM.................................................................................192.8 MAKNE KOMUTLARININ NCELENMES...............................................................................19

    2.8.1 MOV Komutu ...................................................................................................... 202.8.2 ADD Komutu ....................................................................................................... 202.8.3 ADC Komutu ....................................................................................................... 21

    2.9 KOMUTLARIN OPERAND UYUMU.......................................................................................212.9.1 SUB Komutu .......................................................................................................232.9.2 CMP Komutu ...................................................................................................... 242.9.3 SBB Komutu (Subtract with Barrow) .................................................................. 242.9.4 MUL Komutu ..................................................................................................... 25

    2.9.5 DIV Komutu ........................................................................................................ 262.10 BT DZEYNDE LEM YAPAN KOMUTLAR...................................................................... 27

    2.10.1 AND Komutu ..................................................................................................... 272.10.2 TEST Komutu .................................................................................................... 272.10.3 OR Komutu ........................................................................................................282.10.4 XOR Komutu ..................................................................................................... 282.10.5 SHL ve SHR Komutlar ..................................................................................... 292.10.6 SAR ve SAL Komutlar ...................................................................................... 292.10.7 Dndrme Komutlar ........................................................................................ 292.10.8 teleme Ve Dndrme Komutlarnn Biimleri ............................................... 302.10.9 Stack Kullanm ................................................................................................. 302.10.10 POP Komutu ................................................................................................... 312.10.11 Stack Kullanmnn Amac ...............................................................................322.10.12 PUSHA ve POPA Komutlar ........................................................................... 332.10.13 INC ve DEC Komutlar ................................................................................... 332.10.14 XCHG Komutu ................................................................................................ 332.10.15 CBW(convert byte to word) ve CWD(convert word to double word)

    Komutlar ..................................................................................................................... 342.11 DALLANMA KOMUTLARI................................................................................................ 34

    2.11.1 Yer Deitirme(displacement) Kavram ........................................................... 352.11.2 JMP 1000 .......................................................................................................... 35

    2.11.3 Koulsuz JMP Komutu ...................................................................................... 352.11.4 JMP far [SI] ...................................................................................................... 362.11.5 Koullu Dallanma Komutlar ............................................................................ 37

    i

  • 7/29/2019 Assembly E Kitap

    2/175

    2.12 ETLKKARILATIRMASI ............................................................................................. 372.12.1 Eitsizlik Karlatrmas .................................................................................. 372.12.2 aretsiz Saylarn Karlatrlmas ................................................................. 382.12.3 aretli Saylarn Karlatrlmas ................................................................... 382.12.4 Dier Koullu JMP Komutlar ..........................................................................39

    2.13 ALT PROGRAMLARIN AIRILMASI..................................................................................39

    2.14 ALT PROGRAMDAN GERYE DN.................................................................................412.15 BAYRAKLAR ZERNDE ZEL LEM YAPAN KOMUTLAR................................................... 422.16 SEMBOLKMAKNE DL NEDR? ....................................................................................422.17 EXE DOSYANIN YAPISIVE YKLENMES.......................................................................... 422.18 TPKBRSEMBOLK MAKNE DL PROGRAMI................................................................. 432.19 CODE, DATAVE STACK BLMLERNN BELRLENMES......................................................442.20 SEMBOLLER..................................................................................................................442.21 DATA SEMBOLLERNN TANIMLANMASI............................................................................ 452.22 PROGRAM YKLENDNDE REGSTERLARIN DURUMLARI...................................................462.23 PROGRAMIN SONLANDIRILMASI....................................................................................... 472.24 CODE SEMBOLLER........................................................................................................47

    2.25 PROC BLDRM............................................................................................................ 472.26 GEREKVE SAHTE KODLAR(REAL/PSEUDO) ......................................................................482.27 SABTLER.....................................................................................................................482.28 SABTLERN ETL TABANLARDA GSTERMLER.............................................................492.29 ALFABETK SABTLER(STRNGLER) ..................................................................................492.30 GEREKSAYI SABTLER............................................................................................... 492.31 BCD TRDEN SABTLER...............................................................................................502.32 YERSAYACI(LOCATONCOUNTER) ...................................................................................502.33 ASM LSTNG DOSYASI................................................................................................502.34 DZLER ZERNDE LEMLER......................................................................................... 502.35 LEA(LOADEFFECTVEADDRESS) KOMUTU.......................................................................512.36 SEMBOLKMAKNE DLNDE FORDNGLERNN OLUTURULMASI..................................... 512.37 KOD SEMBOLLER.........................................................................................................53

    3 ALT PROGRAMLARLA ALIMA ...........................................................................53

    3.1 FONKSYONLARIN GER DN DEERLERNN OLUTURULMASI........................................... 583.2 FONKSYON AIRMALARINA LKN ETL RNEKLER.....................................................583.3 SEMBOLK MAKNE DLNDE YAZILAN FONKSYONLARI CDEN AIRILMASI..........................593.4 BRLETRMESIRASINDAIKACAKPROBLEMLER................................................................... 603.5 E DNGLER...........................................................................................................613.6 SEMBOLK MAKNE DLNDECDECL ARIMINA UYGUN FONKSYON YAZIMINA RNEKLER......633.7 C DERLEYCLERN SEMBOLK MAKNE DL IKTILARI....................................................... 663.8 OFFSET VE SEG OPERATRLER...................................................................................673.9 EXE DOSYA FORMATI....................................................................................................673.10 PSP(PROGRAM SEGMENTPREFX) ...................................................................................703.11 YKLEME SONRASINDA REGSTERLARIN LKKONUMLARI..................................................713.12 DERLEYCLERN BALANGI KODLARI(STARTUP MODULE) ................................................713.13 CDECHARPARAMETRELERNVE GER DN DEERLERNN SEYREKKULLANILMASI..........723.14 KESMELER(NTERRUPTS) .......................................................................................... 723.15 INT MAKNE KOMUTUVE KESMELERE DALLANILMASI..................................................... 733.16 IRET MAKNEKOMUTU ................................................................................................743.17 KESMENN HOOKEDLMES............................................................................................75

    3.18 KESME KODUNUN YAZILMASI........................................................................................ 753.19 SEMBOLKMAKNE DLNDE DOLAYLI JMP VE CALL LEMLER..................................... 763.20 BELLEKERMLERNDE SEGMENT YKLEME DURUMLARI..................................................76

    ii

  • 7/29/2019 Assembly E Kitap

    3/175

    3.21 KESMELERN FONKSYONLARIVE ALT FONKSYONLARI ...................................................... 773.22 KESMENN PARAMETRELERVE GER DN DEERLER................................................... 773.23 DOS VE BIOS KESMELER...........................................................................................773.24 10H VDEO KESMES.....................................................................................................78

    3.24.1 21h Kesmesi ...................................................................................................... 813.24.2 INT 21h F:2 .......................................................................................................82

    3.24.3 INT 21h F:7 ve F:8 ........................................................................................... 823.24.4 INT 21h F:0Ah (buffered keyboard input) ........................................................ 823.24.5 INT 21h F:25h(set interrupt vector) ................................................................. 833.24.6 INT 21h F:35h(get interrupt vector) .................................................................833.24.7 INT 21h F:39h(create sub directory) ................................................................843.24.8 INT 21h F:9h .....................................................................................................84

    4 MAKRO KULLANIMI .................................................................................................. 85

    4.1 INCLUDE LEM..............................................................................................................874.2 LOCAL KOMUTU......................................................................................................... 88

    5 MATEMATK LEMCNN KULLANILMASI .......................................................89

    5.1 MATEMATK LEMC NEDR? ...........................................................................................895.2 NORMAL LEMCLE MATEMATK LEMCNN BRLKTE ALIMASI......................................905.3 MATEMATK LEMCNN REGSTER YAPISI......................................................................... 905.4 NOKTALI SAYILARIN BELLEKTE TUTULMA BMLER.......................................................... 905.5 NOKTALI SAYI FORMATLARI............................................................................................ 915.6 YUVARLAMA HATASI(ROUNDNGERROR) ............................................................................915.7 FLOAT(SHORTREAL) FORMAT...........................................................................................925.8 BIAS DEERNN ANLAMI.............................................................................................. 935.9 NOKTALI SAYI FORMATINDA ZEL SAYILARI..................................................................... 935.10 DOUBLE(LONGREAL) FORMATI.......................................................................................94

    5.11 LONG DOUBLE(EXTENDEDREAL) FORMATI.......................................................................945.12 MATEMATK LEMCDE NOKTALI SAYILARLA LEMLER.................................................... 945.13 FLD KOMUTU.............................................................................................................955.14 FST VE FSTP KOMUTLARI...........................................................................................955.15 TAM SAYILARA LKN PUSH VE POP KOMUTLARI....................................................... 955.16 FADD, FADDP KOMUTLARI...................................................................................... 965.17 CDE GEREKSAYI TRLERNE GER DNEN FONKSYONLARI........................................... 975.18 FMUL VE FMULP KOMUTLARI.................................................................................. 985.19 FDIV VE FDIVP KOMUTLARI......................................................................................985.20 FSIN, FCOS, FTAN, FSQRT KOMUTLARI.................................................................985.21 BORLAND DERLEYCLERN MATEMATK LEMC SEENEKLER...................................... 995.22 GEREKSAYI EMLASYONU.......................................................................................... 995.23 SEMBOLKMAKNEDLNDEGEREKSAYILARITUTANSEMBOLLERNTANIMLANMASI: ................995.24 PPELNE LEM.........................................................................................................1005.25 NORMAL LEMCYLE MATEMATK LEMCNN SENKRONZASYONU....................................1005.26 WATKOMUTUNUNALIMABM: ..............................................................................1015.27 GEREKSAYILARIN KARILATIRILMASI : ......................................................................1025.28 STATUS REGSTER(STATUSWORD) .................................................................................1025.29 FSTSW WORDPTRMEM.............................................................................................1025.30 FSTSW AX ............................................................................................................1035.31 NORMAL LEMCLERDE BAYRAKREGSTERI ZERNDE LEMLER....................................103

    5.32 C0, C2VE

    C3 STATUS

    REGSTER

    BT

    LERNN

    KARILATIRMADAK

    ANLAMLARI

    ..............1045.33 PROGRAMLAMA DLLERNDEK YEREL DEKENLERN KULLANILMASI...............................1055.34 ETL RNEKLER.....................................................................................................106

    iii

  • 7/29/2019 Assembly E Kitap

    4/175

    6 HZALAMA(ALGNMENT) .......................................................................................111

    6.1 WORD HZALAMASI(WORDALGNMENT) ...........................................................................1126.2 DWORD HZALAMASI(DWORDALGNMENT) .......................................................................1126.3 HZALAMA PROBLEMLER...............................................................................................1136.4 C++TA BRSINIFIN YE FONKSYONLARININ SEMBOLK MAKNE DLNDE AIRILMASI.....1156.5 CDE DEKEN SAYIDA PARAMETRE ALAN FONKSYONLARIN SEMBOLK MAKNE DLNDEYAZIMI.............................................................................................................................1166.6 C'DEDEKENSAYIDAPARAMETREALANFONKSYONLARINYAZIMI: .....................................1186.7 C'DE DEKEN SAYIDA PARAMETRE ALAN FONKSYONLARA RNEKLER.............................120

    7 UZAK GSTERCLERN YKLENMES .............................................................122

    7.1 C DERLEYCLER UZAKGSTERCN LEMLERN ELE ALI BM...................................1237.2 CPU'NUN DURUMUNUN SAKLANMASI.............................................................................1237.3 CPU KONUMUNUN SAKLANIP GER YAZILMASI SIRASINDA DKKAT EDLECEKDURUMLAR ...1247.4 C'DE YEREL OLMAYAN DALLANMALAR...........................................................................1267.5 SETJMP FONKSYONU......................................................................................................1267.6 LONGJMP FONKSYONU...................................................................................................1277.7 NEDENLONGJMP KULLANILIR? .......................................................................................1277.8 SETJMPVELONGJMP FONKSYONLARININ SEMBOLKMAKNE DLNDE YAZIMI.......................1287.9 DOSTA UZAKMODELLERDE LEMLER.........................................................................1307.10 UZAKMODELLERDE DATA GSTERCLERYLE LEMLER.................................................1307.11 WN32/UNIX FLAT MODEL SSTEM..........................................................................131

    8 AYRINTILI SEGMENT TANIMLARI ......................................................................132

    8.1 SEGMENT TANIMLAMA LEMNN GENEL BM...............................................................1328.2 SEGMENTLER EXE KOD ERSNDEK DZLM SIRASI......................................................135

    8.2.1 Segment Tanmlamasnda Kullanlan Snf sminin Segment Sralamasna Etkisi....................................................................................................................................1368.2.2 C Derleyicileri ve Segmentler ..........................................................................1378.2.3 Tiny model .........................................................................................................1388.2.4 Small model .......................................................................................................1388.2.5 Medium model ...................................................................................................1388.2.6 Compact model ................................................................................................. 1388.2.7 Large model ......................................................................................................1388.2.8 Huge model .......................................................................................................1388.2.9 Segment Kavramnn nemi ............................................................................. 138

    8.3 AYRINTILI SEGMENT TANIMLAMALARIVE BELLEK MODEL................................................1398.4 BRDEN FAZLA DATA SEGMENTLE ALIMAK...............................................................140

    8.5 BRDEN FAZLA KOD SEGMENTLE ALIMAK................................................................1408.6 WN32/UNIX FLAT MODELLERDE SEGMENT LEMLER...................................................1408.7 GRUP KULLANIMI.........................................................................................................1428.8 ASSUME BLDRM........................................................................................................143

    9 OMF FORMATI ..........................................................................................................143

    9.1 OMF FORMATINI GENEL YAPISI....................................................................................1449.2 DATAVE KOD SEMBOLLERNNOBJ DOSYAYA YAZILMASI.................................................1469.3 MAKNE KODLARININVE STATK DATALARINOBJ MODLE YAZILMASI...............................1489.4 BASTLETRLM SEGMENT KULLANIMINDA SEGMENT LEMLER.......................................1489.5 RELOCATABLE ADRESLER..............................................................................................149

    9.6 RELOCATABLE ADRESLERVE RELOCATON TABLOSU.........................................................1499.7 COM DOSYALAR.........................................................................................................1509.8 ORG KOMUTU............................................................................................................151

    iv

  • 7/29/2019 Assembly E Kitap

    5/175

    9.9 COM PROGRAMLARIN YAZIMI.......................................................................................1519.10 TEKSEGMENTL COM PROGRAMLARININ YAZILMASI....................................................1519.11 OKSEGMENTL COM PROGRAMININ YAZILMASI.........................................................1529.12 TNY MODEL PROGRAMLARVE COM DOSYALARI.........................................................1529.13 COM PROGRAMLARININ NEM...................................................................................1539.14 COM PROGRAMININ KULLANILMASINA TPK BRRNEK: BOOTPROGRAMININYAZILMASI..153

    10 LETM SSTEM YAZIMINDA ZLENECEK YNTEM ...............................155

    10.1 LETM SSTEMNN SSTEM FONKSYONLARININ AIRILMASIN KULLANILAN YNTEMLER........................................................................................................................................15610.2 MODLLERLE ALIMA...............................................................................................15610.3 COMMUNAL TANIMLAMA.............................................................................................15910.4 STRNG KOMUTLARI....................................................................................................159

    10.4.1 Komutlarda nek(prefix) ................................................................................16010.4.2 Segment nekleri ............................................................................................16010.4.3 REP neki .......................................................................................................16110.4.4 LODS Komutu .................................................................................................161

    10.4.5 LODSB Komutu .............................................................................................. 16110.4.6 LODSW Komutu ..............................................................................................16110.4.7 STOS Komutu ..................................................................................................16210.4.8 REP nekinin levi ........................................................................................16210.4.9 STOSB .............................................................................................................16210.4.10 STOSW ..........................................................................................................162

    10.5 SMALLMODELMEMSETRNE: ....................................................................................16310.5.1 MOVS Komutu ................................................................................................16310.5.2 MOVSB ........................................................................................................... 16310.5.3 MOVSW ...........................................................................................................164

    11 HEAP ALGORTMASI ..............................................................................................16411.1 BO BALI LSTE ALGORTMASI...................................................................................16511.2 TINUX SSTEMNDE HEAP ORGANZASYONU................................................................16611.3 KERNEL HEAP FONKSYONLARININ TASARIMIN YAPILACAK LEMLER...........................16711.4 SCAS KOMUTU: .......................................................................................................16711.5 RNEKTHREAD KTPHANES: ....................................................................................16911.6 THREAD KTPHANESNNKULLANIMI: ..........................................................................170

    11.6.1 InitThreadLib() fonksiyonu: ............................................................................17011.6.2 CreateThread() Fonksiyonu: .......................................................................... 17011.6.3 ExitThread() Fonksiyonu: ...............................................................................17111.6.4 GetThreadExitCode() Fonksiyonu: .................................................................17111.6.5 CloseHandle() Fonksiyonu: ............................................................................17111.6.6 Thread Ktphanesinin Kullanlmasnda Dikkat Edilmesi Gereken Noktalar:....................................................................................................................................171

    11.7 THREAD KTPHANESNN SEL TASARIMI: ...................................................................17211.8 CDE INLNE SEMBOLK MAKNE DL...........................................................................17311.9 DOS SSTEMNDE HEAP YNETM...............................................................................174

    v

  • 7/29/2019 Assembly E Kitap

    6/175

  • 7/29/2019 Assembly E Kitap

    7/175

    durumda ilemci komutu altrrken bellekten yine okuma ve yazma yapmak zorundadr.Yani mikroilemci yalnzca komutu elde etmek iin deil, komut ierisindeki operantlarelde etmek iin de bellee eriir.

    1.2 Tipik Bir RAMin Yaps

    RAM'ler entegre devre biiminde retilir. D dnya ile balanty salayan eitliular vardr. Bir RAM genellikle byte biiminde organize edilmi gzeneklerden oluur.Her gzenek ierisinde tipik olarak 8 bit vardr. Ama 8 bit olmas zorunlu deildir.RAM'ler genellikle kapasite olarak ;

    gzenek says * gzenekteki bit saysdr.

    rnek: 1024 * 8

    1024 byte'lk bir RAM'de herhangi bir gzenei seebilmek iin ikilik sistemde 10 tane

    elektriksel hat gerekir. Dardaki bir devre bu ulara 5 volt ya da 0 volt gerilimuygulayarak bir say oluturur. RAM devresi de bu bilgiyi alarak hangi gzenein seilmiolduunu anlar. Bir gzenei semekte kullanlan bu ulara RAM'in adres ular denir. A0,A1, A2, ... biiminde gsterilir. Bunun dnda gzenek seildikten sonra okuma m, yoksayazma m yaplacan anlatmaya sra gelir. Bu ilem ayr bir utan yaplr. BU uca R / Wucu denir. rnein bu uca 5 volt uygulanrsa okuma yaplaca, 0 volt uygulanrsa yazmayaplaca anlamna geliyor olabilir. RAM'in gzeneklerdeki bilgiyi aktarmak iinkullanlan bir veri ucu vardr.Bu ular genellikle D0, D1, D2, ... olarak isimlendirilir.(www.dalsemi.com adresinden Akbil'in mekanizmasn renebilirsin (1991 ilemci).) Budurumda 1024 * 8'lik bir RAM de 10 tane adres ucu, 8 tane data ucu ve bir tane de R/Wucu olmaldr. ve ek olarak baka ular da vardr.

    RAM'den okuma yle yaplr:1.Adm . Adres ularna gzenek numaras girilir.2.Adm: R/W okuma konumuna getirilir.3.Adm:Bir sre beklenir ve data ular rneklenir.

    Yazma ilemi ise yle yaplr:1.Adm: Gzenek numaras adres ularna braklr.2.Adm: R/W ucu yazma konumuna getirilir.3.Adm: Yazlacak bilgi ikilik sistemde data ularna braklr.

    1.3 CPU ile RAM Arasndaki Balant

    Genel olarak CPU'nun adres ular RAM'in adres ularyla, data ular da RAM'indata ularyla balantldr. Benzer biimde CPU'nun kontrol ular RAM'in eitli kontrolularyla balantldr.

    Bir CPU'nun adresleyebildii maksimum fiziksel RAM kapasitesi vardr. Bukapasite CPU'nun adres ularnn saysyla dorudan ilgilidir. rnein Z-80 ve 8080ilemcilerinin 16 adres ucu vardr. Bu ilemciler ancak 64 KB bellek kullanabilirler. Intel

    286 ilemcisinin 24 adres ucu, 386 ve 486 ilemcilerinin 32 adres ucu vardr. lemcininRAM'den bir seferde transfer edecei bilgi veri data ularnn saysna baldr. Z80 ve

    7

  • 7/29/2019 Assembly E Kitap

    8/175

    8080 ilemcileri 8, 8086 ve 80286 ilemcileri 16, 386 ve 486 ilemcileri 32 data ucunasahiptir.

    CPU ierisindeki elektronik devrelerle balantl olan RAM'den ekilen bilginingeici sre saklanmasnda kullanlan CPU ierisindeki kk bellek blgelerine registerdenir. Bir mikro ilemcinin ka bitlik mikro ilemci olduu register uzunluu ile belirlenir.

    rnein 80386 ilemcisi 32 bitlik bir ilemcidir, nk 32 bit register'lara sahiptir. Birmikro ilemcinin register uzunluu ilemcinin bir hamlede ka bitlik bilgi zerinde ilemyapabildiini anlatr. rnein 8086 16 bitlik bir mikro ilemcidir. 32 bit iki say toplanacakolsa bu toplama ilemi tek ilemde deil ancak iki ilemde yaplabilir(C'de int trderleyiciyi yazanlar tarafndan genellikle ilemcinin register uzunluu kadar alnr).

    1.4 Makina Komutu Kavram

    Mikroilemci her ilemi bir makina komutuyla yapar. Makina komutu ilemciyehangi ilemin yaplacan anlatan byte topluluudur. Intel ilemcilerinde makina

    komutlarnn byte uzunluklar farkl olabilmektedir. Her mikroilemcinin bir komut kmesivardr. Btn program bu komutlarla ifade edilmek zorundadr. Makina komutlarnn saysCISC ailesi mikroilemcilerde, RISC ailesi mikroilemcilerine gre daha fazla ve eitlidir.

    1.5 Makina Komutlarnn Genel Biimi

    Her makina komutu gerekte ikilik sistemde bir byte topluluudur. Ancak sembolikmakina dilinde saylar yerine sembolik ifadeler kullanlarak gsterilirler. Zaten sembolikmakina dili derleyicilerinin yapt ey genelde sembolik olarak yazlm olan bu komutlarsaylara dntrmektir. Bir makina komutu hangi ilemin yaplacan anlatan bir ilem

    bilgisi ve operandlardan oluur. Makina komutlar tek operandl ya da iki operandlolabilirler. Makina komutlarnn genel biimi yledir:

    Komut operandKomut operand1, operand2

    rnein:

    INC AXADD AX, BX

    Intel ilemcilerinde tek operandl komutlarda operand register'a ya da belleeilikin olabilir. ki operandl komutlarda her iki operand da bellee ilikin olamaz.Operandlardan herhangi birisi bellee dieri register'a ilikin olabilir. Operandlardan herikisi de register'a ilikin olabilir. Baz makina komutlarnn operand yoktur. Bukomutlardan bazlar default bir takm register'lar operand olarak kullanrlar. zetlemakina komutlar : Ya operandsz olur, Ya tek operandl olur, Ya da iki operandl olur. ki operandl komutlarda her iki operand da bellee ilikin olamaz.

    8

  • 7/29/2019 Assembly E Kitap

    9/175

    Genel olarak bir operand register'a, bellee ya da sabite ilikin olabilir. ki operandlkomutlarda bir operand bellee ilikinken, dier operand bir sabite ilikin olabilir. Sonuolarak Intel ilemcilerinde komutlarn rastlanabilen biimleri unlardr:

    KomutKomut sabit

    Komut regKomut memKomut reg, memKomut reg sabitKomut reg, regKomut mem, regKomut mem, sabit

    1.6 80x86 Mikroilemcisinin alma Modlar

    80x86 mikroilemcisinin alma modu vardr.

    1. Gerek Mod (Real Mode)2. Sanal86 Mod (Virtual 86 Mode)3. Korumal Mod (Protected Mode)

    80x86 ilemcileri reset edildiinde alma gerek modda balar. Korumal moda gerekmoddan yazlm yolu ile geilmektedir. 8086, 8088, 80186 ilemcileri sadece gerek modaalabiliyordu. 80286 ilemcisi gerek mod ve korumal modlarda alabilmektedir.80386 ve sonras bu modu desteklemektedir. 80X86 ilemciler gerek modda okkk farkllklar dna hzl bir 8086 gibi almaktadr. DOS iletim sistemi gerek

    modda alabilecek biimde tasalanmtr. 8086 ilemcisi 1 MB bellek kullanabilen 16 bitbir mikroilemcidir. Bu nedenle gerek modda ancak 1 MB bellek kullanlabilir. Korumalmod koruma mekanizmasnn, sanal bellek kullanmnn, ok ilemli almann, mmknolduu en ileri alma modudur. UNIX ve Windows sistemleri korumal moddaalmaktadr. Sanal 86 Modu 8086 gibi almann saland ancak korumal moduneitli zelliklerinin kullanlabildii bir ara moddur. Windows iletim sisteminde komutsatr Sanal 86 Modunda almaktadr nk Windows iletim sisteminde kullanlantaskswitch mekanizmasnda Gerek Mod kullanlamamaktadr. Windows iletimsisteminde DOS penceresi aldnda yada herhangi bir DOS program altrldndailemci Sanal 86 moduna gemektedir. Ancak iletim sisteminin alnda F8 tuuna

    baslarak Sadece Komut stemi seenei seildiinde Gerek Modda alma sz konusuolur.

    1.7 8086 lemcisinin Yazma Yaps

    8086 mikroilemcisi toplam 14 yazmaca sahiptir.

    4 adet genel amal yazma vardr

    AX(Accumlator Register),

    BX(Base Register)CX(Count Register)DX(Data Register)

    9

  • 7/29/2019 Assembly E Kitap

    10/175

    Bu yazmalar btn olarak 16 bit biiminde kullanlabilir yada dk ve yksek anlamlksmlar bamsz 8 bitlik yazmalar gibi de kullanlabilir. Yani 12 adet yazma ifadesiyazlabilir. 8 bitlik paralar btn oluturur. Yani rnein AH ve AL yazmalarnaykleme yapldnda AX yazmac oluturulmutur.

    2 adet indeks yazmac vardr.

    SI(Source Index Register)DI(Destination Index Register)

    Bu iki yazma 8 bitlik paralara blnmemitir. Data blgesini indekslemek amacylakullanlr.

    3 Adet Gsterici Yazmac Vardr (Pointer Register)IP(Instruction Pointer Register)SP(Stack Pointer Register)

    BP(Base Pointer Register)

    4 Adet Segment Yazmac VardrCS(Code Segment Register)DS(Data Segment Register)SS(Stack Segment Register)ES(Extra Segment Register)

    1 Adet Bayrak Yazmac VardrF

    Btn yazmalar 16 bit uzunluundadr ancak sadece genel amal yazmalar ayrcaparalara ayrlmlardr.

    Her komut her yazma ile altrlamayabilir. Aritmetik ilemler, karlatrma ilemleriyada bit ilemleri iin Genel Amal Yazmalarn hepsi kullanlabilir. SI ve DI yazmalarindeksleme amacyla tasarlanm olmalarna karn Genel Amal Yazmalarla aynilemlere kullanlabilirler.

    Aritmetik, karlatrma ve bit ilemleri 16 bit ise AX, BX, CX, DX, SI, DI yazmalarylayaplabilir. Ayn ilemler 8 bit yaplacak ise AH, AL, BH, BL, CH, CL, DH, DL

    yazmalar kullanlabilirKural 2 operandl bir makina komutunun sonular her zaman soldaki operand bozularakonun ierisine yazlr. Tek operandl makina komutunun sonular operand ierisindekideer bozularak yazlmaktadr. rnein:

    Add ax, bx

    ileminde sonu AX yazmacna yazlacaktr. Yada rnein:

    Add mem, ax

    ileminde MEM ile belirtilen bellek blgesindeki bilgi ile AX yazmac ierisindeki bilgitoplanr sonu MEM ile belirtilen bellek blgesine yazlr. Yada rnein

    10

  • 7/29/2019 Assembly E Kitap

    11/175

    Inc ax

    Sonu operand zerine yazlr

    1.8 80386 ve Yukar Modellerin Register Yaps

    80386dan itibaren gemie uyum korunarak registerlar 32 bite ykseltilmitir.80386 ve sonraki modellerin pek ok register vardr. Ancak bu registerlarn oukorumal mod ile ilgilidir. Bu modellerde asl ilevsel olan registerlar 8086ilemcisindekilerin geniletilmi biimleridir.

    - Genel amal registerlar uyum korunarak 4 bytea ykseltilmitir.

    Bu durumda rnein EAX register btn olarak EAX biiminde 16 bit AX biimindeya da 8er bitlik AL ve AH biiminde kullanlabilir. Bu registerlarn yksek anlaml16 bitleri bamsz olarak kullanlamamaktadr.

    - Index registerlar da 32 bite ykseltilmitir.

    - Pointer registerlar da 32 bite ykseltilmitir.

    11

  • 7/29/2019 Assembly E Kitap

    12/175

    - Segment registerlar 16 bit olarak kalmtr, FS ve GS isimli iki segment register dahaeklenmitir.

    - Flag register 32 bite ykseltilerek EFLAGS ismini almtr.

    2 Makine Komutlarndaki Bellek Operandlar

    Bir makine komutunda sabit saylar dorudan bellek operandlar ise keli parantezierisinde gsterilirler. rnein:

    Mov ax, 100

    100 bir sabittir. Bu komut 100 saysnn AX registerna atanacan belirtir. Oysa

    Mov ax, [100]

    100 numaral bellek blgesindeki bilginin AX registerna atanacan belirtir.Mikroilemci register bellek ilemlerinde bellekten ne kadar bilginin transfer edileceiniregister operandna bakarak anlar. rnein:

    Mov ax, [100]

    12

  • 7/29/2019 Assembly E Kitap

    13/175

    Burada register operand 2 byte olduu iin 100 ve 101 numaral byte deerleri AXregisterna atanacaktr. Eer komut

    MOV AL, [100]

    biiminde verilseydi, register operand 1 byte olduu iin yalnzca 100 numaral bellek

    blgesindeki bilginin AL registerna atanaca anlamna gelir.

    Intel ilemcileri Little Endian notasyonunu kullanr. Yani saysnn dk anlamlbyte deeri dk anlaml adreste bulunur. rnein:

    MOV AX, [100] komutu aadaki gibi ilenecektir.

    2.1 16 Bit almada Bellek Operandnn Oluturulmas

    16 bit almada keli parantezler ierisine getirilecek bellek operandlar sabit yada register ierecek biimde olabilir. Keli parantez ierisinde bellek operand biiminde

    bulunabilecek registerlar BX, BP, DI ve SI registerlardr. BX ve BP registerlarna base

    registerlar SI ve DI registerlarna ise indeks registerlar denir. Keli parantez ierisindebu registerlar tek balarna bulunabilir ya da base ve indeks register toplam biimindebulunabilir. ki base register toplam ve iki indeks register toplam yasaklanmtr. 16 bitalmada btn bellek operandlar aadaki gibi oluturulabilir.

    disp8 8 bitlik bir sabit saydisp16 16 bitlik bir sabit say

    1. [disp16]

    2. [BX], [BP], [SI], [DI]3. [BX + disp8], [BP +disp8], [SI+ disp8], [DI +disp8]4. [BX + disp16], [BP +disp16], [SI+ disp16], [DI +disp16]5. [BX + SI], [BX + DI], [BP + SI], [BP + DI]6. [BX + SI + disp8], [BX + DI + disp8], [BP + SI + disp8], [BP + DI + disp8]7. [BX + SI + disp16], [BX + DI + disp16], [BP + SI + disp16], [BP + DI + disp16]

    Buradaki olaslklar szel olarak yle aklanabilir:1. Keli parantez ierisinde 16 bit sabit bir say2. BX, BP, SI, DI registerlar tek balarna keli parantez ierisinde3. BX, BP, SI, DI registerlar disp8 toplamyla keli parantez ierisinde

    4. BX, BP, SI, DI registerlar disp16 toplamyla keli parantez ierisinde5. Bir base ve bir indeks register toplam keli parantez ierisinde6. Bir base, bir indeks ve disp8 toplam keli parantez ierisinde

    13

  • 7/29/2019 Assembly E Kitap

    14/175

    7. Bir base, bir indeks ve disp16 toplam keli parantez ierisinde

    [disp8] Geersiz[disp16] Geerli[AX + BX] Geersiz[BP + SI] Geerli

    [SI + DI + disp16] Geersiz[BX] Geerli[BX + DX] Geersiz[BX + SI + disp16] Geerli

    Cde Assembler karlint a;int *p;p = &a;*p = 100;

    MOV p, &aMOV BX, pMOV [BX], 100

    Her bellek operandnn default bir segment register vardr. BX, DI, ve SIregisterlarnn default segment register DS, BP registernn SSdir. ki registertoplamnda eer toplamda BP register bulunuyorsa BPnin default register olan SStoplam bellek operandnn segment register olur. zetle:

    1. BX, SI, DI tek balarna ya da disp8, disp16 toplamlaryla bulunduunda defaultsegment register DSdir.

    2. BP tek bana ya da disp8, disp16 toplamlaryla bulunduunda default segment registerSSdir.

    3. Base, indeks ve disp8, disp16 toplamlarnda eer toplamlardan bir BP register isedefault segment register SSdir. Yoksa DSdir.

    4. [disp16] operandnn segment register DSdir.

    rnein:

    lem Default Segment Register [BX] DS[BP + SI] SS[SI + disp16] DS[disp16] DS[SI + BX] DS

    Bellek operandnn default segment register 1 byte uzunluunda makine komutueklenerek deitirilebilir. Sembolik makine dilinde bu deitirme ilemi segreg:[operand]

    biiminde yaplr. rnein:

    ss:[BX]cs:[SI]es:[BX]ds:[BP]

    rnein bir komut ierisinde aadaki gibi kullanlabilir:

    MOV AX, ES:[BX]

    14

  • 7/29/2019 Assembly E Kitap

    15/175

  • 7/29/2019 Assembly E Kitap

    16/175

    MOV AX, [BP + 10]

    ilemi sonucunda AX registerna 138F * 16 + 1000 + 10 = 14900 fiziksel adresindeki veriyerletirilir.

    Segment register ierisindeki deeri hi deitirmeden yalnzca offset deerinideitirerek segment * 16 adresinden ancak 64 KB uzaklalabilir.

    stenilen fiziksel adrese erimek iin ters bir ilem yapmak gerekir. Yani:

    1. Fiziksel adres segment-offset iftine ayrtrlr. Bir fiziksel adres iin pek oksegment-offset ifti yazlabilir.

    2. Segment deeri bir segment registerna yazlr. Offset deeri keli parantez ierisindebellek operand biiminde oluturulur.

    2.3 32 Bit Adresleme lemi

    80386 ve sonras 32 bit ilemcilerdir. Bu ilemcilerde 32 bit registerlar vardr vebellek operandlar yani keli parantez ierisindeki deer 32 bit olabilir. 32 bit registerlarbu ilemcilerde yalnzca korumal modda deil, gerek modda ve sanal 86 modda dakullanlabilmektedir. Tabii 32 bit registerlarn kullanld bir DOS program 8086ilemcisinin bulunduu bir makinede almaz. Yani bir DOS programnda 32 b ithesaplamalar yapabilmek iin EAX, EBX gibi registerlar kullanlabilir. Ancak programyine bir DOS programdr. rnein yine 1 MB bellek kstlamas vardr. 80386 ve sonrakimodellerde ve korumal modu kullanan bir iletim sistemiyle allyorsa tam ve rahat bir32 bit almay gerekletirebiliriz.

    32 bit bellek adreslemesinde keli parantez ierisindeki deer 32 bit olabilir. TabiiDOS sistemi iin yani gerek mod ya da sanal 86 modu iin bu ilemin bir faydas yoktur.Tabii korumal modda bu eit bir adresleme kullanlmaktadr.

    2.4 32 Bit Bellek Operandnn Oluturulmas

    Korumal modda 32 bitlik bellek operand 16 bitten daha geni ve farkl biimdeoluturulmaktadr. 32 bitlik bellek operandlar yle oluturulur:

    16

  • 7/29/2019 Assembly E Kitap

    17/175

    1. [disp32]2. [EAX], [EBX], [ECX], [EDX], [EBP], [ESI], [EDI]3. [EAX + disp8], [EBX + disp8], [ECX + disp8], [EDX + disp8], [EBP + disp8], [ESI +

    disp8], [EDI + disp8]4. [EAX + disp32], [EBX + disp32], [ECX + disp32], [EDX + disp32], [EBP + disp32],

    [ESI + disp32], [EDI + disp32]5. EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESPnin ikili btn toplamlar6. EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESPnin btn ikili toplamlar + disp87. EAX, EBX, ECX, EDX, EBP, ESI, EDI, ESPnin btn ikili toplamlar + disp328. 5., 6. ve 7. maddelerdeki oluumlarda ikinci toplam operand olan register 1, 2, 4, 8

    arpanlarn alabilir.

    [EAX] Geerli[EBX * 4] Geersiz[ECX + EAX * 4] Geerli[EAX + EBX + disp16] Geersiz

    [EAX + EBX + 32] Geerli[EAX * 2 + disp8] Geersiz[ESI + EAX * 4 + disp32] Geerli[EAX + EAX] Geerli

    2.5 16 Bit almada Flag Register

    8086 ilemcisinde F ya da FLAG biiminde belirtilen ve ismine bayrak registerdenilen bir register vardr. Bu register 386 ve sonraki modellerde korumal modda

    kullanlmak zere EFLAGS ismi verilerek 32 bite ykseltilmitir. Flag register bit bitanlaml bir registerdr. Her bitin anlaml dierinden farkldr. Mikroilemci eitlimakine komutlarn altrdktan sonra komutlarn sonular hakknda ilave bir takm

    bilgiler verir. rnein Bir toplama ilemi yapldnda tama olmu mudur? ya daOluan saynn iaret biti nedir? gibi. Flag registernn bitleri komut altrldktansonra ilemci tarafndan 1 ya da 0 yaplr. Bu bitlerin 1 yaplmasna set edilmesi, 0yaplmasna reset edilmesi denir. Her makine komutu bayrak registernn bitlerizerinde etkili olmaz. Bir komutun btn bitleri etkileyecei anlam da kmamaldr. Birkomutun flag registernn hangi bitlerini etkiledii, bu etkiden kan sonular ilgili komutrenilirken ayrca renilmek zorundadr.

    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0- - - - OF DF IF TF SF ZF - AF - PF - CF

    CF(Carry Flag)

    Bu flag aritmetik, bit ve mantksal ilemlerde saynn btnne ilikin bir eldeolutuunda 1 yaplr. rnein:

    AL: 13BL: F2ADD AL, BL

    Burada bir toplama yaplmtr. Ancak sonu 1 byte amtr. Bu durumda ilemci CFbitini set eder.

    17

  • 7/29/2019 Assembly E Kitap

    18/175

    PF(Parity Flag)

    Bir ilem sonrasnda dk anlaml byte ierisindeki 1lerin says ift ise bu bit setedilir, tek ise reset edilir(Bu ynteme odd parity yntemi denir).

    AF(Auxilary Carry Flag)

    Drdnc bitten beinci bite doru oluan elde durumunda set edilir. Elde yoksareset edilir. zellikle BCD(binary coded decimal) ilemleri iin dnlmtr. HEXsistemde dnldnden dk anlaml hex digitteki eldeyi belirtir. rnein:

    AL:18BL: 1CADD AL, BL

    ileminde CF 0, AF 1 olur.

    ZF(Zero Flag)

    lemin toplam sonucu 0 ise bu flag set edilir, deilse reset edilir. rnein:

    SUB AX, BX

    ileminde iki registern deerleri eitse sonu 0 olaca iin ZF set edilir.

    SF(Sign Flag)

    lem sonucunda elde edilen saynn en solundaki biti bu flage yanstlr. rnein:

    ADD AX, BX

    ilemi sonucunda SF 1 ise s AX ierisinde negatif bir say vardr. SF 0 ise pozitif bir sayvardr.

    TF(Trap Flag)

    lemci her komutu altrdktan sonra bu flagin durumuna bakar. Eer bu flag setedilmi ise 1 numaral isel kesmeyi arr. Bu kesmeye tek adm kesmesi(single step

    interrupt) denilmektedir.

    IF(Interrupt Flag)

    lemcinin INT ucu uyarldnda ilemci kesme durumuna gemeden nce buflage bakar. Eer bu flag 1 ise(normal olarak 1dir) kesme kabul edilir. Bylece ilemciACK ucunu aktive ederek bunu bildirir. Eer bu flag 0 ise ilemci kesmeyi grmezliktengelir, kesme koduna dallanmaz, ilemine devam eder. ok ilemli bir iletim sisteminde buflagin 0 yaplmas tm sistemi kertebilir. nk donanm kesmeleri devre d

    brakldnda processler aras gei ilemi de durur. Adeta sistem tek ilemli olarakdevam eder. Korumal modda sradan bir programcnn bu flagi 0 yapmas eitli

    biimlerde engellenmitir.

    18

  • 7/29/2019 Assembly E Kitap

    19/175

    DF(Direction Flag)

    Bu flag string komutlar iin ilemci tarafndan kullanlmaktadr. Bu komutlardatransferin ynn anlamak iin bu flage bakar.

    OF(Overflow Flag)

    aretli say zerinde meydana gelen tama durumunu tespit etmek amacylakullanlr. Yani ilem sonucunda iaret biti deimise bu flag set edilir. rnein:

    AX: 7FFFINC AX

    OF biti pozitif blgeden negatif blgeye geite ya da tersinde set edilebilir.

    2.6 Turbo Debugger

    Turbo debugger program ile unlar yaplabilir:- Manuel olarak makine komutlar girilebilir ve altrlabilir.- Komutlar altrlrken CPU registerlarnn durumlar incelenebilir.- Bellekteki herhangi bir blge incelenebilir.- Bir exe dosya program yklenerek makine kodlar incelenebilir.

    2.7 CS ve IP Registerlarnn nemi

    IP register offset belirtir. Segment register CSdir ve deitirilemez.Mikroilemci komutlar yle altrmaktadr: CS:IP registernn gsterdii yerden bir

    byte topluluunu okur, bunu komut olarak yorumlar, ilemini yapar ve IP registernkomutun uzunluu kadar arttrr. Yani CS ve IP birlikte ilemcinin o anda altrdmakine komutunun adresini belirtmektedir. Aslnda her mikroilemcide vemikrodenetleyicide bu grevi yapan bir register vardr. Genellikle bu register PC(programcounter) biiminde isimlendirilir. Turbo debuggera ilk girildiinde btn segmentregisterlar ayn deeri gsterir. Bu segment adresi ilk bo blgenin adresidir. Turbodebuggerda ana pencerede yle bir grnt vardr:

    CS:IP Makine komutunun hex karl Komutun sembolik karl

    CS:0100 56 PUSA SI

    Sa taraftaki pencerede registerlarn deerleri vardr. Komut altrlnca budeerler deiebilir. En sadaki pencerede flag registerndaki bitler grlmektedir. Aa

    pencerede DS segment register kullanlarak bellekten bir kesit verilmitir. Bir makinekomutu yazlrsa makine komutu bandn bulunduu adrese girilmi olur. Bir registerndurumunu dardan deitirmek iin o registern zerinde say yazlr. F7 tuu bir komutualtrmaya yarar.

    2.8 Makine Komutlarnn ncelenmesi

    19

  • 7/29/2019 Assembly E Kitap

    20/175

    Her makine komutunun firma tarafndan belirlenmi biimleri vardr. Bir komutrenilirken btn bu biimlerin renilmesi gerekir. Komutlarn aklanmasndakullanlacak ksaltmalar unlardr:

    sreg Segment register reg Register

    reg/mem Register veya memorysabit Sabit bir say

    2.8.1 MOV Komutu

    Bu komut register ve memory arasnda transfer ileminde kullanlr. Biimleri unlardr:

    1. reg reg/mem2. reg/mem sabit3. sreg reg/mem

    Not: Bir ilem yaplacaksa ilk tercih edilecek register AL ya da AX olmaldr. nkilemci eer operand AL ya da AX ise baz komutlar daha etkin altrr.Grld gibi dorudan segment registera sabit atanamamaktadr. rnein:

    MOV SS, 1234

    yerine

    MOV AX, 1234MOV SS, AX

    yaplabilir. MOV makin komutu hibir flag registern etkilemez. Bellekte istenilen birblgeyi grntlemek iin bellek penceresine gelinir, mouseun sa tuuna baslr, gotoseilir. Orada unlar geerlidir:

    - Yalnzca offset- sreg:offset- segment:offset

    Not: Hex sitemde alfabetik karakterlerle balayan saylar deiken isimleriylekarabilecei iin bana 0 eklenerek girilmelidir. rnein: FC10 biiminde deil 0FC10

    biiminde.

    2.8.2 ADD Komutu

    Biimleri:

    1. reg reg/mem2. reg/mem sabit

    rnekler:

    MOV AX, BXMOV AX, [SI]

    20

  • 7/29/2019 Assembly E Kitap

    21/175

    Bu komut AF, CF, OF, PF, SF ve ZF flagleri zerinde etkili olmaktadr.

    2.8.3 ADC Komutu

    Biimleri:1. reg reg/mem2. reg/mem sabit

    Mikroilemcilerin hemen hepsinde bu ilemi yapan bir toplama komutu vardr. ADDkomutundan farkl olarak iki operandn toplamndan baka bir de CF bayran da toplar.Bu komut yardmyla ilemcinin register uzunluundan byk iki tamsay toplanabilir.Bylelikle 16 bit sistemde 32 bitlik iki say nce dk anlaml WORD deerleri ADDkomutuyla sonra yksek anlaml bytelar ADC komutuyla toplanabilir.

    rnein: DOS altnda Cde iki long sayy topladmzda ilemler aadaki gibiyaplacaktr.long a=0x12345678, b = 0x87654321;c = a + b;

    DS:200 12345678DS:204 87654321MOV AX, [200]ADD AX, [204]MOV [208], AXMOV AX, [202]

    ADC AX, [206]MOV [20A], AX

    78 20056 20134 20212 20321 20443 20565 20687 207

    20820920A20B

    Bellein istediimiz bir blgesine bir deer girmek iin mouse bellek blgesine getirilip,istenilen blgede click yaplr ve istenilen saylar klavyeyle girilir.

    2.9 Komutlarn Operand Uyumu

    21

  • 7/29/2019 Assembly E Kitap

    22/175

    stisnalar olmasna karn genel olarak iki operand alan makine komutlarnda soltaraftaki hedef operand ile sa taraftaki kaynak operandn uzunluklarnn ayn olmasgerekmektedir. rnein aadakiler geersizdir.

    MOV AX, BLMOV EBX, CX

    Eer operandlardan biri register dieri bellek ise bellek operandnn uzunluu registerabaldr. rnein:

    MOV AL, [SI] 1 byteMOV [SI], AX 2 byte

    Ancak sol taraftaki operand bellek, sa taraftaki operand bir sabit olduunda debuggerprogram ya da sembolik makine dili derleyicileri sabit olan operandn 1 byte m yoksa 2byte m olduunu anlayamazlar. rnein:

    MOV [SI], 1C

    burada 001C says m sz konusudur, yoksa yalnzca 1C says m sz konusudur? Builemde belirsizlik byte ptr, word ptr, dword ptr belirleyicileriyle salanr. Bu belirleyiciler

    bellek operandlarnn nne yerletirilir. rnein:

    MOV word ptr [SI], 1C

    burada iki bytelk ilem sz konudur. Yani aslnda 001C says belirtilmitir. Bubelirleyiciler register bellek ilemlerinde de kullanlabilirler ama bir ilevi yoktur. rnein:

    MOV AX, word ptr [SI]

    Register bellek ilemlerinde 32 bitlik registerlar kullanlabilir. Bu durumda bellekoperand 16 bit ya da 32 bit offset ierebilir. rnein aadaki iki komut da geerlidir:

    MOV EAX, [SI]MOV EAX, [ESI]

    Yani zetle 32 bit register kullanldnda bellek operandna ilikin offset(yani keliparantez ierisindeki deer) 2 byte ya da 4 byte olabilir. DOS altnda alyorsak 4 byteregister 2 byte offset yapsn serbest bir biimde kullanabiliriz. Ancak 4 byte register 4

    byte offset yapsn DOSta deil, korumal modda kullanmalyz. rnein 2 long sayy 32bit registerlar kullanarak aadaki gibi toplayabiliriz:

    MOV EAX, [200]ADD EAX, [204]MOV [208], EAX

    Bir komutta ilemcinin deerlendirdii iki parametre sz konusudur:

    - lem genilii- Offset genilii

    22

  • 7/29/2019 Assembly E Kitap

    23/175

    lem genilii ka byte bilgi zerinde ilem yapldn anlamna gelir. Offset genilii isebellek operandnn ka byte offset ierdiini anlatr.

    zetle register bellek ve bellek sabit ilemlerinde ilem genilii ve offset geniliineilikin btn kombinasyonlar geerlidir. Ancak DOS altnda 4 byte offset geniliinikullanmamalyz. Oysa korumal modda btn kombinasyonlar rahatlkla kullanabiliriz.

    lem genilii Offset genilii rnek komut Gerek mod Korumal mod4 4 MOV EAX, [ESI]4 2 ADD EAX, [SI]2 4 MOV AX, [ESI]2 2 MOV AX, [SI]1 2 MOV AL, [SI]1 4 MOV AL, [ESI]

    Tabii offset geniliinden bahsedebilmek iin operandlardan birinin bellek olmas gerekir.rnein:- MOV AX, [ECX] komutun ilem genilii 2 byte, offset genilii 4 bytetr. lem

    geerlidir. DOSta tavsiye edilmez.- MOV EAX, [CX] komutun ilem genilii 4 bytetr. Ancak bellek operand yanl

    dzenlenmitir.- MOV EAX, [EBX] komutun ilem 4 byte, offset genilii 4 bytetr. lem geerlidir.

    DOSta tavsiye edilmez.- MOV dword ptr [ECX], 10 ilem genilii 4 byte, offset genilii de 4 bytetr. Komut

    geerlidir, DOSta tavsiye edilmez.- MOV dword ptr [SI], 10 ilem genilii 4 byte, offset genilii 4 bytetr. Geerlidir ama

    DOSta tavsiye edilmez.

    Not: lem genilii ve offset genilii srasyla 66 ve 67 n ekleriyle makine kodundabelirtilir.

    2.9.1 SUB Komutu

    Biimleri:

    1. reg reg/mem2. reg/mem sabit

    Etkiledii bayraklar: AF, CF, OF, PF, SF, ZF

    Aslnda pek ok mikroilemcide ayr bir karma devresi yoktur. kinci operandn ikiyetmleyeni alnr. Toplama devresine sokulur. rnein

    MOV AL, 1CMOV BL, 2FSUB AL, BL

    ilemi yle yaplr:

    1C 0001 1100

    23

  • 7/29/2019 Assembly E Kitap

    24/175

    2F 0010 1111-2F(2Fnin 2ye tmleyeni) 1101 0001

    1C-2FED

    0001 11001101 00011110 1101

    kartma ileminde elde edilen sonu pozitif ya da negatif olabilir. Yani bir kartmailemi sonucunda CF bayrana bakarak soldaki operandn sadaki operanddan iaretsizsistemde byk olup olmadn anlayabiliriz. Saylarn iaretsiz sistemde olduuvarsaymyla birinci operand ikinci operanddan bykse CF 0, kkse CF 1 olur.

    Not: kinci operandn 2ye tmleyeni alnp toplandnda aslnda birinci operand ikincioperanddan bykse CF 1, kkse CF 0 olmaktadr. Ancak ilemci bu toplamaileminden sonra CF bayrann tersini almaktadr. Sonu olarak kartma ilemisonucunda CF bayrana bakarak operandlarn iaretsiz sistemde byklk-kklkilikisini kurabiliriz.

    Tabii 2ye tmleyen aritmetiinde iaretli ve iaretsiz toplama ve kartma kavramlaryoktur. Zaten normal bir toplama ve kartma ilemi hem iaretli hem iaretsiz sistemdeanlamldr. Yani registerlar ierisine yerletirilmi olan saylar iaretli kabul edilirsesonuta iaretli yorumlanmaldr, iaretsiz kabul edilmise sonuta iaretsizyorumlanmaldr. rnein:

    MOV AL, FEMOV BL, 01ADD AL, BL

    AlFE aretsiz254 aretli-2BL01 aretsiz1 aretli1ALFF aretli255 aretsiz-1

    2.9.2 CMP Komutu

    CMP komutu kullanm bakmndan tamamen SUB komutu gibidir. Ancak operandlarkartma ileminden etkilenmezler. Yalnzca ilemden baraklar etkilenir. rnein:

    CMP AX, BX

    AX BX ilemi yaplr ama sonu AX registerna atanmaz. CMP komutu yalnzcabayraklar etkiler. Genellikle CMP komutunu dallanma komutlar izler. SUB ve CMPkomutlar bayraklar yle etkiler ki bayraklara bakarak her trl karlatrma sonucukarlabilir.

    2.9.3 SBB Komutu (Subtract with Barrow)

    Bu komut SUB komutunun Carry'li versiyonudur. SBB x, y ileminde x - y - c ilemi

    yaplr. Bu komut 16 bit almada iki 32 bit saynn kartlmas ilemindekullanlmaktadr.

    24

  • 7/29/2019 Assembly E Kitap

    25/175

    MOV AX, [1FC0]SUB AX, [1FC4]MOV [1FC8], AXMOV AX, [1FC2]SBB AX, [1FC0]MOV [1FCA], AX

    MOV EAX, [1FC0]SUB EAX, [1FC4]MOV [1FC8], EAX

    Kalp:

    16 bit ilem genilii ile 32 bitlik iki tamsaynn toplanmas nce saylarn dk anlamlword deerlerinin ADD ile yksek anlaml word deerlerinin ADC ile toplanmas ilesalanr. kartma ileminde ise dk anlaml word deerleri iin SUB yksek anlamlword deerleri iin SBB kullanlr. Tabii 32 bit toplama ve kartma ilemleri 32 bityazmalar ile tek hamlede yaplabilir.

    2.9.4 MUL Komutu

    Komutun biimleri- MUL reg/mem (8 bit)-MUL reg/mem (16 bit)-MUL reg/mem (32 bit)

    arpma ileminin tek operand vardr. Dier operand ilemci tarafndan default olarak eer8 bit arpma yaplyorsa AL, 16 bit arpma yaplyorsa AX biiminde alnr. 32 bit iinse

    EAX default olarak alnr. Etkiledii bayraklar CF ve OF(AF, PF, SF ve ZF belirsiz)

    rnekMOV AL, 3MOV BL, 3MUL BL

    arpma sonucu eer 8 bit arpma sz konusu ise AX yazmacnda 16 bit arpma szkonusu ise DX:AX biiminde yani yksek anlaml word DX dk anlaml word AXteolacak biimde, eer 32 bit arpma sz konusu ise EDX:EAX biiminde olacaktr.

    Komutun ilem genilii operanda baklarak anlalr. Operand yazma ise problemyoktur. Operand bellek ise operand ise genilii byte ptr, word ptr yada dword ptr ilebelirtilir. rnein:

    MUL BX 16 bit Geerli Sonu DX:AXMUL CL 8 bit Geerli Sonu AXMUL EBX 32 bit Geerli Sonu EDX:EBXMUL [offset] 8 bit HataMUL wordptr[offset]

    16 bit Geerli Sonu DX:AX

    rnein DOS altnda bir arpma ilemi iin yle bir makine komutu retilir.

    25

  • 7/29/2019 Assembly E Kitap

    26/175

    MOV AX, aMUL word ptr bMOV c, AX

    int trnn 32 bit olduu sistemlerde byle bir ilem dorudan 32 bit yazmalarlayaplabilir.

    16 bit sistemlerde bir grup arpma ilemi yle yaplr.

    unsigned int a,b,c,d;d = a*b*c;

    MOV AX, aMUL word ptr bMUL word ptr vMOV d, AX

    unsigned int a,b,c;d = (a+b) * c;

    ilemi yle yaplr.

    MOV AX, aADD AX, bMUL word ptr cMOV d, AX

    2.9.5 DIV Komutu

    Komutun biimleri1. DIV reg/mem 8 bit2. DIV reg/mem 16 bit3. DIV reg/mem 32 bit

    DIV komutu da tek operand alr. Blnen operand 8 bitlik blmede AX, 16 bit blmedeDX:AX ve 32 bitlik blmede EDX:EAX ierisinde olmaldr. Blme ilemi sonucundatamsay bir blm sonucu ve yine bir tamsay bir kalan sonucu elde edilir.

    8 bitlik blmede AL blm AH kalan

    16 bitlik blmede AX blm DX kalan32 bitlik blmede EAX blm EDX kalan biimindedir.

    rnein C dilinde iki tamsayy bldmzde ilem bu makine komutu ile yaplr.Programlama dillerindeki mod operatrleri yine bu komutu kullanrlar.

    16 bit blmelerde DX yazmacnn ierisinde uygun saynn bulunduu garantialtna alnmaldr. rnein C dilindeki

    unsigned int x,y,zz = x / y;

    ilemi yle yaplabilir.

    26

  • 7/29/2019 Assembly E Kitap

    27/175

    MOV DX, 0MOV AX, xDIV word ptr yMOV z, AX

    MUL ve DIV komutlar iaretsiz arpma ve blme ilemleri yaparlar. Yani rnein:

    MUL BX

    gibi bir ilemde ilemci AX ve BX ierisindeki saylarn iaretsiz saylar olduunudnecektir. aretli arpma ve blme ilemleri iin IMUL ve IDIV komutlar kullanlr.Bu komutlarn btn kullanl biimleri iaretsiz versiyonlarda olduu gibidir. Yalnzcaoperandlar ve sonu iaretli sistemde ele alnr.

    2.10 Bit Dzeyinde lem Yapan Komutlar

    Bu komutlar iki operandldr. Saylarn karlkl bitleri zerinde ilemler yaparlar.

    2.10.1 AND Komutu

    Biimleri:1. AND regreg/mem2. AND reg/memsabit

    rnein:

    AND AX, BXAND AL, [SI]AND [SI], BLAND word ptr [SI], 7F

    Komutun etkiledii bayraklar PF, SF, ZFdir. CF ve OF her zaman sfrlanr. AFbelirsizdir.

    2.10.2 TEST Komutu

    TEST komutu tamamen AND komutuyla ayn ilemi yapar. Ancak operandlar

    etkilenmez, yalnzca bayraklar etkilenir.

    Kalp:

    Bir saynn sfr olup olmadn anlamak birka biimde yaplabilir. Ancak derleyicilerintercih ettii en etkin yntem saynn kendisiyle AND ya da OR ilemine sokulmasdr. Builemden sonra ZF bayrana baklr ve karar verilir. rnein:

    AND AX, AX

    Kalp:

    Bir tamsaynn tek ya da ift olup olmad en dk anlaml bitinin 0 ya da 1 olmasyla

    27

  • 7/29/2019 Assembly E Kitap

    28/175

    belirlenebilir. Bunu anlamann en iyi yntemi sayy 1 ile AND ilemine sokup ZFbayrana bakmaktr. rnein:

    TEST AX, 1

    Ayn teknik etkin bir kod retimi iin Cde de uygulanabilir. rnein aadaki kod

    if (x % 2 == 0) {

    }

    yerine bu kod tercih edilebilir:

    if (x & 1) {

    }

    Kalp:

    Bir saynn negatif ya da pozitif olduunu anlayabilmek iin yine kendisiyle AND ekipSF bayrana bakmak gerekir. rnein:

    MOV AX, memTEST AX, AX

    2.10.3 OR Komutu

    Biimleri:

    1. OR reg reg/mem2. OR reg/mem sabit

    Karlkl bitleri OR ilemine sokar.

    2.10.4 XOR Komutu

    XOR ilemi iki operand ayn ise 0, farklysa 1 deerini veren bir ilemdir.

    a b a XOR b

    0 0 01 0 10 1 11 1 0

    zellikle ifreleme ilemlerinde tercih edilir.

    Kalp:

    Bir sayy kendisiyle XOR ilemine sokarsak 0 elde ederiz. Bir register sfrlanmak

    istendiinde aadaki yntemlerden birisi kullanlabilir:MOV AX, 0

    28

  • 7/29/2019 Assembly E Kitap

    29/175

    SUB AX, AX

    AND AX, 0

    XOR AX, AX

    Sabit ieren ifadeler makine komutunu uzatt iin elenmelidir. O halde SUB AX, AX yada XOR AX, AX tercih edilmelidir. Geleneksel olarak XOR komutu tercih edilmelidir

    XOR ve OR komutlarnn etkiledii bayraklar PF, SF, ZFdir. CF ve OF her zamansfrlanr. AF belirsizdir.

    2.10.5 SHL ve SHR Komutlar

    Biimleri:

    1. SHL; SHR reg/mem, 12. SHL; SHR reg/mem, CL3. 80186dan sonras iin: SHL; SHR reg/mem, sabit

    Komutun etkiledii bayraklar AF ve CFdir. OF, PF, SF ve ZF belirsizdir. telemesonrasnda kaybedilen bit CF bayranda saklanr. Birden fazla teleme yapldnda sontelemede kaybedilen bit CFde saklanacaktr.

    80186ya kadar teleme ilemleri iin iki makine komutu vard: Bir kez telemektekullanlan makine komutu ve CL register ierisindeki deer kadar telemekte kullanlanmakine komutu. Bu yzden birden fazla teleme yaplacaksa teleme says CL

    registerna yerletirilmek zorundayd. 1 ya da CL deerleri komut yazlrken belirtilmekzorundadr. Ancak bu bilgiler makine koduna yansmaz(Yani aslnda makine komutlar 1kez tele ve CL kadar tele biimindedir). Ancak 80186dan sonra hi CL registernayerletirme yapmadan sabit bir say kadar teleme yapmaya yarayan bir komut eklenmitir.

    2.10.6 SAR ve SAL Komutlar

    Aritmetik teleme komutlardr. Aslnda sola aritmetik teleme biiminde birkomut yoktur. SAL ile SHL komutlar aslnda ayn komutlardr.(Debuggerlar vederleyiciler sanki SAL gibi bir komut varm gibi bu komutu kabul ederler.)

    Saa aritmetik telemede btn bitler bir saa kaydrlr ancak en soldan iaret biti0 ise 0 ile , 1 ise 1 ile besleme yaplr.

    2.10.7 Dndrme Komutlar

    C de dndrme ilemi yapan bir bit operatr yoktur. Ancak makine dilindegenellikle dndrme komutlar vardr. Sola ve saa dndrme ilemleri teleme ilemlerigibidir ancak kaybolan bit besleme ilemi iin kullanlr.rnek:

    1000 01011100 0010 (dndrmeden sonra)

    29

  • 7/29/2019 Assembly E Kitap

    30/175

    Komutlarn etkiledii bayraklar :CF ve OFDndrme ileminde dnen bit ayn zamanda CF bayranda saklanmaktadr.

    Kalp: Bir byte bilginin niblelarn (4 bit) yer deitirmek iin bilgi saa yada sola 4 kezdndrlr. rnein AH iinde yer deitirme yapacak olalm:

    MOV CL,4ROR AH,CL

    Normal dndrme ilemine ilikin ROR ve ROL isimli iki komut vardr. Bunlara ek olarakbu iki komutun bir de eldeli versiyonlar vardr. Bu komutlar: RCL ve RCR

    CF=1AH: 1110 10102.10.7.1 RCR AH,1AH:1111 0101 CF:0(sondaki bit saa carry li dndrmede)

    Eldeli versiyonlarda CF bayra sanki saynn en dk anlaml bitiymi gibi ilem grr.Yani dndrme ilemine aktif olarak katlr.

    Kalp: 16 bit ilem genilii kullanarak 32 bitlik bir sayy sola ve saa telemek iindk anlaml word deeri telemek yksek anlaml word deeri dndrmek gerekir.

    DX:AX gibi bir 32 bitlik bilgi olsun bunu sola bir otele.SHL AX,1RCL DX,1

    2.10.8 teleme Ve Dndrme Komutlarnn Biimleri

    Btn teleme ve dndrme komutlar 3 biimden oluur.

    1. Komut reg/mem ,12. Komut reg/mem,CL3. Komut reg/mem,sabit (80186 ve sonras iin)

    ROL AX,5 80186 ve sonras iin doruROR word ptr [SI][BX],CL

    Doru

    SAR byte ptr [SI+10],1 Doru

    2.10.9 Stack Kullanm

    Stack ilemcinin bilgileri geici sure iin depolamakta kulland RAM blgesidir.Stack LIFO kuyruk yaps biiminde kullanlr.

    Stack bir blge olmasna karn stackin tepesi biiminde isimlendirilen aktif biryeri vardr. Stack in tepesi SS:SP reg. ifti ile belirlenir. SP segment register isel olarak

    SS biiminde belirlenmitir ve deitirilemez. Stack ile ilgili 2 ilem tanmldr.1. STACK e bilgi konulmas (PUSH)

    30

  • 7/29/2019 Assembly E Kitap

    31/175

    2. STACK ten bilgi alnmas (POP)

    PUSH ve POP komutlarnn biimleri unlardr:1. PUSH (POP) reg/mem2. PUSH(POP) sreg

    PUSH ve POP ilemleri gerek modda ve sanal 86 modda (yani DOS modunda) 16bit, korumal modda 32 bit bilgi zerinde ilem yapar. Geri DOS modunda 32 bitlik stackilemi yaplabilir ancak tavsiye etmiyoruz. Genel olarak mikroilemcilerde PUSH ve POPkomutlar ilemcinin bir register uzunluu kadar bilgi zerinde ilem yapacak ekildetasarlanmaktadr. rnein DOS altnda aadaki ilemler geerlidir.

    PUSH AXPUSH BXPUSH word ptr [SI]PUSH CSPUSH BP

    aadakiler geersizdir.

    PUSH ALPUSH byte ptr [SI]

    Korumal modda stack blgesinin tepesi SS:ESP register ile belirtilen blgedir.

    PUSH EAXPOP EBP

    PUSH ileminde nce SP DOS modunda 2 byte korumal modda 4 byte azaltlr.

    Bilgi azaltlm deerden itibaren yerletirilir.

    Tipik bir programn almasnda stack iin n byte yer ayrlmtr ve SP reg i bublgenin en altna ekilir. Tipik bir .exe program aadaki gibi 3 blgedenolumaktadr. Program bellee yklendiinde SP reg. stack blgesinin en altnakonumlandrlr.

    Kod

    Data

    Stack

    Programn stack blgesi balangta belirlenir daha sonra byltlemez vekltlemez. Ar derecede PUSH ilemi yaplrsa SP stack iin ayrlan blgeyi geer

    buna stack overflow denir(stackin yukardan tamas). Stack tamalar ilemci tarafndanotomatik olarak tespit edilemez. Stack blgesini byklne programc karar verir ancak

    program baladnda SP reg. konumlandrlmasn ykleyici yapar.

    2.10.10 POP Komutu

    31

  • 7/29/2019 Assembly E Kitap

    32/175

    Bu ilemde SP register ile belirtilen blgeden 2 byte alnr (korumal moddaESPnin gsterdii yerden 4 byte) ve SP 2 byte artrlr.

    Bir kere PUSH bir kere POP yapldnda SP eski deerine ekilmi olur. rneinaadaki ilemler sonrasnda AX ve BX registerlarnn ilerindeki deerler yerdeitirilebilir.

    PUSH AXPUSH BXPOP AXPOP BX

    2.10.11 Stack Kullanmnn Amac

    Stack kullanmn 2 amac vardr:1. Bilgilerin geici olarak saklanmas2. Programlama dillerinde yerel deikenlerin saklanmas ve parametre aktarlmas

    Biz burada yalnzca birinci kullanm amac zerinde duracaz.

    rnein CX register iindeki bilgiyi tutmak isteyelim. Ve elimizde hibir boregister kalmam olsun. bu durumda rnein CX registern zorunlu olarak bozmakdurumunda kalabiliriz. (rnein CL registernn yklenmesini gerektiren bir telemeilemi olabilir.) te CX iindeki bilgi geici sre stackte saklanabilir.

    PUSH CXMOV CL, 3ROL AX,CL

    POP CX

    Bazen birden fazla register geici sre saklanacak olabilir. Bu durumda onlar terssrada POP ile almak gerekir. rnein:

    PUSH CXPUSH AX....POP AXPOP CX

    Bir bellek blgesi ierisindeki bilginin stacke atlmas da sz konusu alabilir. rnein

    PUSH word ptr [SI]

    Byle bir ilem zel durumlarda kullanlr.

    PUSH ve POP komutlar herhangi bir biimde bayraklar etkilemez.

    Stack ile ilgili dier iki nemli komut PUSHF ve POPF komutlardr. Normalolarak flag register birka zel komut dnda hibir biimde kullanlamaz. (genelgsterimlerdeki reg flag ve segment registerlar haricindeki tm registerlar, sreg iseyalnzca segment registerlarn gstermektedir.)

    32

  • 7/29/2019 Assembly E Kitap

    33/175

    Flag register iindeki bilgiyi almak ve flag registerna yeni bir deer yklemekiin PUSHF ve POPF komutlar kullanlr.

    rnein bayrak register iine bilgi yerletirmek iin:

    PUSH AX

    POPF

    komutlar; bilgi almak iin:

    PUSHFPOP AX

    komutlar kullanlabilir. POPF komutlar tm bayraklar etkiler.

    Bazen btn registerlarn stackte saklanmas gerekebilir. rnein bir donanmkesmesi olutuunda arlacak bir kod yazmak istesek kesme knda btnregisterlarn ilk konumuna getirilmesi gerekir. bunun iin kesme koduna girite btnregisterlar stackte saklanmal, kta da hepsi geri alnmaldr.

    Bu ilemi kolaylatrmak iin 2 zel komut vardr.

    2.10.12 PUSHA ve POPA Komutlar

    PUSHA komutu srasyla 16 bit sistemde AX, CX, DX, BX, SP, BP, SI, DI registerlarnstacke atar. POPA ters srada geri eker.

    2.10.13 INC ve DEC Komutlar

    Bu komutlar tek operandr ve operandn tek arttrr ya da azaltr.

    Biimleri:INC/DEC reg/mem

    Komutun etkiledii bayraklar: AF, OF, PF, SF ve ZFdir(Bu komutlar CF bayra zerindeetkili olmaz, nk zaten elde olutuunda ZF bayrayla bu tespit edilebilmektedir).

    2.10.14 XCHG Komutu

    Biimleri:XCHG regreg/mem

    ki bellek blgesini yer deitirmek iin aadaki gibi bir ilem yapabiliriz. Bu komutherhangi bir bayra etkilememektedir.

    Kalp:A ve B ile ifade edilen iki bellek blgesindeki verilerin yerlerinin deitirilmesi aadaki

    makine komutlar dizisiyle yaplabilir:MOV AX, AXCHG AX, B

    33

  • 7/29/2019 Assembly E Kitap

    34/175

    MOV A, AX

    2.10.15 CBW(convert byte to word) ve CWD(convert word to double word)Komutlar

    Bu komutlar bytetan worde ya da wordden dworde iaretli dnm yapankomutlardr. Bu komutlar operandszdr. Ancak gizlice AX ve DX registerlar zerindeetkili olurlar. rnein Cde kk tamsay trnn byk tamsay trne dntrlmesiileminde bu makine komutlarndan yararlanlr.

    CBW komutunda dntrlecek say AL registernn ierisine yerletirilir. Komutuygulandktan sonra dntrlm olan say AXten alnr. rnein Cde aadaki gibi

    bir dnm olsun:

    char x = -1;

    int y;y = x;

    derleyici aadaki gibi bir kod retecektir:

    MOV AL, FFCBW

    CWD komutunda dntrlecek bilgi AXe yerletirilir. Komut uygulanr. SonuDX, AXten alnr.

    Bu komutlarn dntrme dnda DX registern ayarlamas dnda iaretliblme komutlarndan nce kullanlmasna sk rastlanr. rnein Cde 16 bit iki sayyaadaki gibi blecek olalm:

    int a, b, c;

    a = b/ c;

    bu ilem iin DX:AX registerlarnn hazrlanmas gerekir. DX register saynn iaretinegre 00 ya da FFlerle doldurulacaktr. lem aadaki gibi yaplabilir:

    MOV AX, bCWDIDIV word ptr cMOV a, AX

    2.11 Dallanma Komutlar

    Intel ilemcilerinde programlama dillerinde karlatmz if komutlarnkarlayabilmek iin bir grup dallanma komutlar vardr. Intel sisteminde dallanmakomutlar iki gruba ayrlr:

    1. Koulsuz dallanma komutlar2. Koullu dallanma komutlar

    34

  • 7/29/2019 Assembly E Kitap

    35/175

    Koulsuz dallanma komutlar tpk goto deyimi gibidir. Oysa koullu dallanmakomutlarnda nce CMP komutuyla bir karlatrma yaplr, sonra bu karlatrmaya gredallanma salanr. Aslnda dallanma ileminde yaplan tek ey IP ya da EIP registerlarnadeer atamaktr. JMP komutlar genellikle operand olarak bir say alr. Bu say aknaktarlaca yani IP ya da EIP registernn alaca deeri belirtmektedir. JMP komutlar

    ikilik sistemde nce JMP komutunun varln belirten 1 ya da 2 byte sonra bir yerdeitirme(displacement) deeri alr.

    2.11.1 Yer Deitirme(displacement) Kavram

    Sembolik makine dilinde JMP komutlarnn operandlar bir say deil, bir etikettir.Bu etiket deerlerinin sayya dntrlmesi derleyicinin grevidir. Debuggerlarda durum

    byle deildir. rnein:

    JMP EXIT

    ........EXIT:

    Debuggerlarda JMP ilemi iin hedef adres kullanlr. rnein:

    2.11.2 JMP 1000

    Sembolik makine dilinde ve debuggerlarda byle olmasna karn makine dilinde JMPkomutunun operand yer deitirme miktar biiminde bulunmaktadr. Yani sembolikmakine dili derleyicileri ve debuggerlar ilem kodunu belirlerken yer deitirme miktarnhesaplarlar.

    lem kodu: Komutun makine dilindeki ikilik sistemdeki karldr. Yer deitirmemiktarnn orijin noktas JMP komutundan bir sonraki komutun yeridir. Yani sonrakikomutun yeri 0 olmak zere ileriye doru yaplan dallanmalar pozitif, geriye doru yaplandallanmalar negatif yer deitirme miktar biiminde verilir.

    2.11.3 Koulsuz JMP Komutu

    Koulsuz JMP komutunun 5 ayr biimi vardr:1. Segment ii ksa JMP(direct within segment short JMP)

    Bu komut 2 byte uzunluundadr. lk byte EB biimindedir. kinci byte yer deitirmemiktarn belirtir. Bu komut ile en fazla [-128, +127] uzaklklara dallanlabilir. Budallanma biimi sembolik makine dilinde short anahtar szc kullanlarak belirtilir.rnein:

    JMP short EXIT.........EXIT:

    35

  • 7/29/2019 Assembly E Kitap

    36/175

    Sembolik makine dili derleyicileri ileriye doru dallanmalarda(forward jump) shortanahtar szc kullanlmamsa dallanmann ksa olduunu anlayamaz. Ancak geriyedoru dallanmalarda bunu anlar.

    2. Segment ii dorudan yakn JMP(direct within segment near JMP)Bu komut 3 byte uzunluundadr. Komutu anlatan byte E9 biimindedir. Bu byte 2

    bytelk yer deitirme miktar takip eder. Yani yer deitirme miktar [-32768,

    +32767] arasndadr. Bu komutla segmentin her yerine dallanlabilir. Pozitif ya danegatif yer deitirmede segment dna klrsa sarma ilemi(wrapping) uygulanr.3. Segment ii dolayl yakn JMP(indirect within segment JMP)Bu komut 2 byte uzunluundadr. FF komutu anlatan bytetr. Dier byte register ya da

    bellekoperandn belirtir. rnein:

    JMP near [SI]

    burada ilemci DS:SI blgesinden 2 byte eker ve bunu dorudan IP registernayerletirerek dallanr. Bu komutta yer deitirme miktar deil, offset sz konusudur. Cde

    fonksiyon gstericileri bu eit bir dallanma ilemini akla getirir. Tabii burada JMPkomutu yerine CALL komut bulunacaktr. rnein:

    void (*p) (void);p = func;p();

    C kodu, aadaki ekilde sembolik makine dilinde ifade edilebilir:

    MOV p, funcCALL near p

    Dolayl JMP ileminde registerlar da kullanlabilir. rnein:

    JMP AX

    4. Segmentler aras dorudan JMP(direct intersegment JMP)Bu komut 5 byte uzunluundadr. Komut EA ile balar. Bundan sonra iki byte offset ve iki

    byte segment bilgisi alr. Offset IP registerna segment CS registerna yerletirilir vebaka bir segmente dallanlr. Komut sembolik makine dilinde ve debuggerlarda JMPsegment:offsetbiiminde bildirilir. rnein:

    JMP 0FFFF:0000

    Makine reset edildiinde CS:FFFF, IP:0000 adresini alr. Yani makineyi reset etmek iinyeterlidir.

    5. Segmentler aras dolayl JMP(indirect intersegment JMP)Bu ilem segment ii dolayl JMP ileminin segmentler aras versiondr. Yanioperand olarak bir bellek blgesini alr. Atlanacak segment ve offset deerlerinioradan eker. Komutu anlatan byte FFtir. Komut sembolik makine dilinde vedebuggerlarda aadaki gibi kullanlr:

    2.11.4 JMP far [SI]

    36

  • 7/29/2019 Assembly E Kitap

    37/175

    Burada JMP anahtar szcnden sonra far anahtar szcnn getirilmesi gerekir.Yoksa ilemin segment ii mi yoksa segmentler aras m olduu anlalamaz. Bellekoperandyla belirtilen blgeden ekilen ilk word deer IP registerna, sonraki worddeer ise CS registerna yerletirilir.

    2.11.5 Koullu Dallanma Komutlar

    Bu komutlar tamamen programlama dillerindeki if komutlarnn karldr.Koullu JMP ilemi srasnda ilemci yalnzca bayraklarn durumuna bakar. Yani koulluJMP komutlar bayraklarn durumuna baklarak yaplan JMP komutlardr. Teorik olarakSUB ya da CMP ileminden sonra bayraklar btn iaretli ve iaretsiz karlatrmalaryapacak biimde etkilenir. Koullu JMP komutlarnn ou SUB ya da CMPkomutlarndan sonra anlaml olacak biimde tasarlanmtr. Bu komutlar SUB ya da CMPkomutu olmadan da kullanlabilir. Ancak ou kez anlamsz olur.

    Intelin 16 bir ilemcilerinde koullu JMP komutlarnn ilem kodu 2 byte

    uzunluundadr. Birinci byte komutun kendisini, dier byte yer deitirme miktarn(displacement) anlatr. Yani 16 bit mimaride koullu JMP komutlaryla en fazla bulunulanyerden 128 byte uzakla dallanma yaplabilir. 80386 ve sonrasnda koulu JMP komutlar2 byte ve 4 byte yer deitirme yaplabilecek biimde geniletilmitir.

    2.12 Eitlik Karlatrmas

    ki deerin eitlii CMP komutundan sonra ZF bayrana baklarak tespit edilebilir.Bu testi yapan makine komutu JZ/JEdir(Bu iki komut birbirinin aynsdr). Koullu JMPkomutlar koul salanmsa belirtilen blgeye dallanmay salarlar. Koul salanmamsa

    bir sonraki komuttan devam ederler. Aadaki C karlatrmasnn sembolik makine dilikarl:

    if (x == y)ifade1;

    elseifade2;

    MOV AX, xCMP AX, yJZ @1fade2JMP NEXT@1:ifade1@2:

    Burada tipik bir if komutunun sembolik makine dilindeki karl grlmektedir.

    2.12.1 Eitsizlik Karlatrmas

    CMP komutundan sonra JNZ/JNE komutu ile ZF bayra 0 ise dallanlabilir.

    Kalp:Bellekte bulunan bir deerin 0 olup olmadn anlamak iin iki yntem kullanlabilir.1. Deikeni dorudan 0 ile karlatrp ZF bayrana bakmak,2. Deikeni registera ekip kendisiyle AND ya da OR ilemine sokmak. Bu yntem

    daha etkindir. Aadaki if ifadesinin sembolik makine dili karl:

    37

  • 7/29/2019 Assembly E Kitap

    38/175

    if (result)ifade1;

    elseifade2;

    MOV AX, resultAND AX, AXJNZ @1fade2JMP @2@1:ifade1

    @2:

    Bazen karlatrma ilemlerinde ek bir takm makine komutlar sz konusu olabilir.rnein:

    if (x + y == a * b)ifade1;

    elseifade2;

    MOV BX, xADD BX, yMOV AX, aMUL word ptr bCMP AX, BXJZ @1fade2

    JMP @2@1:ifade1@2:

    2.12.2 aretsiz Saylarn Karlatrlmas

    aretsiz saylarn karlatrlmas iin SUB ya da CMP komutundan sonra CF veZF bayraklarna bakmak yeterlidir. Aada aklanan komutlar yalnzca bu bayraklara

    bakmaktadr. aretsiz karlatrma yapan komutlar ve e deerleri aada verilmitir:

    Komutlarda byktr iin above szc, kktr iin below szc kullanlmaktadr.Karlatrma ileminin anlatm SUB ya da CMP komutunun birinci operand dikkatealnarak kurulmutur.

    JA(jump if above)/JNBE(jump if not below or equal)JB(jump if below)/JNAE(jump if not above or equal)JAE(jump if above or equal)/JNB(jump if not below)JBE(jump if below or equal)/JNA(jump if not above)

    if (x >= y)ifade1;

    elseifade2;

    MOV AX, xCMP AX, y

    JAE @1ifade2JMP @2@1:ifade1@2:

    2.12.3 aretli Saylarn Karlatrlmas

    aretli saylarn karlatrlmasnda SUB ya da CMP komutundan sonra OF, ZF veSF bayraklarna baklr. Karlatrmann anlatm yine birinci operanda gre kurulmutur.Byktr iin greater, kktr iin less szckleri seilmitir. aretli karlatrmakomutlar unlardr:

    38

  • 7/29/2019 Assembly E Kitap

    39/175

    JG(jump if greater)/JNLE(jump if not less or equal)JL(jump if less)/JNGE(jump if not greater or equal)JGE(jump if greater or equal)/JNL(jump if not less)JLE(jump if less or equal)/JNG(jump if not greater)

    if (x >= y)ifade1;else

    ifade2;

    MOV AX, xCMP AX,yJGE @1ifade2JMP @2@1:ifade1@2:

    2.12.4 Dier Koullu JMP Komutlar

    aretli ve iaretsiz karlatrma komutlarnn dnda CF, OF, PF ve SF bayraklarnndurumuna gre dallanmay salayan 8 koullu JMP komutu da vardr:

    JC(jump if carry)JNC(jump if not carry)JO(jump if overflow)JNO(jump if not overflow)JP(jump if parity)JNP(jump if not parity)JS(jump if sign flag set)JNS(jump if not sign flag set)

    2.13 Alt Programlarn arlmas

    Cde bir fonksiyon arldnda fonksiyonun ana blou bittiinde ya da fonksiyonierisinde return anahtar szc kullanldnda ak arlma ileminden sonraki koddandevam eder. Fonksiyonlarn arlmas iin Intel ilemcilerinde CALL makine komutu,fonksiyondan geri dnmek iin ise RET komutu kullanlr. CALL makine komutununJMPden tek fark dn adresinin stackte saklanmasdr. CALL makine komutudallanmadan nce CALL komutundan sonraki komutun adresini kendi ierisinde otomatikolarak stacke PUSH eder. Bylece dallanma ilemi yapldnda dn adresi stacktedir.

    stediimiz zaman RET makine komutuyla o adresi stackten alarak geri dnebiliriz. Budurumda

    CALL adr

    edeerindeki bir komut

    PUSH sonraki_adrJMP adr

    biiminde yaplr. CALL makine komutunun 4 biimi vardr:

    1. Segment ii dorudan CALL(direct within segment CALL)

    39

  • 7/29/2019 Assembly E Kitap

    40/175

    Bu makine komutunu E8 byteyla tehis edilir. Komutun kendisi 3 byteuzunluundadr. 2 bytelk bir yer deitirme miktar vardr. Yani segmentin hertarafna dallanlabilir. Dallanmadan nce yalnzca IP register stacke PUSH edilir.rnein:

    CALL

    func

    Fonksiyondan geriye dnmek iin sembolik olarakPOP IP ileminin yaplmas gerekir.Tabii POP IP biiminde bir makine komutu yoktur. Bu makine komutunun ismi RETkomutudur. Yani aslnda Cde fonksiyonun ana blou bittiinde derleyici bizimgrmediimiz bir RET komutu yerletirmektedir.

    2. Segment ii dolayl CALL(indirect within segment CALL)

    Burada komutun operand bellek ya da registerdr. Programn ak operand ilebelirtilen bellekteki adrese gider. Bu arma ileminin segmentler aras dolaylarma ileminden ayrlmas iin CALL komutundan sonra near anahtar szcnngetirilmesi gerekir. rnein:

    CALL near [SI]CALL near [BP 2]

    Komutu anlatan byte FF biimindedir.

    3. Segmentler aras dorudan CALL(direct intersegment CALL)

    Segmentler aras CALL ileminden geri dnlebilmesi iin hem CS hem de IPregisterlarnn stacke atlmas gerekir. Komut nce PUSH CS, sonra PUSH IP

    ilemleriyle sonraki komutun segment ve offset bilgilerini stacke atar ve operandbiiminde verilmi olan CS ve IP deerlerini ykleyerek dallanmay gerekletirir.

    Komut 5 byte uzunluundadr. Sembolik makine dilinde CALL segment:offset biimindekullanlr. rnein:

    CALL 1FC0:2C15

    Segmentler aras CALL ileminden RETF makine komutuyla geri dnlr.

    4. Segmentler aras dolayl CALL(indirect intersegment CALL)Bu komutun operand bellek ya da registerdr. Belirtilen bellek blgesindeki dk

    anlaml word IP registerna, yksek anlaml word CS registerna ekilerek dallanmagerekletirir. Komuttafaranahtar szc kullanlmaldr. rnein:

    40

  • 7/29/2019 Assembly E Kitap

    41/175

    CALL far [SI]CALL far [BP 2]

    2.14 Alt Programdan Geriye Dn

    RET makine komutu CALL komutuyla stacke atlm olan dn adresini geriykleyerek dn gerekletirir. RET komutlar segment iiyse RET ile segmentler arasise RETF ile ifade edilir. 4 eit RET komutu vardr:

    1. Segment ii RETBir byte uzunluunda bir makine komutudur. Komutun ilem kodu C3tr. Komut POPIP gibi bir ilemi gerekletirir.

    2. Segment ii artrml RETBu makine komutu 3 byte uzunluundadr. Komut anlatan byte C2dir. Komut iki

    bytelk bir say operand almaktadr. Sembolik makine dilinde RET n biimindegsterilir. rnein:

    RET 4

    Komut nce POP IP ilemini yapar, daha sonra SP registern parametresindebelirtilen miktarda byte artrr. rnein:

    Bu komut zellikle pascal arma biimini ve Windows programlamasnda __stdcallarma biimini gerekletirmek amacyla kullanlmaktadr.

    3. Segmentler aras RETSembolik makine dilinde RETF komutuyla belirtilir. Komut srasyla POP IPve POP CSilemlerini yapar ve baka bir segmente geri dner. Komut CB deeriyle anlatlr.Komut 1 byte uzunluundadr.

    4. Segmentler aras artrml RETKomut 3 byte uzunluundadr ve RETF n biiminde gsterilir. Komut nce RETFilemini gerekletirir, daha sonra SP registern n kadar artrr. rnein:

    RETF 4 gibi bir komut altrlrsa;

    41

  • 7/29/2019 Assembly E Kitap

    42/175

    2.15 Bayraklar zerinde zel lem Yapan Komutlar

    Normal olarak bayrak konumlarn deitirmek iin PUSHF ve POPF makinekomutlarndan faydalanlabilir. Ancak baz kritik bayraklar iin onlar set eden ve reseteden zel makine komutlar vardr. Bu komutlar unlardr:

    CLC clear CFSTC set CFCLI clear IFSTI set IFCLD clear DFSTD set DFCMC complement CF

    2.16 Sembolik Makine Dili Nedir?

    Debugger programlarnda komut o anda girilir ve altrlr. Girilen komutkmesinin kaynak kod olarak bir dzyaz dosyas ierisinde saklanmas mmkn deildir.Sembolik makine dili bir derleyiciye sahip olan, makine komutlarnda yazlm bir

    program exe hale getirebilen bir alma biimini oluturur. Bylelikle istenilendeiiklikle kaynak kod ierisinde yaplp saklanabilmektedir. Sembolik makinedosyalarnn uzants asm olarak belirlenir. Asm program tpk C program gibi derleniplink ilemine sokulmak zorundadr. Sembolik makine dili derleyicileri genellikle tek birexe dosya biimindedir. Borlandn TASM, Microsoftun MASM programlar kullanlantipik derleyicilerdir. TASM programlar Borland derleyici paketlerinin ierisinde zaten

    bulunmaktadr. Sembolik makine dili derleyicileri geleneksel olarak bir editre sahip

    deildir. Programlar herhangi bir editrde yazlp komut satrndan derlenir. Tipik birprogramn derlenmesi ilemi:

    TASM ;

    Obj modl tlink.exe ya da link.exe programlaryla komut satrndan link edilerek exe dosyaelde edilir. TLINK programnn tipik kullanm yledir:

    TLINK ;

    2.17 Exe Dosyann Yaps ve Yklenmesi

    Exe dosyalar ierisindeki bilginin organizasyonuna gre yle evrim geirmitir:

    DOS MZ formatWin3.x NE formatWin32 PE format

    Bir exe dosyann yaps tipik olarak yledir:

    42

  • 7/29/2019 Assembly E Kitap

    43/175

    Exe dosyann balk ksmnda programn yklenmesine ilikin eitli bilgilerbulunur. Bir exe dosya altrlaca zaman blok olarak RAMe yklenir. Ykleme

    srasnda MZ ksmnda balk ksm atlmaktadr. PE formatnda balk ksmyla birlikteykleme yaplr. Program iletim sisteminin ykleyici(loader) program tarafndanyklenir. Program bellee yklendiinde artk almakta olan bir program haline gelir.almakta olan programlara process denir. Programn btn makine komutlar exedosyann code blmndedir.

    Program bellee yklendikten sonra nasl alr hale getirilecektir? Programnalr hale getirilmesi aslnda CS:IP registerlarna program koduna ilikin ilk deerlerininverilip kontroln braklmasndan baka bir ey deildir. Exe dosya ierisinde her ey ikiliksistemde mikroilemcinin anlayaca biimdedir. rnein bir C programnda yzlercefonksiyon olabilir. Ancak C programlar main fonksiyonundan almaya balar. Peki

    ykleyici main fonksiyonun balang segment ve offset deerlerini nereden bilecektir?te programn balang kod adresi yani CS:IP registerlarna verilecek ilk deer exedosyann balk ksmna linker tarafndan yazlr. Ykleyici stack oluumu iin SS ve SPregisterlarna da ilk deer verir. SP program yklendiinde stack blgesinin en sonunugsterecek biimdedir. Ancak ykleyici DS registerna programn data blgesinin

    balang adresini otomatik olarak vermez. DS register programc tarafndan uygun birbiimde yklenmek zorundadr. Bu durumda tipik bir exe dosya yklendiinde registerdurumlar aadaki gibi olacaktr.

    2.18 Tipik Bir Sembolik Makine Dili Program

    Sembolik makine dili programlar yalnlatrlm segment tanmlamalaryla ya da

    ayrntl segment tanmlamalaryla yazlabilir. Genel yap DOS ve UNIX, Win32programlar arasnda kk farkllklar gstermektedir. Biz bu blmde tipik bir DOSprogramnn organizasyonunu inceleyeceiz.

    Sembolik makine dilinde byk-kk harf duyarll yoktur. Dilin karakterkmesi Cden fazla olarak @ ve ? iaretlerini kapsayacak biimdedir. Tipik bir DOS

    program nce bir bellek modelinin belirtilmesiyle balar. Toplam 6 bellek modeli vardr:

    TinySmallMedium

    CompactLarge

    43

  • 7/29/2019 Assembly E Kitap

    44/175

    Huge

    Bellek modeli ileride ayrntlaryla ele alnacaktr. Yalnzca DOS iin geerli olan birkavramdr. Bellek modeli u belirlemeler konusunda etkili olur:- Programn toplam kod data ve stack bykl- Program yklendiinde segment register'larn birbirlerine gre olan durumu

    - JMP ve CALL komutlarnn segment iinde kalp kalmayaca

    Cde bellek ynetimi small modeldir. Small model programlarda code blm 64 Kbgeemez. CS register code blmnn bana ekilmitir. Bu nedenle JMP ve CALLkomutlar segment iinde kalmak zorundadr. Small modelde programn data ve stacktoplam da 64 Kb geemez. Small model programlarda sembolik makine dili derleyicisiDS ve SS registerlarnn ayn deerde olduunu varsayarak kod retirler. Bu durumdatipik bir small model program yklendiinde nemli registerlarn durumlar aadaki gibiolacaktr:

    Program yklendiinde DS hari CS, SS ve SP registerlarnn deeri ykleyici tarafndanverilir. Programn hemen banda DS registerna ekilde gsterilen deeri bizim vermemizgerekir. Bu deer aadaki gibi verilebilir:

    MOV AX, @dataMOV DS, AX

    Bu deerin sembolik ismi @data biimindedir. Bu durumda tipik bir sembolik makine diliprogram bu iki satrla balamaldr. Tabii program data blgesini kullanmak zorundadeildir. Bu durumda DS registernn da o blgeyi gstermesine gerek kalmaz. Bukomutla birlikte artk ekildeki register durumu elde edilmitir.

    2.19 Code, Data ve Stack Blmlerinin Belirlenmes