İÇİNDEKİLER
Teşekkür 5 Önsöz 7 2. Baskının Önsözü 9 Tablo Listesi 25 Kısaltmalar Dizini 29 1.ASSEMBLY DİLİNİN YERİ 33 1.1Assembly Dili Hakkındaki Yanlışlar ve Doğrular 34 1.1.1Assembly Dili Hakkındaki Yanlışlar 34 1.1.2Assembly Dili Hakkındaki Doğrular 36 1.1.3Neden 80x86 Assembly Dili? 36 2.SAYI SİSTEMLERİ 37 2.1İkili (Binary) Sayı Düzeni 37 2.2Sekizli (Octal) Sayı Düzeni 40 2.3On Altılı (Hexadecimal) Sayı Düzeni 40 3.SİSTEM ORGANİZASYONU 43 3.1FSB (Front Side Bus) 44 3.2Bellek Bağlantı Yolları 44 3.2.1SDRAM (Synchronous Dynamic Random Access Memory) 45 3.2.2DDR-SDRAM (Dual Data Rate SDRAM) 46 3.2.3DDR2-SDRAM (Dual Data Rate 2 – SDRAM) 47 3.2.1DDR3-SDRAM (Dual Data Rate 3 – SDRAM) 48 3.2.2DDR4-SDRAM (Dual Data Rate 4 – SDRAM) 49 3.2.3RDRAM (Rambus Dynamic Random Access Memory) 50 3.3Giriş/Çıkış Yolları 50 3.3.1Yüksek Hızlı Giriş/Çıkış Yolları 51 3.3.1.1Grafik Birim Bağlantısı 51 3.3.1.2İkincil Bellek Birim Bağlantısı 52 3.3.1.3Diğer Çevre Birim Bağlantıları 54 3.3.1.4IEEE 1394 54 3.3.1.5PCMCIA (Personal Computer Memory Card International Association) 55 3.3.1.6USB (Universial Serial Bus) 55 3.3.2Düşük Hızlı Giriş/Çıkış Yolları 56 3.3.2.1Paralel (Eşanlı) İskele 56 3.3.2.2Seri (Dizisel) İskele 56 4.GENEL BİLGİLER VE 80X86 AİLESİ 57 4.1Ana İşlemciler 57 4.2Matematik İşlemciler 62 4.3Kişisel Bilgisayarlarda Bellek Kullanımı ve Büyüklüğü 67 4.3.1Genişletilmiş (Expanded) Bellek 68 4.3.2Uzatılmış (Extended) Bellek 68 4.48086 İşlemcisinin İçyapısı 70 4.5Kesim (Segment) Yapısı 70 4.5.1Kod (Code) Kesimi 71 4.5.2Yığın (Stack) Kesimi 72 4.5.3Veri (Data) Kesimi 73 4.5.4Ek (Extra) Kesim 73 4.6Yazmaç (Register) 73 4.6.1Veri Grubu Yazmaçları 73 4.6.1.1AX: Accumulator 74 4.6.1.2BX: Base Register 74 4.6.1.3CX: Count Register 74 4.6.1.4DX: Data Register 75 4.6.2İşaret Grubu Yazmaçları 75 4.6.2.1SP: Stack Pointer 75 4.6.2.2BP: Base Pointer 75 4.6.2.3IP: Instruction Pointer 75 4.6.3Sıra Grubu Yazmaçları 76 4.6.3.1SI: Source Index 76 4.6.3.2DI: Destination Index 76 4.6.4Kesim Grubu Yazmaçları 76 4.7Bayraklar (Flags) 77 4.7.1CF: Carry Flag 77 4.7.2PF: Parity Flag 77 4.7.3AF: Auxilary Carry Flag 77 4.7.4ZF: Zero Flag 77 4.7.5SF: Sign Flag 77 4.7.6TF: Trap Flag 78 4.7.7IF: Interrupt Flag 78 4.7.8DF: Direction Flag 78 4.7.9OF: Overflow Flag 78 4.816 / 32 Bitlik İşlemciler Arasındaki Farklılıklar 78 4.8.132 Bitlik İşlemcideki Diğer Bayraklar 80 4.8.1.1AC: Alignment Check 80 4.8.1.2VM: Virtual 8086 Mode 80 4.8.1.3RF: Resume Flag 80 4.8.1.4NT: Nested Task 80 4.8.1.5IOPL: I/O - Privilege Level 80 4.8.2Kontrol Yazmaçları 81 4.8.2.1CR0: Control Register 0 81 4.8.2.2CR1: Control Register 1 82 4.8.2.3CR2: Control Register 2 82 4.8.2.4CR3: Control Register 3 82 4.8.2.5Debug ve Test Yazmaçları 82 4.964 Bit İşlemci Yazmaçları 82 4.10Belleğe Erişim 83 4.10.1Gerçek Kipte Fiziksel Adres Hesabı 84 4.10.2Korumalı Kipte Fiziksel Adres Hesabı 85 4.10.2.116 Bit Korumalı Kip 85 4.10.2.232 Bit Korumalı Kip 85 4.10.2.3Sanal (Virtual) 8086 Kipi 86 4.11Çalışma Kipleri Arasındaki Farklar 86 4.12İşletim Sistemleri Açısında Çalışma Kipleri 87 4.13İşlemcinin Komutları Adım Adım Çalıştırması 87 5.80X86 KOMUTLARI (MNEMONIC) VE KOMUT YAPISI 89 5.1Veri Aktarım Komutları 90 MOV 91 MOVSX 92 MOVZX 92 LEA 93 LDS 93 LES 94 XCHG 94 XLAT / XLATB 95 5.2Aritmetik Komutlar 95 ADD 95 ADC 96 XADD 96 SUB 96 SBB 97 INC 97 DEC 97 NEG 98 CMP 98 CMPXCHG 99 MUL 99 IMUL 100 DIV 100 IDIV 101 5.3Dallanma Komutları 101 5.3.1Koşullu Dallanma Komutları 101 5.3.1.1Basit Koşullu Dallanma Komutları 102 JZ / JE 102 JNZ / JNE 102 JS 102 JNS 103 JO 103 JNO 103 JP / JPE 103 JNP / JPO 103 5.3.1.2İşaretsiz Sayı İşlemlerine Ait Koşullu Dallanma Komutları 103 JB / JNAE / JC 104 JA / JNBE 104 JAE / JNB / JNC 104 JBE / JNA 104 5.3.1.3İşaretli Sayı İşlemlerine Ait Koşullu Dallanma Komutları 105 JL / JNGE 105 JNL / JGE 105 JLE / JNG 105 JG / JNLE 105 5.3.2Koşulsuz Dallanma Komutları 106 JMP 106 JMP FAR PTR 107 5.3.3Çağırma Komutları 108 CALL 109 CALL FAR PTR 109 INT 110 INTO 110 5.3.4Dönüş Komutları 110 RET 111 RETF 111 IRET 112 5.4Döngü Komutları 112 LOOP 112 LOOPZ / LOOPE 113 LOOPNZ / LOOPNE 113 JCXZ 113 5.5Bayraklar ile İlgili Komutlar 119 CLC 119 CMC 119 STC 120 CLD 120 STD 120 STI 120 CLI 121 LAHF 121 SAHF 121 5.6Mantıksal Komutlar 121 NOT 122 OR 122 AND 122 XOR 123 TEST 123 SETxxx 124 BT 124 BTC 125 BTR 125 BTS 126 5.7Öteleme ve Döndürme Komutları 126 SHL 127 SHLD 127 SAL 128 SHR 128 SHRD 128 SAR 129 RCL 129 RCR 130 ROL 130 ROR 131 5.8Dizgi (String) Komutları 131 MOVSB 132 MOVSW 132 MOVSD 133 CMPSB 133 CMPSW 133 CMPSD 134 SCASB 134 SCASW 135 SCASD 135 LODSB 135 LODSW 136 LODSD 136 STOSB 136 STOSW 137 STOSD 137 CBW 137 CWD 138 CWDE 138 CDQ 138 BSWAP 138 5.9Ön Ekler 139 REP 139 REPE / REPZ 139 REPNE / REPNZ 140 LOCK 140 5.10Yığın Komutları 140 POP 141 POPA 141 POPAD 142 POPF 142 POPFD 142 PUSH 143 PUSHA 143 PUSHAD 144 PUSHF 144 PUSHFD 144 5.11Giriş/Çıkış Komutları 145 IN 145 INSB 145 INSW 146 INSD 146 OUT 146 OUTSB 147 OUTSW 147 OUTSD 147 5.12Durdurma ve Bekletme Komutları 147 HLT 148 NOP 148 WAIT 148 5.13BCD Düzenleme İçin Kullanılan Komutlar 148 AAA 149 AAD 150 AAM 150 AAS 151 DAA 151 DAS 152 5.14Diğer Komutlar 152 6.80X86 AİLESİNDE ADRESLEME KİPLERİ 153 6.1Anlık (Immediate) Adresleme 153 6.2Yazmaç (Register) Adresleme 153 6.3Doğrudan (Direct) Adresleme 153 6.4Yazmaç Dolaylı (Register Indirect) Adresleme 154 6.5Baz Göreli (Base Relative) Adresleme 154 6.6Doğrudan İndisli (Direct Index) Adresleme 155 6.7Dizgi (String) Adresleme 157 6.8İskele (Port) Adresleme 158 6.8.1Doğrudan İskele Adresleme 158 6.8.2Dolaylı İskeleme Adresleme 158 7.ASSEMBLY DİLİNDE PROGRAM YAZMAK İÇİN NELER GEREKLİDİR? 159 8.SÖZDE (PSEUDO) KOMUTLAR/İŞLEMLER 163 8.1Genel Amaçlı Sözde Komutlar 163 8.1.1Dosya Düzenlemede Kullanılan Sözde Komutlar 163 PAGE 163 TITLE 163 8.1.2Kesim Düzenlemede Kullanılan Sözde Komutlar 164 SEGMENT / ENDS 164 ORG (Origine) 165 ASSUME 165 8.1.3Veri Tanımlamada Kullanılan Sözde Komutlar 166 DB (Define Byte) 166 DW (Define Word) 166 DD (Define Doubleword) 167 DQ (Define Quadword) 167 DT (Define Ten Bytes) 167 EQU (Equal) 167 DUP (Duplication Factor) 168 REAL4, REAL8, REAL10 168 TYPEDEF 168 PTR (Pointer) 169 LABEL 169 8.1.4Yordam Düzenlemede Kullanılan Sözde Komutlar 169 PROC (Procedure) / ENDP (End of procedure) 170 EXTRN 170 PUBLIC 171 8.1.5Makro Düzenlemede Kullanılan Sözde Komutlar 171 MACRO (Macro) / ENDM (End of macro) 171 INCLUDE 171 LOCAL 172 EXITM 172 8.1.6Diğer Sözde Komutlar 172 LENGTH 172 TYPE 173 SIZE 173 OFFSET 173 SEG (Segment ) 173 REPT (Repetition) 174 IRP (Indefinite Repeat) 174 IRPC (Indefinite Repeat Character) 174 END 174 8.2Koşullu Sözde Komutlar 175 IF 175 IFE 175 IF1 175 IF2 175 IFDEF 175 IFNDEF 176 IFB 176 IFNB 176 IFIDN 176 IFDIF 176 9.ASSEMBLY PROGRAM TİPLERİ 177 9.1EXE Tipindeki Assembly Programların Genel Özellikleri 177 9.1.1Örnek EXE Programlar 180 9.2COM Yapısındaki Assembly Programların Genel Özellikleri 191 9.2.1Örnek COM Programlar 194 9.3COM ve EXE Programlar Arasındaki Farklılıklar 200 10.ASSEMBLY PROGRAMIN TEMEL TAŞLARI: YORDAM VE MAKRO 203 10.1Yordam Özellikleri 203 10.1.1Kesim İçi Yordam Kullanımı 203 10.1.2Kesimler Arası Yordam Kullanımı 209 10.2Makro Özellikleri 218 10.2.1Makro Örnekleri 221 10.3Yordam ve Makro Karşılaştırılması 226 11.ANA VE ALT PROGRAMLARDAKİ KESİMLERİN BİRLEŞTİRİLMESİ 227 11.1Birleştirilmiş (Combined) Kod Kesimi Kullanımı 227 11.2Birleştirilmiş (Combined) Veri Kesimi Kullanımı 237 12.YORDAMLAR VE PARAMETRE AKTARMA YÖNTEMLERİ 247 12.1Yazmaç Üzerinden Parametre Aktarma 247 12.2Yığın Üzerinden Parametre Aktarma 247 12.3EXTRN/PUBLIC Kullanımı ile Parametre Aktarımı 253 13.SİSTEMİN ÇALIŞMAYA BAŞLAMASI (START UP) 257 13.1DOS Bellek Haritası 259 14.KESME (INTERRUPT) NEDİR? NE AMAÇLA KULLANILIR? 261 14.1Kesme Çeşitleri 264 14.1.1Dâhili Kesmeler 264 14.1.2Harici Kesmeler 264 14.1.2.1Maskelenemez Kesmeler (NMI) 265 14.1.2.2Maskelenebilir Kesmeler (INTR) 265 14.1.3Kesme Öncelikleri 265 14.1.4Kesme Oluştuğunda Yapılan İşlemler 268 14.2Vektör Tablosunun Görevi ve Komumu 269 14.2.1Vektör Tablosunda Değişiklik Neden ve Nasıl Yapılır? 269 14.2.2Interrupt Servis Programı Yazarken Nelere Dikkat Edilmelidir? 271 14.2.3Vektöre Tablosunun Eski Haline Getirilmesi 272 14.3DOS ve BIOS Ara Yüzleri 272 14.3.1BIOS (Basic Input Output System) Kesme Fonksiyonları 273 14.3.2DOS Kesme Fonksiyonları 274 15.YÜKSEK SEVİYELİ DİLLER VE ASSEMBLY BAĞLANTISI 275 15.1Turbo Pascal’dan Assembly Yordam Çağırma 275 15.2Assembly’den Turbo Pascal Yordam Çağırma 278 15.3Turbo Pascal ve Assembly Kullanımında Dikkat Edilmesi Gerekenler 282 15.4Turbo C’den Assembly Yordam Çağırılması 283 15.5Assembly’den Turbo C Yordam Çağırma 284 15.6Turbo C ve Assembly Kullanımında Dikkat Edilmesi Gerekenler 286 16.EKLER 287 16.1Çalışma Ortamının Kurulması 287 16.1.1Mevcut İşletim Sistemini Kullanmadan Çalışma Ortamının Kurulması 288 16.1.2Microsoft İşletim Sistemlerinde Çalışma Ortamının Oluşturulması 289 16.1.2.1Windows 9x 289 16.1.2.2Windows XP 290 16.1.2.3Windows 7 290 16.1.3Linux İçin Çalışma Ortamını Oluşturma 291 16.1.4Emülatör Kullanımı 292 16.2Debug Komutları 292 16.2.1R (Register-Yazmaç) 294 16.2.2D (Dump / Display – Döküm / Görüntüleme) 295 16.2.3A (Assembly) 296 16.2.4T (Trace / İzleme) 296 16.2.5U (Unassembly) 297 16.2.6E (Edit / Düzenle) 298 16.2.7F (Fill / Doldurma) 298 16.2.8C (Compare / Karşılaştırma) 299 16.2.9G (Go / Git) 300 16.2.10H (Hex Calculator / On Altılı Hesaplayıcı) 301 16.2.11L (Load / Yükle) 301 16.2.12M (Move / Aktar) 301 16.2.13P (Proceed / Devam Etmek) 301 16.2.14Q (Quit / Çıkış) 302 16.3ASCII Karakter Tablosu 302 16.4BIOS Kesme Listesi 303 16.5DOS Kesme Listesi 307 16.6Ek Örnek Kodlar 311 16.6.1Sıralı Dizide Arama 311 16.6.2Dizi İşlemleri 313 16.6.3Dizi Elemanları Üzerinden Bit İşlemleri 314 16.6.4Karekök Hesabı – SQROOT (Harici Yordam) 315 16.6.5Harici Karekök (SQROOT) Yordamını Kullanmak 316 16.6.6Klavyeden Okuma, Hesaplama ve Ekrana Yazdırma İşlemleri 317 Kaynaklar 321 Türkçe İngilizce Terimler Dizini 323 |