You are on page 1of 128

PC MAKRO ASSEMBLER PROGRAMLAMA DL

(Ders notu)

M.. TEKNK BLMLER M.Y.O. Yrd.Do.Dr. Vedat TOPUZ 2008 - STANBUL

I. 8086 MKRO LEMCS KAYDEDC YAPISI


8086 ilemcilerine ait kaydedicileri drt grupta toplanabilir: 1. 2. 3. 4. I.1 Genel Amal Kaydediciler areti ve ndis Kaydediciler Segment Kaydediciler Bayrak Kaydedicileri Genel Amal Kaydediciler
15 AX BX CX DX AH BH CH DH 8 7 0 AL BL CL DL (A) Accumulator (HL) Base (BC) Count (DE) Data

Genel Amal Kaydediciler

SP BP SI DI

(SP) Stack pointer Base pointer Source index Destination index

areti ve ndis Kaydediciler

IP FLAGSH FLAGSL

(IP) Instruction pointer (PSW) Flags

lemci Kontrol Kaydedicileri

CS DS SS ES

Code Segment Data Segment Stack Segment Extra Segment

Segment Kaydediciler

ekil I.1 8086 temel kaydedicileri.

Bu gruba ek olarak, MB ye ait olan ve eitli durumlar gsteren (aritmetik ya da mantksal ilem sonucu gibi) bir bayrak(flags) kaydedicisi bulunmaktadr. ekil I.1de 8086 mikroilemcisinin temel kaydedicileri grlmektedir. Bu grupta yer alan kaydediciler, programc tarafndan deiik amalarla kullanlabilirler. Bunlardan her biri 16-bit ya da 8-bit olarak kullanlabilirler. Bu kaydedicilerin temel fonksiyonlar aada anlatlmaktadr: AX (Accumulator): Bir aritmetik ya da mantksal ilemlerden sonra sonucu tutar. ALUdaki en nemli kaydedicidir. Aritmetik ilemler bu kaydedici zerinden yaplr ve sonu yine burada saklanr. BX (Base - Taban): Hafzada yer alan bir verinin taban (ofset) adresini veya XLAT (translate) komutu ile eriilen bir tablo verisinin taban adresini iermede sk olarak kullanlr.

CX (Count - Sayma): Bir kaydrma (shift) veya dndrme (rotate) gibi ilemlerde, bit saysn tutmada; string veya LOOP komutundaki ilem saysn belirtmede dng sayac olarak kullanlr. DX (Data - Veri): zellikle arpma ilemlerinden sonra, sonucun yksek deerli ksmn, bir blme ileminden nce blnen saynn yksek deerli ksmn ve deiken I/O komutunda I/O port numarasn tutma ilemlerinde kullanlr. I.2 areti ve ndis Kaydediciler Bu kaydediciler genel amal olarak kullanlabilmelerine ramen, genellikle, hafzada yer alan operandlara eriimde indis veya iareti olarak kullanlrlar. SP (Stack Pointer Yn aretisi): Bir veri ynnn denetiminde kullanlan ve bir sonraki admda eriilecek olan yt esinin yerini iaret eden kaydedicidir BP (Base PointerTaban aretisi): Hafzada yer alan bir veri dizisini adreslemede kullanlr. SI (Source IndexKaynak ndisi): String komutlarnda kaynak veriyi dolayl adresleme de kullanlr. DI (Destination IndexHedef ndisi): String komutlarnda hedef veriyi dolayl adresleme de kullanlr. IP (Instruction PointerKomut aretisi): Her zaman mikroilemci tarafndan yrtlecek bir sonraki komutu adresleme de kullanlr. I.3 Segment Kaydediciler Mikroilemcideki dier kaydedicilerle birlikte hafza adresleri retmede kullanlrlar. Aada ksaca bu kaydedicilerin grevleri anlatlmaktadr: CS (Code Segment): Hafzann, programlar ve alt programlar tutan bir blmdr. CS, program kodunun balang taban adresini belirler. DS (Data Segment): bir program tarafndan kullanlan verilerin bulunduu hafza alandr. ES (Extra Segment): Baz string komutlarnda kullanlan ek veri alandr. SS (Stack Segment): Yn iin kullanlan hafza alann belirler. Yn segmentine yazlacak veya okunacak verinin adresi, SP tarafndan belirlenir. BP de SSde bulunan veriyi adreslemede kullanlr. I.4 Bayraklar (Flags): Bayraklar, ilemcinin almasn belirler ve almas srasndaki durumunu yanstr. ekil-I.2. 8086 ilemcisinin bayrak saklaycsn gstermektedir..

ekil I.2 8086 Bayraklar

(CF) Carry: Bir aritmetik ilemde, toplamadan sonraki eldeyi veya karmadan sonraki dnc belirtir. programlarda hata durumu, zel ilem durumlar ve sonularyla ilgili boolean bayrak olarak da kullanlr. (PF) Parity: Tek elik ilemi, lojik 0;ift elik ilemi lojik 1 ile gsterilir. Elik, ift veya tek olarak belirtilen bir byte veya wordteki birlerin saysdr. (AF) Auxiliary carry: Yaplan bir ilem sonucunda, bit pozisyonlar 3 ve 4 arasnda olan (en sadaki bit sfr pozisyonundadr) toplamadan sonraki eldeyi veya karmadan sonraki dnc belirtir. (ZF) Zero: Bir aritmetik ve mantksal ilem sonucunun sfr olduunu belirtir. Eer Z=1 ise sonu sfrdr; Z=0 ise sonu sfr deildir. (SF) Sign: Bir toplama veya karma ileminden sonra, sonucun aritmetik iaretini belirtir. Eer S=1 ise iaret 1lenir veya negatiftir. Eer S=0 ise; iaret temizlenir veya pozitiftir. Bayraklar etkileyen bir komuttan sonra, en deerli bit pozisyonu S bit'ne yerletirilir. (TF) Trap: Eer Trap bayra 1lenmi ise, tmdevre hata takip ilemi devreye girer. (IF) Interrupt: Mikroilemci tmdevresinin kesme istei giri baca INTR, harici kesme istei ilemini kontrol eder. (DF) Direction: String komutlar yrtlrken DI ve/veya SI kaydedicilerinin artrlmas veya azaltlmas ilemlerinin seimini kontrol eder. (OF) Overflow: Tama, iaretli saylarn toplandnda veya kartldklarnda oluan bir durumdur. Tama, ilem sonucunun hedef kaydediciye smadn gsterir.

II. ADRESLEME MODLARI


. 8086 Hafza Mimarisi 8086 mikroilemcisi 20-bit Adres Yolu ile toplam 1MByte hafza hcresi adresleyebilir. Mantksal hafza, yazlm tarafndan programcya grlen hafzaya verilen isimdir. Bu hafza, donanm tasarmcs tarafndan grlen, gerek hafza yapsn oluturan fiziksel hafzadan farkl olabilir. 8086 mikroilemcisinin mantksal hafzas 00000htan balayp FFFFF hexe kadar uzanr. Mantksal hafza genilii bir byte (8-bit) olup bu adreslerin uzunluu 1M byte olan hafza blounu belirtir. Mikroilemci tarafndan adreslenen 16-bit hafza kelimesi (Word) , her herhangi bir byte adresinden balar ve pe pee 2 byte igal eder. II.1
FFFFFh

1M byte

00000h ekil II.1. 8086 Mantksal hafza haritas.

8086 mikroilemcisinin fiziksel hafza haritas ekil II.2de grlmektedir. iki ayr hafza blou iermektedir. Tek blok (yksek hafza) ve ift blok (dk hafza). Her 8086 blou 512K*8 byte adresleyebilir. 8086, byte veya kelime (16-bit, Word) verisini dorudan adresleyebilmektedir. Bundan dolay, 8086, 16 bit bir kelimeyi bir ilemde okuyup yazabilmektedir (verinin adresinin ift olmas salandnda).
Tek Blok FFFFFh 512 K Byte FFFFEh 512 KByte ift Blok

00005h 00003h 00001h

00004h 00002h 00000h Yksek Hafza Dk Hafza ekil II-2. 8086 fiziksel (donanm) hafza haritas

II.2 . Segmentli Hafza Yaps 8086 mikroilemcisinde hafzaya eriim segment kaydedicilar yoluyla yaplr. Her bir segment blou 64K bytetr. ekil II.3 da segment kaydedicileri ile adreslenen bir hafza haritas rnei grlmektedir. Hafza alannda ayn anda 4 farkl segment bulunabilmektedir. Bunlar kod segment (CS), veri segmenti (DS), ekstra segmenti (ES), ve yn segmenti (SS) dir.

Data Segment Kod Segment Yn Segment Ekstra Segment

DS

CS

SS ES

ekil.II.3. Segment kaydedicilar ile adreslenen bir hafza haritas

Her segment kaydedicisi, 20-bit adresin 16-bit ksmn tutar. Segment kaydedicisinde bulunan 16-bit adresin dk deerli blmne, 0h (0000 b) eklenir. Ayrca bir ofset adresi bu adres ile toplanarak, donanm tarafndan otomatik olarak, 20-bit adres elde edilir. Bu ileme mantksal adresin fiziksel adrese evrilmesi denir. ekil II.4de bir komut tarafndan adreslenen bir verinin, fiziksel adresinin retimi grlmektedir. Bu rnekte, veri segment kaydedicii DS 1000h iermekte, yani veri segmenti 10000h fiziksel adresinden itibaren balamaktadr. Taban kaydedicis (BX)de ofset adres 0020h bulunmakta, ve bylece fiziksel adres 10020h veya 1000h*20h+10020h olmaktadr.
1FFFFh

Data Segment 10000h

10020h + BX=0020h DS=1000h

ekil.II.4. Veri segment inde bulunana bir hafza hcresine eriim

Kod segmenti (CS), program ve veri alan olarak kullanlabilmesine ramen genelde kodlarnn bulunduu alandr. 8086 tarafndan yrtlecek bir sonraki komutun adresi, komut iaretisi ( IP ) ve nin CS * 10h ieriinin toplanmasyla elde edilir. Veri (data) segmenti (DS), bir ok komut ve adresleme modu tarafndan eriilen program verilerini tutar. Hafzadaki verinin adresi, BX, SI veya DI kaydedicilarinden birinin DS * 10h ieriinin toplanmasyla elde edilir. Yn (Stack) segmenti SS, LIFO (Last In First Out) tarznda almaktadr. Bir yn hcresinin adresi, SPnin ierii art SS *10htr. BP tarafndan adreslenen veri de yn segmentinde bulunur.

ES string (Karakter katar) komutlarnda kullanlan veri alandr. Bir string komutu yrtldnde, hedef adres DI ES * 10h, kaynak veri adresi ise, SI art ES * 10tr. Aada Tablo II.1te 8086 mikroilemcisinin deiik ilemleri ve bunlarda otomatik olarak kullanlan kaydedici grlmektedir.
Tablo II.1. lemlere gre deiik segment adres kaynaklar.

lem eidi Segment Alternatif Segment Ofset Komut okuma CS Yok IP Yn ilemi SS Yok SP Veri lemi (aadakiler hari) DS CS, ES eitli String kaynak DS CS, ES SI String hedef ES Yok DI BP taban kaydedici olarak SS CS,ES veya SS eitli kullanldnda Yukarda anlatlan segment li hafza yaps, ilk bakta artc ve zor grlebilir. Bu hafza yaps iin hatrlanmas gerekenler zetle unlarlardr. Program ilem kodlar CS alanndan okunmakta, program verileri DS ve ES alanlarnda saklanmaktadr. Yn ilemleri ise, SP ve BP kaydedicilerini kullanarak SS zerinde ilem yapar. Ayr kod ve veri alanlarnn olmasnn ilk avantaj, bir programn, farkl veri bloklar zerinde alabilmesidir. Bu ilem, DS kaydedicisine farkl bir blou iaret eden yeni bir adresin yklenmesiyle yaplr. Segmentli hafza yapsnn en byk avantaj, mantksal adresler reten x86 programlarnn hafzann herhangi bir yerine yklenip altrabilmesidir. Bunun nedeni, mantksal adreslerin, her zaman, CS taban adresinden bamsz olarak, 0000h ile FFFFh arasnda deimesidir. II.3 Adresleme Modlar 8086 mikroilemcisinde 7 farkl adresleme metodu vardr. Bunlar; 1-) Kaydedici adresleme (Kaydedici Addressing) 2-) ncel adresleme (Immediate Addressing) 3-) Dorudan adresleme (Direct Addressing) 4-) Kaydedici dolayl adresleme (Kaydedici Indirect Addressing) 5-) Taban art ndis adresleme (Base plus index Addressing) 6-) Kaydedici Bal adresleme (Kaydedici Relative Addressing) 7-) Taban Bal art ndis adresleme (Base Relative plus index Addressing) Mikroilemci komutun iindeki bir mod alannn ieriini snayarak bu yedi adresleme modunun hangisini kullanacan belirler. rnek II.1 MOV AX, BX Assembler her iki operand (AX ve BX) kaydedici adresleme modu iin kodlar. Bununla beraber, eer kaynak operandn bana ve sonuna keli parantez koyarsanz, rnek II.2 MOV AX, [BX]; Assembler kaynak operandn (BX) kaydedici dolayl adresleme modu iin kodlar.Tablo II.2. de 8086 de kullanlan adresleme modlarnda kaydedicilarn kullanlmasn gsterir.

Tablo II.1. 8086 Adresleme Modlar: Adresleme Modu Kaydedici ncel Dorudan Operand Biimi Kaydedici Data ndis Etiket Kaydedici Dolayl [BX] [BP] [DI] [SI] Taban art ndis [BX] + indis [BP] + indis Kaydedici Bal [DI] + indis [SI] + indis Taban bal art ndis [BX][SI] + indis [BX][DI] + indis [BP][SI] + indis [BP][DI] + indis Segment Kaydedici Yok Yok DS DS DS SS DS DS DS SS DS DS DS DS SS SS

Notlar 1) Kaydedicilar IP hari 8 veya 16-bit kaydedici olabilir. 2) Data 8 veya 16-bit sabit deerinde olabilir. 3) ndis 8 veya 16-bitlit bir indis deeri olabilir. II.3.1. Kaydedici ve ncel Adresleme Kaydedici adreslemede, 8086 operand kaydediciden alr. rnek II.3 MOV AX,CX ;16-bit ierikli saya kaydedicisini (CX), akmlatr kaydedicisine (AX) tar. CX kaydedicisinin ieriini deitirmez. ncel adreslemleme 8 veya 16-bit sabit deeri kaynak operand gibi belirtmenize izin verir. rnek II.4 K MOV CX , 500; Ondalk deer olan 500 CX kaydedicisine ykler MOV CL,-30; -30 deerini CL kaydedicisine ykler. ncel operand EQU direktifiyle tanmlanm bir simge olabilir. EQU 1024

MOV CX , K

II.3.2.Dorudan Adresleme Dorudan adresleme operand genellikle etikettir. rnek II.5 MOV AX, TABLE ; TABLE bellek blgesinin ieriini AX kaydedicisine ykler. II.3.3 . Kaydedici Dolayl Adresleme Kaydedici Dolayl adreslemede, operandn etkin adresi ya BX (taban kaydedicii ), ya BP (taban iaretisi ) (ya da bir dizin kaydedicisi (SI ya da DI)) iindedir. rnek II.6 MOV AX, [BX] ; bu komut BX le adreslenmi bellek blgesinin ieriini AX kaydedicisinin iine ykler. BXin iine bellek adresine OFFSET neki girebilmek iin bir ofset koymann bir yolu. rnek II.7 AX iinde TABLE blgesinde bir szck yklemek iin, bu diziyi kullann. MOV BX, OFFSET TABLE MOV AX, [BX] MOV AX, TABLE ; Bu iki komut ayn ii yapmak iin kullanlabilinir.

II.3.4. Taban + ndis Adresleme Greceli taban adreslemeyle assembler etkin adresini BX yada BP kaydedicisine bir indis deeri ekleyerek hesaplar. rnek II.8 MOV AX, [BX + 4] II.3.5. Kaydedici Bal adresleme Bu adresleme modunda, etkin adres indis deeri ve dizin saklaycsnn (SI veya DI) toplamdr. Bu adresleme tipi bir tablonun iindeki elere eriim iin uygundur. ndis deeri tablonun balangcn ve dizin saklayc noktalar enin balangcn tutar rnek II.9 B_TABLE isminde bir byte tablomuz var. Direktif dizisi yledir. MOV MOV DI, 2 AL, B_TABLE [DI] ; AL saklaycsnn iine 2. eyi ykler.

II.3.6 .Taban Bal + ndis Adresleme Bu adreslemede, etkin adres bir taban saklayc, bir index saklayc ve (seimlik olarak) indis deerinin toplamdr. nk iki ayr ofsetin varl kabul edilir. Bu mod iki boyutlu dizilere eriimde yararldr.

III. ASSEMBLER-DL YAPISI


III.1. Giri: Her assembler dili bir kaynak (source) program iinde birbirini izleyen [label:](etiket), Mnemonic, [Operand], ;[comment] (yorum) isimli 4 alandan oluur. Bunlarn iinde yalnzca mnemonic alan mutlaka gereklidir. Etiket ve yorum alanlar seimliktir. Operand alan operand gereken yaplarda uygulanr, aksi halde kullanlmaz. Bu alanlar en az bir boluk (ya da tab) ile ayrmaldr. rnek III.1 III.2. Etiket Alan: Etiket, assembler-dili yapsnda bir isimle belirtilir. Bir etiket yaps en fazla 31 karakterden uzunluunda olabilir ve iki nokta ile sonlanmaldr. Adan Zye harfler (veya adan zye, assemblerde kk harf byk harf ayrm yoktur), 0dan 9arasnda saysal deerler, zel karakterler : ? . @ _ $ etiket olarak kullanlabilinir. Herhangi bir karakterle etikete balayabilirsiniz. Fakat u karakterleri kullanamazsnz (AH, AL, AX, BH, BL, BP, CH, CL, CX, CS, DH, DL, DX, DI, DS, ES, SI, SP) kaydedici isimleridir. Etiket iinde boluk kullanlmaz. Fakat ayn etiketi alt izgi karakteri ile ( _ ) salayabilirsiniz. rnek III.2 GET_COUNT : III.3. Mnemonic Alan: Mnemonic, komutlarn 2den 7ye kadar harften oluan komutlarn ksaltlm eklidir. rnein: MOV move (kopyala) komutu iin ksaltmadr. ADD add (topla) komutu iin ksaltmadr. Assembler her saysal eitliklerin iindeki mnemonic yapy evirirken isel tablolar kullanr. Bir komutun oluabilmesi iin Mnemonice ek, baz yaplar gerektirir, bu alan bir ya da iki karakterden oluan operand alandr. (rnein : ADD komutunda iki sayy toplamak iin iki terim girmek gerekir) III.4. Operand Alan: Operand alan 8086ya ilenen veriyi nerede bulabileceini syler. Operand alan Mnemonicten en az bir boluk ya da tab ile ayrlmtr. Eer iki operand gerekliyse, aralarna bir virgl koymak gereklidir. ki operandl yaplarda, ilki hedef operand ve ikincisi kaynak operanddr. Kaynak operand mikroilemcinin hedef operandn iine ekleyecei, kartaca, karlatraca veya depolayaca deeri belirtir. MOV CX, DI GETCOUNT: MOV CX, DI ; sayac balatr

10

rnek III.3 Bu move komutunda MOV CX, DX; CX, DX deki : Kaynak operantnn iindeki Dx kaydedicinn ieriini hedef operandnn iindeki CX kaydedicina tar. Hedef operand hemen hemen her zaman deitirilirken; kaynak operandn ierii deimemektedir. III.5. Yorum Alan: BASICteki REMe benzer bir ifade, kaynak programn iinde seimlik tanmlama ifadesidir; program daha anlalr yapar. Yorumdan nce noktal virgl (;) gelmelidir. Bu alandan nce en az bir boluk ya da tabla ayrmak gerekir. Yorum alanna istediiniz herhangi bir eyi yazabilirsiniz., ama yararl alabilecek, programda ne olduunu aklayan yorumlar yapmalsnz. III.6. KISA NOTASYONDA KOD YAZMAK .MODEL hafza_modeli hafza_modeli SMALL MEDIUM COMPACT LARGE .CODE [ kod segment ad] .DATA .STACK [yn bykl] rnek III.4 Ksa notasyonda program yazmak .MODEL Small .STACK 64 .DATA Alan1 DW 250 Alan2 DW 125 Alan3 DW ? .CODE Basla PROC FAR Mov ax,@data Mov ds,ax Mov ax,Alan1 Add ax,Alan2 Mov Alan3,ax Mov ax,4c00h Int 21h Basla ENDP END Basla 11

Kod segment adedi 1 1 den fazla 1 1 den fazla

Data segment adedi 1 1 1 den fazla 1 den fazla

III.6. PROGRAM DERLEME AAMALARI

Kaynak Dosyas

Editr (Notepad,Edit,..)

Program.ASM

Birletir (MASM.EXE) istenirse Program.LST Program.CRF Program.OBJ

Program1.OBJ Program2.OBJ ..

istenirse

Ba (LINK.EXE)

Program.EXE

Sonu rdeleDebug (TD.EXE)

SONU DORU

Hayr

Evet

altr (Program.EXE)

12

IV.ASSEMBLER KOMUTLARI
IV.1. Veri Transfer Komutlar: IV .1.1. Adres Ykleme Komutlar (LEA, LDS,LES):

Bu komutlar, bir kaydedicia veya bir kaydedici ile bir segment kaydediciine adres yklemede kullanlmaktadr.

LEA (Load Effective Address): LEA komutu, bir kaydediciye operand ile belirtilen

adresi ykler. Tablo.IV.1de birinci rnekte, AX kaydedicisi, operand SUBADR ierii ile deil (yani bu adresteki veri ile deil) SUBADR adresiyle yklenmektedir.
Tablo.IV.1. Adres ykleme komutlarnn deiik kullanmlar

Asembly Dili LEA AX, SUBADR LDS DI, LIST LES BX, VEC1

Yaplan lem AX SUB ADR adresiyle yklenir DI ve DS LISTteki adres ile yklenir BX ve ES VEC1deki adres ile yklenir

LDS ve LES: LDS ve LES komutlar, bir 16-bit kaydediciye bir ofset adres ve DS (LDS

ile) veya ES (LES ile) segment kaydedicisine yeni bir segment adresi ykler. Bu komutlar, yeni ofset ve segment numarasn semede kullanlr. Bu komutlardan her birinde hafzadan mikroilemciye iki tane 16-bit kelime, yani toplam 4-byte veri transferi olur. LDS ve LES komutlar ile, bir program iinde farkl bir DS ve ES alanlarna iaret edilirken, ofset kaydedicilara da yeni ofset yklenir.. IV.1.2. Dizi (String) Komutlar (LODS,STOS,MOVS) eit dizi (string) veri transfer komutu vardr. Bunlar: LODS, STOS ve MOVS. Bu komutlar, mikroilemci ile hafza arasnda, bir blok veya tek bir byte veya kelime transferinde kullanlr. Bu komutlar tantmadan, aada nce, bu komutlarn kullanmnda nemli olan, yn (direction) bayra (D) ve dizi ilemlerinde kullanlan DI ve SI kaydedicilarnn fonksiyonlar anlatlacaktr. Yn Bayra (D): Yn bayra dizi ilemleri srasnda, DI ve SI kaydedicilar iin otomatikarttrma (D=0) veya otomatik-azalma (D=1) alma modunu seer. D bayra CLD komutu ile 0lanr ve STD komutu ile 1lenir. Yani CLD otomatik-arttrmay ve STD otomatik-azalmay seer. Bir dizi komutu ile yaplan veri transferinden sonra, D bayrayla seilen alma moduna gre, eer veri 1-byte ise DI ve/veya SI 1 arttrlr veya azaltlr. Benzeri ekilde, transfer edilen veri 2 byte ise, bu kez DI ve/veya SI 2 arttrlr ya da azaltlr. Bir dizi 13

komutunda DI, SI veya her ikisi kullanlabilir. Normalde SI, DS iin ve DI, ES iin ofset adres olmaktadr. LODS (Load String): LODS komutu SI ile iaretli hafza hcresinden ALye 1 byte

veya AXe 2 byte (kelime) yklemektedir. Tablo.IV.2, LODS komutunun baz kullanm rneklerini gstermektedir. LODSB ve LODSW komutlar bir byte veya bir kelime transferine neden olur. rnein, LODSB komutu yrtlrken, nce SI ile iaretli DS alannda bir byte veri AL kaydediciine kopyalanr. Hemen sonra, SI, D bayrann durumuna gre, 1 arttrlr veya azaltlr. STOS (Store String): STOS komutu, AL veya AXi DI ile iaretli hafza hcresine

saklanmaktadr. Tablo.IV.3 STOS komutunun baz kullanm rneklerini gstermektedir. LODSte olduu gibi, STOStan sonra B veya W kullanlarak bir byte veya kelime yapld belirtilir.
Tablo.IV.2. LODS komutunun baz deiik kullanm rnekleri.

Asembly Dili LODSB LODSW LODS BUFFER LODS DATA

Yaplan lem AL=[SI], SI=SI 1 AX=[SI], SI=SI 2 AL=[SI], SI=SI 1 (Eer BUFFER byte ise) AX=[SI], SI=SI 2 (Eer DATA Word ise)
Tablo.IV.3. STOS komutunun baz deiik kullanm rnekleri.

Asembly Dili STOSB STOSW STOS BUFFER STOS DATA

Yaplan lem DI=AL, DI=DI 1 DI=AX, DI=DI 2 AL=AL, DI=DI 1 (Eer BUFFER byte ise) AX=AX, DI=DI 2 (Eer DATA Word ise)

REP ile STOS Komutu: Tekrar (repeat) REP neki (prefix) herhangi bir dizi komutuna

eklenebilir. Bu nek, bir dizi ileminin, CX sayma deeri sfr oluncaya kadar devan etmesine neden olur. Aada verilen rnek program parasnda, BUFFER adresli yerden balayan 10 byte, sfr ile temizlenmektedir. Bu ilem pe pee 10 tane STOS komutuyla veya REP neki ile bir tane STOS komutuyla yaplabilir. Program ES ve DI kaydedicilarn hafza adresiyle ykleyen LES komutuyla balamaktadr. Daha sonra, CX sayac yklenmekte ve DI bayra sfrlanarak, her STOS komutu yrtldkten sonra DInn otomatik arttrlmas salanr.

14

rnek IV.1 STOS komutunu kullanarak bir hafza blounu temizleme LES DI, BUFFER MOV CX,10 CLD MOV AL, 0 REP STOSB ; BUFFER adresini ykle ; sayac ykle ; otomatik-arttrmay se ; hafza temizlenecek ; BUFFER alan temizle

Hafza blounu temizlemenin, daha hzl bir yolu REP STOSW komutunu kullanmaktr. Bu durumda saya 5 ile yklenmelidir. nk 5 tane 0000h kelimesi 10 byte hafza temizler. Aada bu ilemi yapan program paras verilmitir. rnek IV.2 STOS komutunu kullanarak bir hafza blounu temizleme LES DI, BUFFER ; BUFFER adresini ykle MOV CX, 5 CLD MOV AL, 0 REP STOSW ; sayac ykle ; otomatik-arttrmay se ; hafza temizlenecek ; BUFFER alan temizle

MOVS (Move String) komutu: En gl dizi veri transfer komutu olan MOVS

hafzann bir alanndan dier bir alanna bir byte veya bir kelime aktarm yaplr. Dier bir deyile, bu komut hafzadan hafzaya veri transferi yapar. Bir MOVS komutu, data segmentte (DS) bulunan ve SI kaydedicis ile adreslenen hafza hcresini, ESde bulunan ve DI ile adreslenen hafza alanna aktarr. Tablo.IV.4te MOVS komutunun baz deiik kullanmlar gsterilmektedir.
Tablo.IV.4. MOVS komutunun baz deiik kullanm rnekleri.

Asembly Dili MOVSB MOVSW MOVS BYTE1,BYTE2 MOVS WORD1,WORD2

Yaplan lem [DI]=[SI],DI=DI1,SI=SI1 [DI]=[SI],DI=DI2,SI=SI2 [DI]=[SI],DI=DI1,SI=SI1 [DI]=[SI],DI=DI2,SI=SI2

Aadaki verilen rnek program parasnda, BUFFER2 alanndan 100 byte BUFFER1 lanna aktarlmaktadr. MOVS kullanlmadan nce, LES ve LDS komutlaryla hafza iaretileri DI ve 15

SI yklenerek, BUFFER1 ve BUFFER2 alanlarn iaret eder. Daha sonra, MOVS komutu yrtlrken, SI ve DIda bulunan adreslerin otomatik arttrlmas, CLD komutuyla seilmi ve CX sayac 100 ilk deeriyle yklenmitir. Bu n ilemlerden sonra, REP komutuyla kullanlan MOVS komutu veri transferini gerekletirir. rnek IV.3 LES DI, BUFFER1 LES SI, BUFFER2 CLD MOV CX, 100 REP MOVSB ; BUFFER1 adresini ykle ; BUFFER2 adresini ykle ;otomatik-arttrmay se ; 100 byte veri transferi ; BUFFER2den BUFFER1e aktarm

IV.1.3.

Dier Veri Transfer Komutlar

(IN, OUT,XCHG,XLAT)

Bu gruptaki veri transfer komutalar, ok nemli olmalarna ve ok kullanlmalarna karn daha nceki gruplara girmemektedir. Bu komutlar IN, OUT, XCHG, XLAT, LAHF ve SAHFdir. IN ve OUT: Mikroilemci bu komutlar ile giri/k cihazlar (portlar) ile haberleir.

8086 mikroilemcisinde veri aktarm mikroilemcinin AL veya AX kaydedicis ile bir sabit adres ile veya DX ile belirtilen (adreslenen) ir d port arasnda olur. Tablo.IV.5te IN ve OUT komutlarnn baz deiik kullanm rnekleri verilmektedir.
Tablo.IV.5. IN ve OUT komutlarnn baz deiik kullanm rnekleri.

Asembly Dili IN AL,IPORT IN AX,IPORT IN AL,DX IN AX,DX OUT OPORT,AL OUT OPORT,AX OUT DX,AL OUT DX,AX

Yaplan lem IPORTtan 8-bit veri ALye okunur IPORTtan 16-bit veri AXye okunur DX ile iaretli porttan 8-bit veri ALye okunur DX ile iaretli porttan 16-bit veri AXe okunur ALnin ierii OPORTa gnderilir AXin ierii OPORTa gnderilir ALnin ierii DX ile iaretli porta gnderilir AXin ierii DX ile iaretli porta gnderilir

16

XCHG: Bu komut, herhangi bir kaydedicisinin ieriini dier bir kaydedici veya hafza

hcresiyle deitirmektedir. XCHG komutu, segment kaydedicilarinin ieriini ve hafzadan hafzaya veri ierii deitirmede kullanlmaz. XCHG komutunu 16-bit AX kaydedicisi ile dier bir 16-bit kaydedicisinin ieriklerini deitirmede kullanlan en etkin ve en hzl yer deitirme ynetimidir. Tablo.IV.6, XCHG komutunun baz deiik kullanm rnekleri verilmektedir.
Tablo.IV.6. XCHG komutunun deiik ekilleri.

Asembly Dili XCHG kaydedici,kaydedici XCHG kaydedici,hafza

Yaplan lem Kaydedici ieriklerini deitir. Kaydedici ile hafza ieriklerini deitir.

XLAT: XLAT (translate) komutu, ALnin ieriini hafzada bir tabloda sakl sayya

evirmektedir. Bu komut, bir kodu dierine eviren, dorudan tablo arama (table lookup) tekniinde kullanlr. XLAT komutu, nce ALnin ieriini BX kaydedicisna ekleyerek DS iin bir hafza adresi oluturur. Daha sonra bu adreste sakl veriyi AL kaydedicisna ykler. IV.2. Aritmetik ve Lojik Komutlar:( Toplama, karma ve Karlatrma) Bir mikroilemcinin komut kmesindeki en temel aritmetik komutlar, toplama, karma, ve karlatrma ilemleridir. Bu blmde toplama komutlar ADD, ADC ve INC; karma komutlar SUB, SBB, DEC ve karlatrma komutu CMP sunulacaktr. IV.2.1. Toplama( ADD, ADC ve INC Komutlar): Temel olarak ADD ve ADC olmak zere iki toplama komutu olmasna karn, kullanlan adresleme modlarna gre, toplama ilemi ok deiik ekiller almaktadr. Elde ile toplama komutu ADC (Add with Carry) deiik uzunlukta (16-bit, 32-bit, 64-bit veya daha uzun) operandlarn toplama ileminde kullanlr. INC (arttrma) komutu bir operanda 1 toplayan dier bir toplama komutu saylabilir. ADD Komutu: Tablo.IV.7, ADD toplama komutunun deiik adresleme modlarna gre

baz kullanm rneklerini gstermektedir. Tablonun banda kaydedici toplamasna (kaydedici addition) eitli rnekler verilmitir. Bu toplamada her iki operand bir kaydedicidan gelmektedir.

17

Tablo .IV.7. Toplama komutunun deiik kullanm rnekleri.

Asembly Dili ADD AL,CL ADD DX,SI ADD BL,20H ADD CX,4000H ADD [BX],CL ADD CX,[SI+2] ADD AL,BUF

Yaplan lem AL = AL + CL DX = DX + SI BL = BL + 20H CX = CX + 4000H CL,BX ile adreslenen DSdeki hcre ile toplanr, sonu yine bu CX,SI+2yazlr. hcreye ile adreslenen DSde bulunan hcre ile toplanr, sonu AL,DSde bulunan BUF hcresi ile toplanr,sonu ALye yazlr. CXe yazlr.

Dier bir adresleme ivedi toplama (immediate addition) adreslemesidir. Bu adreslemede, bir operand kaydedicidan,dier bir operand hafzadan gelen sabit bir saydr. SI, DI, BP veya BX kaydedicilaryla yaplan adreslemeyle hafzadan kaydediciya toplama (memory-to-kaydedici addition) gerekletirilir. Bir taban ofset deerinin toplanmasyla oluan adresle iaretlenen hcrenin bir kaydedici ile toplanmas ile dizi toplamas (array addition) gerekletirilir. Aada verilen rnekte, bir byte dizisi olan ARRAYin ilk 3 eleman ARRAY[0], ARRAY[1] ve ARRAY[2] toplanmaktadr. rnek IV.4 MOV AL, 0 MOV SI, 0 ADD AL, ARRAY[SI] ; ilk eleman

ADD AL, ARRAY[SI+1] ; ikinci eleman ADD AL, ARRAY[SI+1] ; nc eleman ADC Komutu: Elde ile toplama komutu olan ADC, operand ile beraber elde bayran

(C) toplamada kullanr. Bu komut 8086da 16-bitten ve 80386 Pentium da ise 32-bitten daha geni saylar toplamada kullanlr. Tablo.IV.8, ADC komutunun baz kullanm ekillerini gstermektedir.

Tablo.IV.8. ADC komutunun deiik kullanm rnekleri

Asembly Dili ADC AL,CL

Yaplan lem AL = AL + CL + C 18

ADC AX,BX ADC [BX],AL ADC AX,[BP+2]

AX = AX + BX + C
DSde bulunan BX ile adreslenen byte hcresi,AL ve C ile toplanr, sonu hafzada saklanr. SSdeki BP+2 ile adreslenen 16-bit hafza hcresi,AX ve C ile toplanr, sonu AXde saklanr.

INC Komutu: Bu komut bir segment kaydedicis dnda herhangi bir kaydediciya veya

bir hafza hcresine 1 eklemektedir. Tablo.IV.9, INC komutunun baz kullanm ekillerini gstermektedir.
Tablo.IV.9. Arttrma komutunun deiik kullanm rnekleri

Asembly Dili INC CL INC BP INC BYTE PTR[BX] INC WORD PTR[SI]

Yaplan lem CL = CL + 1 BP = BP + 1
DSde bulunan BX ile adreslenen bir byte hafza ierii arttrlr. DSde bulunan SI ile adreslenen bir 16-bit hafza ierii arttrlr.

IV.2.2 karma( SUB, SBB ve DEC Komutlar): Temel olarak SUB ve SBB olmak zere iki karma komutu olmasna karn kullanlan adresleme modlarna gre karma ilemi ok deiik ekiller almaktadr. dn ile karma komutu SBB (Subtract with Borrow) deiik uzunlukta (16-bit, 32-bit, 64-bit veya daha uzun) operandlarn karma ileminde kullanlr. DEC (azaltma) komutu bir operandtan 1 karan dier bir karma komutu saylabilir. SUB Komutu: Tablo.IV.10, SUB komutunun deiik adresleme modlarna gre baz

kullanm rneklerini gstermektedir.


Tablo.IV.10. karma komutunun deiik kullanm rnekleri

Asembly Dili SUB AL,CL SUB DX,SI SUB BL,20H SUB CX,4000H SUB [BX],CL SUB CX,[SI+2] SUB AL,BUF

Yaplan lem AL = AL CL DX = DX - SI BL = BL - 20H CX = CX - 4000H


BX ile adreslenen DSdeki hcreden CL karlr, sonu yine bu hcreye yazlr. CXden SI+2 ile adreslenen DSde bulunan hcre kartlr, sonu CXe yazlr. ALden DSde bulunan BUF hcresi kartlr,sonu ALye yazlr.

SBB Komutu: dn ile toplama komutu olan SBB, operand ile beraber elde bayran

(C) karmada kullanr. Bu komut Bu komut 8086 da 16-bitten ve 80386 Pentium da ise

19

32-bitten daha geni saylar karmada kullanlr. Tablo.IV.11, SBB komutunun baz kullanm ekillerini gstermektedir.
Tablo.IV.11. SBB komutunun deiik kullanm rnekleri

Asembly Dili SBB AL,CL SBB AX,BX SBB [BX],AL SBB AX,[BP+2]

Yaplan lem AL = AL - CL C AX = AX - BX C
DSde bulunan BX ile adreslenen byte hcresinden AL ve C kartlr, sonu hafzada saklanr. AXten SSdeki BP+2 ile adreslenen 16-bit hafza hcre ve C kartlr, sonu AXte saklanr.

DEC Komutu:Bu komut bir segment kaydedicis dnda herhangi bir kaydedicidan veya

bir hafza hcresinden 1 karmaktadr.Tablo.IV.12, DEC komutunun baz kullanm ekillerini gstermektedir.
Tablo.IV.12. Azaltma komutunun deiik kullanm rnekleri

Asembly Dili DEC AL DEC SP DEC BYTE PTR[BX] DEC WORD PTR[SI]

Yaplan lem AL = AL - 1 SP = SP - 1 DSde bulunan BX ile adreslenen bir byte hafza ierii DSde bulunan SI ile adreslenen bir 16-bit hafza ierii azaltlr. azaltlr.

IV.2.3. Karlatrma (CMP): Karlatrma komutu olan CMP (Compare) sadece bayrak bitlerini deitiren bir karma ilemidir. Karlatrma ilemi, bir kaydedici ieriiyle dier bir kaydedici veya hafza ierii arasnda yaplr. Genelde, bu karlatrma komutundan hemen sonra bayraklarn durumunu test eden bir dallanma komutu gelir. Tablo.IV.13, CMP komutunun deiik adresleme modlarna gre baz kullanm rneklerini gstermektedir. Karlatrma komutu daha nce verilen toplama ve karma komutunda olduu gibi ayn adresleme modlarn kullanmaktadr. Sadece hafzadan-hafzaya ve segment kaydedici karlatrmasna izin verilmez. Karlatrma ilemine giren operandlarda bir deime olmaz. Sadece bayraklar etkilenir.
Tablo .IV.13. Karlatrma komutunun deiik kullanm rnekleri

Asembly Dili SUB AL,CL SUB DX,SI

Yaplan lem AL-CL ilemi yaplr. DX-SI ilemi yaplr.

20

SUB BL,20H SUB CX,4000H SUB [BX],CL SUB CX,[SI+2] SUB AL,BUF SUB SUB AL,BUF[DI] [BX+DI],DL

BL-20H ilemi yaplr. CX-4000H ilemi yaplr. BX ile adreslenen DSdeki hcreden CL kartlr. CXten SI+2 ile adreslenen DSte bulunan hcre kartlr. ALden DSde bulunan BUF hcresi kartlr.
Alden DSde bulunan BUF ve ofset DInn toplam ile adreslenen hcre kartlr. DSde bulunan BX ve ofset DInn toplam ile adreslenen hcreden DL kartlr.

IV.2.4. arpma ve Blme: Bu komutlarla sadece tamsay (integer) arpma ve blme destei salamaktadr. Kayan nokta ilemleri ya yazlm alt programlar ile veya ilk zamanlar, 8087 (8086 iin), 80287 (80286 iin) ve 80387 (80386 iin) gibi bir d nmerik ilemciyle saland. 80486 ve daha sonraki Pentium ilemcilerde, kayan nokta aritmetik ilemleri, artk tm devre zerinde gerekletirildi. arpma (MUL, IMUL) : arpma ilemi, 8-bit veya 16-bit iaretsiz (MUL) veya iaretli

(IMUL) tamsaylar zerinde yaplr. arpma sonucu (arpm), operandlar 8-bit ise, 16-bit; 16bit ise 32-bit olur. arpma komutlarnda, ivedi adresleme modunun dndaki adresleme modlar kullanlabilir. arpma ve blme komutlarnda ilk operand her zaman AL (8-bit ilemde) veya Ax (16-bit ilemde) kaydedicisnda bulunur. a) 8-Bit arpma: 8-bit arpma ileminde arpanlardan biri her zaman AL kaydedicisnda bulunur. Programc ikinci arpan komut ile belirtir. ekil.IV.1de grld gibi 16-bit arpm sonucu Ax kaydedicisnda bulunur.

Operand8

AL

AX ekil.IV.1. 8-bit arpma ilemi:

aretli arpmada operandlar donanm tarafndan iaretli (2nin tmleyeni) olarak yorumlanr ve arpm yine 2nin tmleyeni eklinde olur. Bu tr arpma ileminde IMUL komutu kullanlr. Saylarn yorumlanmas ve ilemleri programcya baldr.

21

b) 16-Bit arpma: 16-bit arpma ileminde arpanlardan biri her zaman AZ kaydedicisnda bulunur. Programc ikinci arpan komut ile belirtir. ekil.IV.2 de grld gibi 32-bit arpm sonucu DX ve AX kaydedicilarnda bulunur. Tablo.IV.14, MUL ve IMUL komutlarnn deiik adresleme modlarna gre baz kullanm rnekleri gsterilmektedir.
Operand16 X AX

DX

AX

ekil.IV.2. 16-bit arpma ilemi Tablo.IV.14. arpma komutunun deiik kullanm rnekleri

Asembly Dili MUL DL IMUL CH MUL BYTE PTR[BX] IMUL BYTE PTR OP2 IMUL CX MUL WORD PTR[SI]

Yaplan lem
ALde bulunan iaretsiz tamsay DL ile arplr. arpm AXte bulunur. ALde bulunan iaretli tamsay CH ile arplr. arpm AXte bulunur. DSde bulunan BX ile adreslenen hafza hcresi AL ile arplr. arpm AXte bulunur. DSde OP2 adresinde bulunan iaretli tamsay AL ile arplr. arpm AXte bulunur. AXdeki iaretli tamsay CX ile arplr. arpm DX:AXte bulunur. DSde bulunan ve SI ile adreslenen 16-bit hafza hcresi AX ile arplr. arpm DX:AXte bulunur.

Blme (DIV, IDIV): 8086de arpma ilemi gibi blme ilemi de, iaretsiz (DIV) veya

iaretli (IDIV) 8-bit veya 16-bit saylar zerinde yaplr. a) 8-Bit Blme:8-bit blme ileminde blnen her zaman AX kaydedicisnda bulunur. Programc blen sayy komut ile belirtir. ekil.IV.3te grld gibi 8-bit blm sonucu AL ve AH kaydedicilarnda bulunur.
AX
Operand8

AL

AH

ekil.IV.3. 8-bit blme ilemi

Aada verilen blme ilemi rneinde, AL kaydedicisndaki 12h says CL kaydedicisndaki 2 saysna blnmektedir. Blme ileminden nce kalann temizlenmektedir rnek IV.5 22 sakland AH kaydedicisi

MOV AL, 12H MOV CL, 2 MOV AH, 0 DIV CL 8-bit blme ileminde, blnecek say 8-bit ise bu sayy 16-bite evirmek iin CBW (Convert Byte to Word) komutu kullanlr. Bu komut Al kaydedicisnda bulunan iaretli 8-bit sayy AX kaydedicisna 16-bit olarak evirir. Bu komut genellikle 8-bit blme ileminden nce kullanlr. b)16-Bit Blme:16-bit blme ileminde blnen her zaman DX:AX kaydedici iftinde bulunur. Programc blen sayy komut ile belirtir. ekil.IV.4de grld gibi, 16-bit blm sonucu AX ve DX kaydedicilarnda bulunur.
DX AX
Operand8

AL

DX ekil.IV.4. 16-bit blme ilemi:

16-bit blme ileminde, blnecek say 16-bit ise bu sayy 32-bite evirmek iin CWD (Convert Word to Double Word) komutu kullanlr. Bu komut AX kaydedicisna bulunan iaretli 16-bit sayy DX:AX kaydedici iftine 32-bit olarak evirir. Bu komut genellikle 16-bit blme ileminden nce kullanlr. Aada verilen rnekte, AXteki 200 CXte bulunan 9 ile blnmektedir. Blme ilemindeki nce CWD komutu ile AXteki iaretli say DX:AX kaydedici iftine 32-bit olarak evrilir. Blme ileminden sonra AXte blm (-22) ve DXte kalan (-2) bulunur. Tablo.IV.15de 8-bit ve 16-bit blme ilemlerine ait baz rnekler verilmektedir.

rnek IV.6 MOV AX, -200 MOV CX, 9 CWD 23

IDIV CX

Tablo.IV.15. Blme komutunun deiik kullanm rnekleri

Asembly Dili DIV DL IDIV CH DIV BYTE PTR[BX] IDIV BYTE PTR IDIV OP2 CX DIV WORD PTR[SI]

Yaplan lem
ALde bulunan iaretsiz tamsay DL ile blnr. arpm AXte bulunur. ALde bulunan iaretli tamsay CH ile blnr. arpm AXte bulunur. DSde bulunan BX ile adreslenen hafza hcresi AL ile blnr. arpm AXte bulunur. DSde OP2 adresinde bulunan iaretli tamsay AL ile blnr. arpm AXte bulunur. AXdeki iaretli tamsay CX ile blnr. arpm DX:AXte bulunur.

DSde bulunan ve SI ile adreslenen 16-bit hafza hcresi AX ile blnr. arpm DX:AXte bulunur.

IV.2.5. BCD ve ASCII Aritmetik: 8086 ikili kodlanm ondalk (Binary Coded Decimal - BCD) ve ASCII saylar zerinde ilem yapan zel konutlara sahiptir. BCD aritmetikte kullanlan 4 komut vardr. Bu komutlar unlardr: DAA (Decimal Adjust after Addtion) DAS (Decimal Adjust after Subtraction) AAM (Adjust After Mutiplication) AAD (Adjust Before Division) DAA, DAS, AAM komutlar BCD saylarn toplama, karma, arpma ilemlerinden sonra; ADD ise DIV komutu kullanmadan nce saylar ayarlama iin kullanlr. Toplama ve karmada, toplanacak ve kartlacak saylar, bir byte iinde, 2 hane olarak ALde saklanr. Bu ileme paketlenmi BCD format denir. rnein, eer bir byte 25H ise ve bu bir BCD sayy belirtiyorsa, bu say BCD kodlu 25 saydr. Yani bu byte 2 ve 5 BCD hanelerini ilemektedir. arpma ve blmede, saylar 1 byteta 1 hane olarak paketlenmi BCD saylar olarak saklanr. rnein, AL 04 ise, say BCD 4 e karlk gelir. DAA: DAA komutunun kullanmna ait aada verilen rnek, BX ve CX

kaydedicilarnda bulunan 4 haneli BCD saylar toplamakta, sonucu DX kaydedicisna saklamaktadr. lk DAA komutunun kullanmndan nce, 99 ve 34 saylar toplanarak BCD olmayan CD says retilmitir. DAA komutu bu ilemi C bayranda 1 ve ALde 33 yaparak

24

dzeltmektedir. Daha sonra 12 ve 30 elde bayrayla beraber toplanmaktadr. Bu saynn haneleri BCD olduundan, ikinci DAA komutundan sonra bu sayda bir deiiklik olmaz.sonu olarak, DX kaydedicisnda 4333H veya 4333 BCD kodu bulunur. rnek IV.7 MOV CX, 1234H

MOV CX, 3099H MOV AL, BL DIV AL, CL DAA MOV DL, AL MOV AL, BH ADC AL, DH DAA MOV DH, AL Yukardaki toplama ilemi DAA komutu kullanlmadan yaplsayd ok daya uzun olacakt. DAA komutu, otomatik olarak ALde bulunan saylar dzelttii iin programcya bu ilemi kontrol yk dmez. DAS : DAS komutu DAA gibi almaktadr. Bu komut karma ileminden sonra ALyi

ayarlamada kullanlr. Aadaki program DAS komutu kullanlarak, iki BCD saynn kartma ilemini gerekletirmektedir. Bu program yukarda verilen programa ok benzemektedir. ADD ve ADC komutlar SUB ve SBB ile DAA komutu DAS ile yer deitirilmitir. Bu program altrldnda DX kaydedicisnda 1865 BCD says bulunur.

rnek IV.8

MOV CX, 1234H MOV CX, 3099H MOV AL, BL DIV AL, CL DAS

25

MOV DL, AL MOV AL, BH ADC AL, DH DAS MOV DH, AL AAM: Bu komut iki tane tek haneli paketlenmi BCD saynn arpma ileminden sonra

kullanlr. rnein, AL kaydedicisnda bulunan 5 ile CLdeki 6 saylarn arpan aadaki rnei dnelim. arpma ileminden sonra AX kaydedicisnda 1EH (30) bulunur. Bu BCD olarak doru bir gsterim deildir. AAM komutundan sonra AX kaydedicis 0300H veya 2 haneli paketlenmi 30 BCD sonucuna evrilir. rnek IV.9 MOV AL, 5 DIV CL, 6 MUL AAM AAD: Bir aritmetik ilemden sonra kullanlan dier 3 BCD komutundan farkl olarak, bu

komut blme ileminden nce kullanlmaktadr. AAD komutu, AX kaydedicisnda 2-haneli paketlenmi bir BCD say gerektirmekte olup AH en deerli haneyi, AL ise dier haneyi tutar. Bu 2-haneli BCD say, tek-haneli bir BCD say ile blnmeden nce AAD komutuyla ayarlanmaldr. Bu sayede yaplan blme ilemi sonucunda, AL kaydedicisnda tek-haneli sonu ve AHte kalan retir. AAD komutu paketlenmi BCD saylar 00 ile 99 arasnda ikili saylara evirir. Aada verilen rnek paketlenmi BCD 72 saysnn 9 ile blnme ilemini gerekletirmektedir. AAD komutuyla AX kaydedicisna bulunan 0702H says, yine AXte 0048H saysna evrilir. Bu ekilde BCD say ikili sayya evrilir. Bylece, ikili blme komutu DIV ile doru blme ilemi yaplarak, ALde 08H ve AHta 00H bulunur. rnek IV.10 MOV BL, 9H DIV AX, 0702H AAD DIV BL

26

ASCII Aritmetik: ASCII aritmetik komutlar, ASCII-kodlu saylarla kullanlr. Bu saylar 30H ile 39H arasnda deiir ve 0 ile 9 arasnda saylar gsterir. ASCII-kodlu saylarla kullanlan iki komut vardr. Bu komutlar unlardr. AAA (Adjust for ASCII Addition) AAS (Adjust for ASCII Substraction) Bu komutlar her zaman AX kaydedicisini ayarlama ileminden nce kaynak ve sonra hedef olarak kullanlr. AAA: ki 1-haneli ASCII-kodlu saynn toplanmas faydal bir veri retmez. rnein,

eer 31H ile 39H saylarn toplarsak, sonu 6AH olur. bu ASCII toplama (1+9) ilemi, 10 ondalk saysna karlk gelen, 31H ve 30H ASCII-kodlu 2-haneli bir ASCII sonucu retmeli. Eer bu toplamadan sonra, AAA komutu yrtlrse, AX kaydedicis 0100H ierir. Bu sonu ASCII olmamakla beraber, 3030H eklenerek, ASCII koda evrilir ve 3130H elde edilir. Aada verilen kod paras yukarda anlatlan ilemi gerekletirmektedir. rnek IV.11 MOV AX, 031H DIV AL, 39H AAA ADD AX, 3030H ; ASCII 1 ykle, AH2i temizle ; ASCII 9 ile topla ; ASCII toplama sonu ilk ayarlama ; Sonucu ASCII olarak ver

IV.2.7. Lojik lemler (AND, OR, XOR, TEST, NOT, NEG) : Lojik ilemler, dk-seviyeli bir programda, ikili bit kontrol salar. Lojik ilemler bitlerin temizlenmesini (0lanmasn), 1lenesini veya tersinin alnmasn salar. Btn lojik ilemler bayrak bitlerini etkiler. Lojik ilemler her zaman elde ve tama bitlerini temizleyip dier bayraklar sonucun durumunu yanstr. Temel lojik komutlar AND, OR, XOR (Exclusive-OR) ve NOT ilemleridir. Dier bir lojik komut olan TEST, AND komutunun zel bir eklidir. NOT komutuna benzeyen NEG de bu blmde anlatlacaktr.

AND: AND ilemi lojik arpma ilemini gerekletirir. AND ilemi, bir ikili saydaki

bitleri temizleme ileminde kullanlabilir. Bir ikili saydaki biti temizleme (0lama) ilemine maskeleme denir. Bu ilem bir veri kelimesinde istenmeyen bitler temizlenir.

27

Maskeleme ilemine bir rnek olarak bir 16-bit ASCII bilginin BCD koda evrilmesini dnelim. Aadaki rnekte olduu gibi, eer ASCII koddaki her bir veri hanesinin en sol 4 biti temizlenirse (maskelenirse) BCD kod elde edilir. MOV CX, 3531H AND CX, 0F0FH ; 2 haneli ASCII sayy ykle ; CXi maskele

OR: OR ilemi lojik toplama ilemini gerekletirir. OR ilemi ikili saydaki istenilen

bitleri 1leme ileminde kullanlabilir. Aada verilen rnekte, iki say arpldktan sonra AAM komutu kullanlarak 2-haneli paketlenmi BCD sayya evrilmektedir. En son satrda yaplan OR ilemiyle, bu say 2-haneli ASCII-kodlu sayya evrilir. OR komutundan nce AX kaydedicis 0305H iermektedir. OR komutundan sonra AX 3335H ierir. rnek IV.12 MOV AL, 5 AND BL, 7 MUL BL AAM ; AX = 5 * 7 ; Paketlenmi 2-haneli BCD ayar ; ASCIIye evir ; Veriyi ykle

OR AX, 3030

XOR: XOR ilemi, bazen karlatrma ilemi olarak adlandrlr.XOR ileminde

girilerin farkl olma durumunda; rnein, = A XOR B ileminde, A = 1, B = 0, veya, A = 0, B = 1 ise, sonu lojik 1 olur. Dier durumlarda lojik 0dr. XOR ilemi bir kaydedicinin veya bir hafza hcresinin bitlerini tersleme ileminde kullanlabilir. Bu kelimedeki tersini alnacak bitlerin karl 1 ile XOR ilemine girer ise, istenen bitler terslenir. Bu ilem, bir kontrol uygulamasnda ama/kapama bitlerinin konumlarn deitirmede yararldr. rnein, AX kaydedicisnda bulunan bitlerin, en sadaki 6 biti deitirilmeden en-solundaki 10 bitinin tersi alnmak istensin. Aadaki komut bu ilemi gerekletirmektedir. XOR AX, 0FFC0H Bir kaydedicinn veya bir hafza hcresinin bitleri, kendisi ile XOR ilemine girer ise o kelime temizlenir. Bu ilem en hzl kelime temizleme ilemidir. rnein, aada verilen kod rneinde AL kaydedici temizlenmektedir. XOR AL, AL zet olarak, AND komutu bitleri temizlemekte (0lamakta), OR komutu 1lemekte ve XOR komutu ise bitlerin tersini almaktadr. Bu komut bir programcya, herhangi bir kaydedicida veya hafza hcresinde bulunan bit bit zerinde kontrol salar.

28

Tablo.IV.16, AND, OR ve XOR komutlarnn deiik adresleme modlarna gre baz kullanm rnekleri gsterilmektedir.
Tablo.IV.16. AND, OR ve XOR rnekleri (OP[Operation]: AND, OR ya da XOR)

Asembly Dili OP AL,CL OP CX,DX OP BL,0FH OP SI,00FFH OP AX,[DI] OP BUF[SI],AL

Yaplan lem AL = AL OP CL CX = CX OP DX BL = BL OP 0FH SI = SI OP 00FFH


AX, data segment hafzada DI ile iaret edilen 16-bir kelime ile OPlanr, sonu AXte saklanr. Data segment hafzada BUF art SI ile iaret edilen byte ierik OPlanr, sonu hafzada saklanr.

TEST : TEST komutu bir AND ilemi gerekletirir. Daha nce grdmz, AND

komutu, hedef operand deitirmektedir, fakat TEST komutu deitirmez. Bu komut, testin sonucunu belirten, sadece bayrak kaydedicisinin durumunu etkiler. TEST komutu AND komutu gibi ayn adresleme modlarn kullanr. Tablo.IV.17, TEST komutunun baz ekillerini gstermektedir. TEST komutu bir karlatrma CMP (Compare) komutu gibi kullanlr. Bu komut normalde tek bir biti test eder; buna karn, CMP komutu btn bir byte veya kelimeyi test eder. Sfr bayra (Z), eer test edilen bir sfr ise, lojik 1dir (Z=1, sonu sfr); eer test edilen bit sfr deil ise, lojik 0dr (Z=0, sonu sfr deil). Genelde TEST komutundan sonra JZ (Jump Zero) veya JNZ (Jump Not Zero) gibi bir dallanma komutu kullanr. Aada verilen ksa program parasnda, AL kaydedicisnda bulunan en-sadaki ve en-soldaki bit durumlar test edilmektedir. 1 ile en-sadaki 128 ile en-soldaki bit pozisyonu seilir. Her testi bir dallanma komutu takip eder. Eer test edilen bit 1 deil ise, dallanma komutuyla program belirtilen adrese ynlenir. TEST AL, 1 JNZ RIGHT ; en-sadaki biti test et ; eer 1 ise dallan

TEST AL, 128 ; en-soldaki biti test et JNZ LEFT ; eer 1 ise dallan
Tablo.IV.17. TEST komutunun baz kullanm rnekleri

Asembly Dili TEST AL,CL

Yaplan lem
AL ile CL ANDlenir. Ne AL ne de CL deiir. Sadece bayraklar deiir.

29

TEST CX,DX TEST BL,5 TEST SI,00FFH

CX ile DX ANDlenir. Ne CX ne de DX deiir. Sadece bayraklar deiir.

AL ile 5 ANDlenir. AL deimez. Sadece bayraklar deiir. DX ile 00FH ANDlenir. DX deimez. Sadece bayraklar deiir.

NOT ve NEG: Lojik tersini alma ilemi (veya 1in tmleyeni) NOT komutuyla ve

aritmetik iaret tersleme ilemi (veyann tmleyeni) NEG komutuyla yaplr. Bu komutlar, sadece tek operand kullanan ok az komuttan ikisidir. Tablo.IV.18, NOT ve NEG komutlarnn deiik adresleme modlarna gre baz kullanm rneklerini gstermektedir. NOT komutu, bir bytetaki veya kelimedeki bitlerin tersini alr. NEG komutu ise, bir saynn 2nin tmleyeni eini bulur. Yani bir iaretli saynn aritmetik iareti pozitiften negatife veya negatiften pozitife deiir. NOT fonksiyonu, bir lojik ilem olarak, NEG fonksiyonu, bir aritmetik ilem olarak dnlr.
Tablo.IV.18. NOT ve NEG komutlarnn baz kullanm rnekleri

Asembly Dili NOT CL NEG CL NEG AX NOT TEMP NOT BYTE PTR[BX]

Yaplan lem CL = CL CL = CL + 1 (2nin tmleyeni) AX = AX + 1 (2nin tmleyeni)


DSde bulunan TEMP ile adreslenen verinin bitleri terslenir. TEMPle adreslenen verinin boyu TEMPin tanmlanmasna baldr. DSde bulunan BX ile adreslenen 1-byte verinin bitleri terslenir.

IV.3 .Kaydrma ve Dndrme: Kaydrma (Shift) ve dndrme (Rotate) komutlar, AND, OR, XOR ve NOT komutlarnda olduu gibi, ikili saylar zerinde, ikili bit seviyesinde ilem yapmaktadr. Kaydrma Komutlar (SHL, SAL, SHR, SAR): Kaydrma komutlar, bir kaydedici

veya hafza hcresi zerinde ilem yapar. Bu komutlar, 2nin katlar ile arpma (sola kaydrma) ve blme (saa kaydrma) ilemlerinde kullanlr.8086 komut kmesi, ekil.IV.5te grld gibi, 2 tane lojik kaydrma ve 2 tane aritmetik kaydrma olmak zere, toplam 4 tane kaydrma komutuna sahiptir. Aritmetik saa kaydrma komutu olan SARda, eer say pozitif ise, saa 0 kaydrlr; eer say negatif ise, saa 1 kaydrr. Bu saa kaydrma ileminde iaret biti yine yine ayn konuma kopyalanacaktr.Aritmetik saa kaydrma ile lojik saa kaydrma,

30
SHL

A0

Lojik Sol

iaretli saylarda farkllk gsterir. SAR komutu iaretli sayy 2ye bler. Buna karn SHR komutu iaretsiz sayy 2ye bler. Lojik kaydrma ise sayy 2 ile arpar. Eer 1 haneden fazla kaydrma istenirse, CL kaydedicii kaydrma saysn tutar.
SHL

C
C

A0

0 Lojik Sol

SAL

A0

0 Aritmetik Sol Lojik Sa

SHR

A0

SAR

A0
ekil. IV.5. Kaydrma komutlar

Aritmetik Sa

Tablo.IV.19, kaydrma komutlarnn deiik adresleme modlarna gre baz kullanm rneklerini gstermektedir.
Tablo.IV.19. Kaydrma komutlarnn baz kullanm rnekleri

Asembly Dili SHL CX SHR AX SAL BUFFER,CL SAR SI

Yaplan lem Lojik olarak CXi sola kaydr Lojik olarak AXi sola kaydr
Aritmetik olarak DSde bulunan BUFFER sola CLde bulunan say kadar kaydr Aritmetik olarak SIy saa kaydr

Dndrme Komutlar (ROL,ROR, RCR, RCL ): 8086mikroilemcisinde yer alan 4

dndrme komutu, bir kaydedicidaki veya hafza hcresindeki bilgiyi, bir ucundan dierine veya elde bayra zerinden, ekil.IV.6da grld gibi dndrmektedir. Eer 1 haneden fazla bir dndrme ilemi istenirse, CL kaydedicis kaydrma saysn tutar. Tablo.IV.20, dndrme komutlarnn deiik adresleme modlarna gre baz kullanm rneklerini gstermektedir.

31

Tablo.IV.20 dndrme komutlar Asembly Dili ROL DI RCL CL ROR AH,CL RCR PTR[BP] Yaplan lem Tablo.IV.20. Dndrme komutlarnn baz kullanm rnekleri DI sola bir bit dner. CL sola elde zerinden 1 bit dner. AH sola elde zerinden CLde bulunan say kadar dner. WORD SSde bulunan ve BP ile adreslenen 16-bit Word saa 1 bit dner.

ROL

C C

A0

RCL

A0

ROR

0 C
ekil.IV.6. Dndrme komutlar

A0

RCR

A0

IV.4.Dizi Karlatrmalar: Bu blmde, bir hafza blounu, bir veri ile karlatrma ilemini yapan SCAS (Dizi Tarama) komutu ile, iki hafza blounu karlatran CMPS (Dizi Karlatrma) ek dizi komutlar sunulacaktr. Daha nce sunulan, MOVS, LODS, ve STOS dizi komutlar gibi, SCAS ve CMPS komutlar SI ve/veya DI iin otomatik arttrma veya otomatik-azaltma ilemlerini semede yn bayran (D) kullanr. Ayrca, REPNE, REPE gibi duruma bal tekrar neki ile tekrar edilebilir. SCAS Komutu: Dizi tarama (Scan String) komutu, AL kaydedicis ile bir byte hafza

blounu veya AX kaydedicis ile bir 16-bit hafza blounu karlatrr. Byte karlatrma ileminde SCASB, kelime karlatrma ileminde SCASW kullanlr. Aadaki verilen dizi tarama rneinde, BLOCK adresli yerden balayan 100 byte veri iinde 7 says aranmaktadr. SCASB komutu blok iinde 7 bulana kadar veya CX sayac sfr oluncaya kadar devam eder.

32

rnek IV.13

MOV DI, OFFSET BLOCK ; veri blouna iaret et CLD MOV CX, 100 MOV AL, 7 REPNE SCASB ; otomatik arttrma ; blok uzunluu ; blok iinde aranacak veri ; bulunana kadar karlatr

Dier durumda bal tekrar n eki, eit olduu srece tekrar (repeat while equal) REPE ekidir. Duruma bal tekrarlarda, dizi ilemi, durum doru olduka ve CX sayac sfr olmad srece tekrar eder. Saya sfr olduunda veya durum artk doru deil ise tekrardan klr. Her bir evrim, sayac bir azaltr. Sayacn azalmas bayraklar etkilemez, fakat bir hafza ierii ile AL veya AX kaydedicisn karlatran SCAS komutu bayraklar etkiler. Yukarda verilen rnekte 7 rakamn blok iinde bulunup bulunmadn anlamak iin, SCASB komutundan sonra Z bayrana bakmak yeterlidir. Eer Z = 1 ise, 7, blok iindedir ve DI,7 saynn bulunduu hafza hcresinden bir sonraki yere iaret eder. CMPS Komutu: Dizi karlatrma (Compare String) komutu, ayn olup olmadn

bulmak iin iki hafza blounu karlatrr. Byte Karlatrma ileminde CMPB, keline karlatrma ileminde CMPW kullanlr. Karlatrma ileminde, ES alannda DI ile iaretli bir hafza hcresi, DS alanndaki SI ile adreslenen bir hcresinden kartlr. Bu karma ileminden ne hafza, ne kaydedicilar ne de bayraklar etkilenir. CMPS komutu, otomatik olarak SI ve DI kaydedicilarn arttrr veya azaltr. Bu komut normalde REPE veya REPNE n eki ile beraber kullanlr. Aada verilen rnek, 50 byte uzunluunda iki hafza bloklarnn birbirlerine eitlik olup olmadn bulmak iin, bloklar karlatrmaktadr. CMPB komutu REPE n eki ile kullanlmaktadr. Bu ek eitlik durumu olduu srece aratrmann devam etmesini salar Cx kaydedicis 0 olduunda veya eit olmayan bir durumda, CMPB komutu yrtmesini durdurur. Eer CX sfr ise veya bayraklar eit durum belirtir. se, iki hafza dizisi birbirine eittir. rnek IV.14 MOV SI, OFFSET BLOCK1 MOV DI, OFFSET BLOCK2 CLD MOV CX, 50 REPE CMPSB ; veri blouna iaret et ; veri blouna iaret et ; otomatik arttrma ; blok uzunluu ; dizileri karlatr

33

IV.5 IV.5.1.

.Program Kontrol Komutlar Dallanma Komutlar: Temel program kontrol komutu olan JMP (Jump),

hafzann bir blmnden dier bir blmne program akn ynlendirir. Duruma bal dallanma komutlar, bayrak bitlerinin durumuna gre, yani bir durum testi sonucu program akn deitirir. IV.5.1.1. Dorudan Dallanmalar (JMP) : JMP komutunun 3 deiik ekli vardr. Bunlar: Ksa (short) dallanma, yakn (near) dallanma ve uzak (far) dallanmadr. ekil.IV.7, dallanma komutlarn, hafzadaki yer al yaplarn ve uzunluklarn gstermektedir.
(a) JMP KISA_ADR

lem Kodu (EBH)


(b)

Deiim (DISP)
Segment ii dallanma

JMP YAKIN_ADR

lem Kodu (E9H)


(c)

Deiim Dk (DISP Low)

Deiim Yksek

(DISP High)
Bir segmentten dier bir segmente dallanma (Segment aras dallanma)

JMP UZAK_ADR

lem Kodu (EAH)

IP Dk (IP Low)

IP Yksek (IP High)

CS Dk (CS Low)

CS Yksek (CS High)

ekil.IV.7.Dallanma komutlar: (a) ksa dallanma, (b) yakn dallanma ve (c) uzak dallanma

Ksa Dallanma: Ksa dallanma, 2-bytelk bir komuttur ve ilem kodundan sonraki ikinci byte, iaretli adres bilgisidir. Bu komut, kendisini takip eden hafza adresinden itibaren, +127 ile 128 byte arasnda bir hafza hcresinde dallanmay salar. Ksa dallanmalar, greceli (relative) dallanmalar olarak adlandrlr. nk, bu komutlar hafzada herhangi bir yere, bir deiiklik yaplmadan tanabilir. Bu dallanma komutun iinde, ilem kodundan sonra, bir adres olmayp yer deiim (displacement) bulunur. Yakn Dallanma: Ksa dallanmaya benzeyen yakn dallanma 3-byte bir komuttur ve o anki CS iinde herhangi bir adrese dallanmay salar. Ofset adresi 16-bittir. Uzak Dallanma: Uzak dallanma, mikroilemcinin hafza adres alanndaki herhangi bir adrese dallanmay salar. Ksa ve yakn dallanmalar genellikle, segment ii dallanma (intrasegment jump), uzak dallanma ise segment aras dallanma (intersegment jump) olarak adlandrlr.

34

Programc, dallanmalarda, JMP komutundan sonra bir adres etiketi (label) kullanr. Kullanlan assembler, dallanmann uzunluuna gre ilem kodu ve adres retir. Bu yzden programc iin yaplacak tek ey JMPden sonra dallanlacak yerin adresini yazmaktr. Kaydedici Operandl Dallanma: Dallanma komutu, bir 16-bit kaydedici operand olarak belirlemede kullanlabilir. Bu tr dallanma, dolayl dallanmadr ve kaydedicinn iindeki adres dallanma adresi olarak kullanlr. Kaydedicinn adresi IP olarak alnr ve program bu adresten itibaren devam eder. Bu eit bir dallanma, bir dallanma tablosu kullanmada ok yararldr.

IV.5.1.2 .

Duruma Bal (Koullu) Dallanmalar:

8086 mikroilemcisinde duruma bal dallanmalar ksa dallanmadr. Yani, dallanmalar daima bir sonraki komuttan sonra +127 ile 128 byte arasndadr. Duruma bal dallanma komutlar tablo.IV.21de test durumlar ile verilmitir.
Tablo.IV.21. Duruma bal dallanma komutlar

Komut JA JAE JB JBE JC JE ya da JZ JG JGE JL JLE JNC JNE ya da JNZ JNO JNS JNP/JPO JO JP/JPE JS JCXZ

Test Durumu C = 0 ve Z = 0 C=0 C=1 C = 1 ya da Z = 1 C=1 Z=1 Z = 0 ve S = 0 S=0 S0 Z = 1 ve S 0 C=0 Z=0 O = 0 ve Z = 0 S=0 P = 0 (parity) O=1 P=1 S=1 CX = 0 35

Aklama Yukar ise dallan Yukar ya da eit ise dallan Aa ise dallan Aa ya da eit ise dallan Elde 1 ise dallan Eit ya da sfr ise dallan Byk ise dallan Byk ya da eit ise dallan Kk ise dallan Kk ya da eit ise dallan Elde 0 ise dallan Eit deil ya da sfr deil ise dallan Tama yok ise dallan S = 0 ise dallan Elik yok ise / elik tek ise dallan Tama var ise dallan Elik var ise / elik ift ise dallan aret S = 1 ise dallan CX = 0 ise dallan

Duruma bal dallanmalar u bayrak bitlerini test eder. aret (S), sfr (Z), elde (C), elik (P) ve tama (O). Eer test edilen durum doru ise, program ak dallanma komutuyla belirtilen adresten devam eder. Eer durum yanl ise, dallanma olmaz ve bir sonraki sradaki komut yrtlr. aretli saylarn karlatrlmasnda, JG, JGE, JE, JNE, JL, JLE komutlar kullanlr. aretsiz saylarda ise JA, JAE, JB, JBE, JE, JNE komutlar kullanlr.Tablo.IV.21de grld gibi baz komutlar alternatif komutlara sahiptir. rnein, JE alternatif JZ komutuna sahiptir.. rnek IV.15 MOV DI, OFFSET BLOCK ; veri blouna iaret et CLD MOV CX, 100 MOV AL, 7 REPNE SCASB JCXZ BULUNMADI ... ; bulundu ise ; otomatik arttrma ; blok uzunluu ; blok iinde arttrlacak veri ; bulunan kadar karlatr

IV.5.2 .LOOP Komutu: LOOP komutu CX kaydedicisnn azaltma ile duruma bal dallanma ilemlerinin birleimidir. Bu komut CX kaydedicisn bir azaltr ve eer CX0, komut ile belirtilen adrese dallanr. CX sfr olduunda bir sonraki komut yrtlr. Aada verilen rnekte, BLOCK1 ve BLOCK2 adresli yerden balayan, 100 kelime uzunluunda iki dizinin toplanmasnda LOOP komutu kullanlmtr. LODSW komutu BLOCK1 verisine ve STOSW komutu ise BLOCK2 verisine erimektedir. ADD AX, ES:[DI] komutu ES alannda bulunan BLOCK2 verisine erimektedir. BLOCK2nin ES alannda olmasnn tek nedeni, STOSW komutundaki DI kaydedicisnn ES alanndaki veriyi adreslemi olmasdr. rnek IV.16
MOV MOV MOV MOV TEKRAR: LODSW ADD SI, OFFSET BLOCK1 ; veri blouna iaret et DI, OFFSET BLOCK2 ; veri blouna iaret et CX, 100 AL, 7 ; blok uzunluu ; blok iinde arttrlacak veri ; BLOCK1 verisi oku AX,ES:[DI] ; BLOCK2 verisi ile topla ; BLOCK2 alannda sakla ; 100 kere tekrar et

STOSW LOOP TEKRAR

36

Duruma Bal LOOP Komutlar (LOOPE, LOONE) : LOOP komutu durma bal olabilir. Sk olarak kullanlan iki tane duruma bal LOOP komutu vardr. Bunlar: LOOPE ve LOOPNE komutlardr. LOOPE (LOOP while Equal) eit olduu srece evrim komutu, CX sfr deil ise ve bir eitlik durumu olmad srece, adresle belirtilen yere dallanr. CX sfr olduunda veya bayrak bitleri ile bir eitsizlik durumu belirtildiinde evrimden kar. LOOPNE (LOOP while Not Equal) eit olmad srece evrim komutu, CX sfr deil ise ve eitsizlik durumu olduu srece, adresle belirtilen yere dallanr. CX sfr olduunda veya bayrak bitleri ile bir eitlik durumu belirtildiinde evrimden kar. IV.5.3. Altprogramlar: Altprogram, hafzada bir kere yer aldktan sonra, bir programda birok kere kullanlr. Bu, hafza alanndan tasarruf salar ve altprogramlar ieren bir program yazmak daha az zaman ald iin programcl kolaylatrr. Altprogramn bir dezavantaj, altprogram ile ana program arasndaki parametre aktarmdaki ve altprogram arma (CALL) ve altprogramdan dn (RET) ilemlerindeki ek zaman kaybdr. Bir altprogram CALL komutu ile arlrken, yn (stack) hafza, CALL komutundan sonraki komutun adresini saklamada kullanlr. RET komutu ile, yndan okunan dn adresinden itibaren dn devam eder. Bir x86 Assembler program kullanrken alt program yazmann baz kurallar bulunmaktadr. rnein, Altprogram PROC direktifi ile balar ve ENDP direktifi ile biter. Bu, bir altprogram dier kodlardan ayrmay salar. Bu iki direktifiden nce altprogramn ad yazlr. PROC direktifini, altprogramn tipini belirten NEAR (segment ii) veya FAR (segmentler aras) direktifitakip eder. Aada NEAR ve FAR direktifini kullanan, iki rnek altprogram yaps verilmitir. rnek IV.17 ; SUB0 adnda NEAR altprogram yaps SUB0 PROC NEAR ; altprogram ad ve balangc ... RET SUB0 ENDP ; altprogram sonu

37

rnek IV.18

; SUB1 adnda FAR altprogram yaps SUB1 PROC FAR ; altprogram ad ve balangc ... RET SUB1 ENDP ; altprogram sonu

Yukardaki iki altprogram arasndaki fark, assembler tarafndan RET komutu iin retilen kodda bulunmaktadr. NEAR RET komutu C3H ilem kodu kullanr buna karn FAR RET komutu ise CBH ilem kodu kullanr. Yakn RET, yndan bir 16-bit say eker ve bunu alt programdan dnmek iin IP kaydedicisna yerletirir. Uzak RET ise, yndan bir 32-bit say eker ve bunu altprogramdan hafzann herhangi bir yerine dnmek iin IP ve CS kaydedicilarna yerletirir. .Birok program tarafndan kullanlacak (global) altprogramlar FAR olarak tanmlanmaldr. Bir grev tarafndan kullanlan altprogramlar, normalde NEAR olarak tanmlanr. CALL Komutu: CALL (arma) komutu program akn bir altprograma aktarr. Bu

komutun JMP komutundan fark, bir CALL komutu yrtlrken mikroilemci tarafndan otomatik olarak dn adresi ynda saklanr. Altprogram sonundaki RET komutuyla bu dn adresi yndan ekilir ve programda CALL komutundan sonraki komuta dnlm olur. Yakn CALL: Yakn CALL komutunda, 8086-80286da, ilk byte ilem kodundan ikinci ve nc bytelar, uzunluu 32K deiim adresi olup toplam 3-bytetr. 80386 st ilemciler, korumal modda altklarnda, 32-bit deiim kullanlarak 2G bytelk bir alan salar. Uzak CALL: Uzak CALL, 5-byte uzunluundadr ve ilem kodundan sonra dallanacak altprogramn IP ve CS adresleri komut iinde bulunur. FAR CALL komutu yrtlrken, dallanmadan nce, yna o anki IP ve CS yerletirilir. Bu sayede hafzann herhangi bir yerine yerletirilmi bir altprogram arlr. Kaydedici Operandl CALL: JMP komutunda olduu gibi, CALL da bir kaydedic bir operand olarak kullanabilir. rnein, CALL BX komutunda, nce o anki IP yna atlr. Daha sonra, BX kaydedicisndaki ofset adres, o anki kod segmentte bulunan bir altprogram arm iin IP adresi olarak alnr. Bu tip bir CALL komutunda, bir16-bit kaydedicida bulunan say 16bit ofset olarak kullanlr.

38

Dolayl Hafza Adresi Kullanan CALL: Bu tr bir altprogram arma, deiik altprogramlar bir parametreye gre seip armada yararldr. Aada verilen rnekte, 2 altprogramdan biri, DIdaki bir parametreye gre arlmaktadr. Altprogramlar, DIdaki 0 ve 1 saylarna gre belirtilmektedir. Eer, bu indisler 1den balasayd, programn banda DI kaydediciini 1 azaltmamz gerekecekti. Altprogram adresleri, TABLO adresinden itibaren 2byte aralklarla saklandndan, bu tabloya eriirken DI kaydedicisndaki indisin 2 kat alnr. CS: neki CALL komutundaki operandn nne gelmektedir. nk [BX+DI] ile CS alannda bulunan TABLOya eriilmektedir. rnek IV.19 ; alt program arma tablosu rnei ; Altprogram look-up tablosu

TABLO DW SUB0 DW SUB1 ; Altprogram arma komutlar ADD DI, DI

; DInn iki kat ; TABLOya iaret et

MOV BX, OFFSET TABLO CALL CS:[BX:DI]

; Alt program ar

SUB0 PROC NEAR ... RET SUB0 ENDP SUB1 PROC NEAR ... RET SUB1 ENDP CALL komutuyla uzak adreslerde kullanlabilir. Bu durumda CALL komutundan sonra FAR PTR kullanlr. rnein, CALL FAR PTR [SI] gibi. Bu durumda, DS alannda SI ile iaretli alandan 32-bit bir adres okunur ve bu adres FAR olarak tanml bir altprogram adresi olarak ilenir.

39

RET Komutu: Dn RET komutu, yn hafzadaki yakn dn iin 16-bit bir say

veya uzak dn iin 32-bit bir say eker. Bu sayy IP kaydedicisna (yakn dnte) ve IP ve CS kaydedicilarna (uzak dnte) yerletirir. NEAR ve FAR RET komutlar, altprogram tamamlanmasnda PROC direktifiyle belirlenir ve buna gre kullanlan assembler yakn ve uzak RET komutu iin ilem kodu retir. RET komutunun bir operand kullanan bir ekli daha vardr. Bu RET komutunda altprogramdan dnmeden nce SP ieriine RET komutundan sonra yazlan operand eklenir. Bu ilem, yndaki verinin geilmesi veya silinmesi anlamna gelir. rnein, aada verilen kod rneindeki altprograma girildikten sonraki iki PUSH ilemiyle yna iki tane 16-bit say yazlarak yn 4 byte bymtr. RET 4 komutu, SPye 4 ekleyerek bu 4 byten atlmasna neden olur. Bu ekilde RET komutuyla, bu altprogram aran CALL komutundan sonraki satra doru olarak dnm oluruz. rnek IV.20 TEST PROC NEAR PUSH AX PUSH BX ... RET 4 TEST ENDP Eer, bir altprogramda yaplan PUSH ve POPlarn says birbirine eit deil ise, bu ekilde bir RET komutu kullanlabilir. Yn hafzann, RET komutundan nce, dzgn olarak braklmas, yani ynn en stnde dn adresinin olmas gerekmektedir. Aksi durumda, altprogramdan dn istenmeyen bir hafza adresine olur.

IV.6.

Kesmelere Giri:

Kesme, bir donanm (bir harici donanm sinyalinden) veya yazlmn rettii (bir komut ile dahili olarak retilen) ilemidir. Her iki durumda da bir kesme hizmet program (Interrupt Service Routine - ISR) arlr. Kesmeler Blm VI. da ayrnl olarak aklanacaktr.

40

IV.7.

lemci Kontrol ve Dier Komutlar:

8086-80486 komut kmesindeki son grup, ilemci kontrol komutlar ile imdiye kadar olan gruplara girmeyen dier komutlardr. Bu komutlar elde bayran kontol, BUSY / TEST ucunu rnekleme, mikroilemciyi durdurma gibi fonksiyonlar salar. Elde Bayran Kontrol:(CLC, STC, CMC): Elde bayran uzun toplama ve karma

ilemlerinde kullanlr. Ayrca, bir altprogramdan dnerken, bir hata durumu veya baka bir durum, 1 veya 0 ile arlan program bildirmede boolean bayrak olarak ta kullanlr. Elde bayran (C) kontrol etmeye ynelik 3 tane komut bulunmaktadr. Bu komutlar: elde bayran 1le, STC (Set Carry); elde bayran temizle, CLC (Clear Carry); elde bayrann tersini al, CMC (Complement Carry). HLT: HLT komutu program yrtmesini durdurur. Bir durma ileminde kmak iin 3

yol vardr: bir kesme ile, bir donanm kesmesi veya bir DMA ilemi srasnda. Bu komut, normalde bir kesmeyi beklemek amacyla kullanlr. Harici donanm kesmeleri ile yazlm sistemini senkronize etmeye de yararldr. NOP: Mikroilemci NOP (No Operation ) komutuna rastlad zaman, bir ilem

yapmayp sadece ok ksa bir zaman harcar. Bu zaman, bu komutun hafzadan okunma (fetch) sresidir. Program gelitirilirken, bu komut ileride baka komutlarla deitirilmek zere, program aralarnda eitli yerlere konulabilir. Bu sayede NOP konulduu yerler, programcya eklerin yaplaca nemli noktalar hatrlatr. NOP komutu araclyla, yazlm gecikmeleri salamak amacyla sk olarak kullanlr. ESC: ESC (Escape) komutu, 8087-80387 nmerik ilemcisine mikroilemciden bilgi

aktarmada kullanlr. ESC komutu yrtldnde, mikroilemci, istenirse, bir hafza adresi salar, aksi durumda, bir NOP ilemi yapar.

41

V. ASSEMBLER DREKTFLER
V.1. Data Direktifleri

V.1.1. Sembol TanmlamaDirektifleri (EQU, = ) EQU : Bir yaz veya matematiksel ifadeyi bir isme kalc olarak atar.

Biim : isim EQU yaz sim EQU matematiksel ifade = : matematiksel bir ifadeyi bir isme atar,fakat isme yeni bir deer atanabilir.

Biim : isim=matematiksel_ifade Data direktiflerinde atanan ifade,16 bitlik bir sabit,adres,baka bir sembolik isim veya kaydedici ismi olabilir. rnek V.1. K EQU 247

TABLO EQU DS : [BP] [SI] HIZ SAYI EQU ORAN EQU CX

MAX.HIZ EQU 2*HIZ SABT SABT = 56 = SABT + 1

V.1.2. Data Tanmlama (DB, DW, DD) DB : Deiken tanmlar veya deikene ilk deer atar. DB, hafzada 1byte yer ayrr.

Biim : [isim] DB ifade [,] DW : DB ile ayn fakat hafzada 2 bytelk yer ayrr. DD : DB ile ayn fakat hafzada 4 bytelk yer ayrr. Pek ok program, deikenleri saklamak iin hafzada yer ayrr. DB (Define Byte) Byte tanmla,DW (Define Word) word tanmla, DD (Define Double Word), iki word tanmla direktifleri deikenler iin hafzada yer ayrr. Data tanmlama direktiflerinin genel biimi: [isim] DB ifade [,.] eklindedir. Burada kullanlan ifade deikenleri nasl tanmlamak istediinize bal olarak farkl ekillerde olabilir.

42

rnek V.2. (sabit olabilir) MAX_SAYI DB 255 MAX_SAYI DW 65535 DB -128 -32768

MAX_ISARETLI_SAYI

MAX_ISARETLI_SAYI_1 DW rnek V.3: (tablo olabilir) B_TABLO DB

0, 0, 0, 0, 1, 123, 46, -56 1025, 567, -3100, 300

W_TABLO DW

B1_TABLO DB 4 DUP(0), 1, 123, 46, -56 -Eer deikene bir balang deeri vermek istemiyorsak (?) kullanabiliriz. rnek V.4: MAX_SICAKLIK DB ? MAX_HIZ AYLIK_SATIS DW ? DB 30 DUP (?)

-DB direktifi karakter katarn (string) bir ifade olarak kabul eder. rnek V.5: MESAJ DB BIR SAYI GIRIN V.2. Segment - Prosedr Tanmlama Direktifleri (Segment, Ends, Assume, Proc, Endp) SEGMENT:Segmentin snrlarn tamnlar.Btn segment tanmlamalar ENDS ile

bitmelidir.SEGMENT ve ENDS direktifleri kaynak programlar segmentlere ayrr. Bir program drt eit segmente (data, kod, ekstra , yn) ayrlabilir. SEGMENT kaydedicisnn 3 adet operant vardr. Bunlar; Yerletirme Tipi (Align Type), Birletirme Tipi (Combine Type) ve snf (Class) dr. Biim : segment_ismi SEGMENT [Yerletirme_Tipi] [Birletirme Tipi] [Snf] ... ... segment_ismi ENDS

43

Yerletirme tipi : Segment hafzaya yklendiinde balang snr deerini belirtir.

BYTE : segmentin hafzada herhangi bir yerden balayabileceini belirtir. WORD : segmentin hafzada ift adres deerinden balayabileceini belirtir. PARA: segmentin hafzada 16 ya blnebilen adres deerinden balayabileceini belirtir. PAGE : segmentin hafzada 256 ya blnebilen adres deerinden balayabileceini belirtir.

Birleme Tipi: Segmentin dier egmentlere nasl birletirileeini gsterir. Data ve extra

segmentler PUBLIC veya COMMON olabilir. PUBLIC : segmentlerin st ste birleebileceini syler.

COMMON : segmentlerin iie yerletirileceini syler. STACK : Yn Segmenti (SS) mutlaka STACK tipinde olmaldr.

Snf Tipi : Hafzaya yklenecek segmentin srasn beliritir. Ayn snf ismine sahip

olan segmentler hafzaya birbiri ardna yklenirken, farkl snf ismine sahip olan segmentlerin hafzaya klenme biimini linker dzenler. rnek V.5.6 Data Segment Kod Segment : SEGMENT PARA PUBLIC DATA : SEGMENT PARA PUBLIC CODE

Ekstra Segment : SEGMENT PARA PUBLIC EXTRA Yn Segment : SEGMENT PARA PUBLIC STACK

rnek V.5.7: Bir data segmentin yaps DSEG SEGMENT PARA PUBLIC DATA A B DB ? DB

KARE DB 1,2,4,,8,16,32 DSEG ENDS

44

rnek V.5.8: Bir kod segmentin yaps CSEG SEGMENT PARA PUBLIC CODE CSEG ENDS ASSUME: SEGMENT ve ENDS direktifleri bir segmentin balang ve sonunu belirtir.

Fakat segmentin ne tr bir segment olduunu belirtmez. Segmentin ne tr bir segment olduunu belirtmek iin ASSUME direktifi kullanlr. ASSUME , Assemblera hangi segmentin hangi hangi segment kaydedicisna (CS,DS,ES) ait olduunu syler. NOTHING direktifi daha nce tanmlanm ASSUME direktifini iptal eder. Biim : ASSUME seg_reg :segment_ismi [,.] Seg_reg ; CS,DS,ES,SS olabilir. Segment_ismi ; SEGMENT direktifi ile tanmlanan isimdir. ASSUME direktifi, Assemblerin tanmlanan etiketleri adres deerine dntrmesini salar.ASSUME direktifi, kod segmetle SEGMENT tanmlanmasndan hemen sonra tanmlanmaldr. rnek.V.9 CSEG SEGMENT PARA PUBLIC CODE ASSUME CS:CSEG, DS:DSEG MOV AX, DESG MOV DS, AX NOT:Data ve Extra segment adreslerini kaydedicilar ayrca atamak gerekir. ASSUME komutu bu ilemi yapmaz. PROC Assemblera bir prosedr tanmlandn belirtir. Btn PROC tanmlamalar

mutlaka ENDP direktifi ile bitmelidir. Biim : prosedr_ismi PROC [NEAR] veya isim PROC [FAR] .. RET prosedr_ismi ENDP Bir prosedrn iki operand vardr. Bunlar NEAR ve FAR dr. Eer bu operand yazlmazsa, macroassembler bunu NEAR sayar. NEAR olarak tanmlanm prosedrler sadece

45

tanmlandklar kod segment kaydedicis iine arlabilir. FAR prosedrler baka bir kod segment iinden arlabilir. rnek.V.10 : CSEG SEGMENT PARA PUBLIC CODE ASSUME CS:CSEG ANA PROC FAR .... .... CALL ALT_1 .... .... RET ANA ALT_1 ENDP

olarak tanmlanm

CSEG

PROC NEAR .... RET ALT_1 ENDP ENDS

Mikroilemci bir prosedr ardnda, geri dn adresini yna atar. Eer prosedr FAR olarak tanmlanmsa yna segment ve offset (CS:IP) adres deerleri atanr. Eer prosedr NEAR olarak tanmlanmsa yna sadece offset (IP) adres deeri atanr. RET komutunda ise yna atlan bu adres deerleri (prosedrn NEAR veya FAR olarak tanmlandna bal olarak ) CS=IP ye geri yklenir. Bir prosedrn operandlar tanmlanrken aadaki kurallar hatrlanmaldr. 1-) .EXE tr programlar iin ana prosedr FAR olmaldr. .COM tr programlar iin NEAR olmaldr. 2-) Eer btn kod segmentlerin ismi ayn ise btn prosedrler , (ana prosedr haricinde) NEAR olmaldr. V.3. Assembler Kontrol : END : Kaynak programn sonunu gsterir. END [Program_balang_noktas]

Biim :

46

EVEN : Programn balangcnn adresinin ift deerde olmasn salar. EVEN

Biim :

ORG: fadenin balang deerinin gsterir. ORG direktifi, komut veya ifadenin hafzada

belli bir yerde saklanmasn salar. ounlukla .COM tipi programlarda kullanlr. Biim : ORG ifade ORG 100H

rnek.V.11:

END: direktifi programn sonunu gsterir. Bundan dolay her programn sonunda END direktifi bulunmaldr. Buradaki balang noktas DOSun program

mutlaka

altrmaya balad adrestir. Biim: END Balang

V.4. Mode Direktifleri Macro Assembler, Intel 80x86 ailesi ilemcilerinde kullanlmak amacyla tasarlanmtr. Intel 80x86 ielmcileri birbirleri ile geriye doru uyumludurlar fakat 8086 dan sonra her yeni ilemcide yeni komutlar eklenmitir.Eer Macro Assembler programnda 8086komut kmesinden farkl istemcinin (rnek 80286, 80386) komut kmesi kullanlmsa, bu programn ilk banda tanmlanmaldr. rnek.V.12: .8086 .80286 : Tanmlamaya gerek yok : 80286 gerek mod

.80286 P : 80286 korunmu mod. .8087 V.5. Operatrler Operatrler, operand alannda ve operant deitirmek amacyla kullanlr. 5 eit operatr vardr. Bunlar matematiksel,mantksal,ilikisel, deer geri dndren ve znitelik operatrleridir. Ksaca tablo halinde aada verilmitir. Matematiksel : + Biim Deger 1 + Deger 2 (Deger 1 ve Deger 2yi toplar.) - Biim Deger 1 - Deger 2 (Deger 1 den Deger 2yi karr.) * Biim Deger 1 * Deger 2 (Deger 1 ile Deger 2 arplr.) : 8087 matematik ilemci

47

/ Biim Deger 1 / Deger 2 (Deger 1i Deger 2ye bler; blm deerini verir.) MOD Biim Deger1 MOD Deger 2 (Deger1i Deger2ye bler. Kalan deerini verir.)

SHL Biim Deger1 SHL Deger 2 (Deeri,belirtilen ifade kadar bit pozisyonunda sola

kaydrr.) SHR Biim Deger 1 SHR Deger 2 (Deeri,belirtilen ifade kadar bit pozisyonunda saa

kaydrr.) rnek.V.13: PI EQU 22/7

MASKE EQU 110010 B MASKE_SOL_2 MASKE_SAG_2 EQU MASK SHL 2 EQU MASK SHR 2

Mantksal : AND Biim Deger 1 AND Deger 2 (Deger 1 ve Deger 2 arasnda mantksal AND

ilemi yapar.) OR Biim Deger 1 OR Deger 2 (Deger 1 ve Deger 2 arasnda mantksal OR ilemi

yapar.) XOR Biim Deger 1 XOR Deger 2 (Deger 1 ve Deger 2 arasnda mantksal XOR

ilemi yapar.) NOT Biim NOT Deger (Degerin 1e gre deilini alr.) DEGER EQ 10111010 B DEGER EQ 00001111 B

rnek.V.14 :

MASKE_VE_DEGER EQU DEGER AND MASKE

likisel : EQ Biim operand 1 EQ operand 2 (Her iki operand birbirine eit ise doru.) NE Biim operand 1 NE operand 2 (Her iki operand birbirine eit ise doru.) LT Biim operand 1 LT operand 2 (Operand 1 operand 2den kk ise doru.)

48

GT Biim operand 1 GT operand 2 (Operan 1 operand 2den byk ise doru.) GE Biim operand 1 GE operand 2 (Operand 1,operand 2den byk veya eit ise

doru.) LE Biim operand 1 LE operand 2 (operand 1, operand 2 den kk veya eitse

doru.) Deer Geri Dndren : $ Biim $ (O anki adresin deerini geri dndrr.) SEG Biim SEG degisken veya SEG etiket (Degiken veya etiketin segment adres

deerini geri dndrr.) OFFSET Biim OFFSET degisken veya OFFSET etiket (Degisken veya etiketin

offset adres deerini geri dndrr.) rnek V.15 : MESAJ DB Herhangi Bir Tusa Basn.

MESAJ_DEGER EQU $ MESAJ rnek.V.16 : TABLO DB 100 DUP (0) MOV AX, SEG TABLO MOV BX, OFFSET TABLO znitelik : PTR Biim Tip PTR ifade (fadenin, daha nce tanmlanan znitelii tip ile

tanmlanan yeni znitelie dntrr. Bu znitelikler (BYTE, WORD) gibi tip gsteren veya (NEAR, FAR) gibi mesafegsteren operandlar olabilir ) SHORT Biim JMP SHORT etiket (Jmp koomutunun +/- 127 snrlar iinde olmas

salanr.) rnek V.17 : WORD_TABLO ILK_BYTE DW 100 DUP (?) EQU BYTE PTR WORD_TABLO

BESNC_BYTE EQU ILK_BYTE + 4

49

VI. MAKROLAR:
Bir makro program iinde birka kere grnen assembler ifadesi (talimatlar ve direktifler) dizisidir. Prosedrlerde olduu gibi, makronun da ismi vardr. Makrolar ve prosedrlerin her ikiside ksa, kullanm kolay talimat dizisini desteklersede, ancak bunlar ayn deildir. Kod prosedr iin bir kere meydana gelir ve ilemci kodu zorunlu olarak transfer eder. Aksine, makro iin program iinde birka defa meydana gelebilir. Her meydana geliinde makro ile assembler yerini deitirir. (yani assembler makroyu geniletir). Bylelikle; program altrdmzda, prosedrm gibi ilemci makro talimatn hatta bellein baka bir yerine aktarmadan altrr. Bir makro ismi kullanc-tanml bir assembler direktifidir. Makrolar prosedrlere gre 3 avantaja sahiptir. Makrolar dinamiktir. Giri parametrelerini deitirerek kolayca makronun iletimini (yalnzca o an ilettiini) her zaman deitirebilirsiniz. Makrolar programlar hzl alr yapar..Makrolar programclarn dier programlarda yaratm olduklarndan ekmek iin makro ktphanesine girebilirsiniz. (*.mlb, *.lib) Makrolar bir kere yarattnzda programn istediniz yerinde kullandnz zaman programlamay hzlandrr. Makrolarn erii: Her makro tanm 3 blmden oluur. Balk: MAKRO direktifi etiket alannda makronun ismiyledir ve seimlik olarak operand alannda bir parametre listesidir. parametre listesi sizin her zaman makroyla aracanz girdi parametrelerini ve deikenleri belirtir. Gvde: Assembler talimatlar dizisi (talimatlar ve direktifler) makronun ne yapacan tanmlar. Sonlandrc: ENDM direktifi, makro tanmn bitiren iaret. ENDMyi atlarsanz, assembler hata mesaj gsterir. End of file encountered on input file rnek VI.1 ADD_WORKS MAKRO TERM1, TERM2, SUM MOV AX, TERM1 ADD AX, TERM2 MOV SUM, AX ENDM

50

VI.1 Makro Direktifleri: Genel-Amal Direktifler: MACRO Biim: isim MACRO [parametre listesi]

Bu makronun ismini verir, makronun kulland operand isimlerini listeler. EXITM Biim: EXITM

Bir makroyu sonlandrr. LOCAL Biim: LOCAL parametre listesi Eer sizing makronuz etiketli talimatlar ya

da direktifler ieriyorsa assemblera her zaman etiketleri deitirmesini sylemelisiniz. Bu makroyu geniletir. Aksi halde, Symbol is Multi-Defined hatasyla karlarsnz. LOCAL direktifi assemblera her zaman hangi etiketi deitireceini syler. rnein, Aadaki makroda (WAIT) makro ilemciyi COUNT deerine kadar bekletir. Taki 0a dene kadar. rnek VI.2 NEXT LOCAL etiketi program iinde birkezden fazla kullanmamza izin verir. WAIT MACRO COUNT LOCAL NEXT PUSH MOV NEXT: CX CX, COUNT

LOOP NEXT POP ENDM CX

Not: LOCAL kesinlikle MACRO talimat takip eder. Eer LOCAL kullanlmsa makroda ilk direktif olmaldr.. Dng Direktifleri: REPT, IRP ve IRPC direktifler assemblera makro iine assembler talimat dizilerinin dnmesini salar. Biim: REPT aklama

VI.2. Kaynak Programn inde Makro Tanmlamak: Makro kullanmann iki yolu vardr. Ya dorudan tanmlamalar program iine girersiniz. Ya da birka makro ktphanesinden okutursunuz. Bu blmde biz program iine nasl makro 51

gireceinizi tanmlayacaz. zel amal makronuz varsa yalnz bir programn iinde tanmlayabilirsiniz. rnek VI.3 SHOW MACRO karakter PUSH AX PUSH DX MOV AH, 2 MOV DL, karakter INT POP POP ENDM VI.3 Makro Ktphaneleri: Bir makro ktphanesi birka programda ihtiya duyacanz. Tanmlamalar ieren bir disk dosyasdr. lk kez bu dosyay yarattnzda birka kaynak programn iinde bunu okutabilirsiniz. Ayn isimle baka yerlerde de kullanabilirsiniz. Bir kaynak programn iine bir makro ktphanesi okutmak iin assemblera INCLUE talimatyla bir isim vermelisiniz. INCLUDE MACRO.LIB Dngden kanmak iin INCLUDEu bir IF1 artl talimat iine koyarsnz. IF1 INCLUDE ENDIF MACRO.LIB 21H DX AX

VI.4 Nesne Ktphaneleri: Daha nce makro ktphanelerinin nasl yaratlacandan bahsettik. Bir ktphanede birka makro kullanmak basite programnzn iine INCLUDE ile tm kitapl alabilirsiniz. Bylece makro ktphaneleri her programda gerektii yerde sizi yeniden yazmaktan kurtarr. Makro Assembler program modlleri iin banzer olanaklar destekler. zellikle nesne ktphaneleri yaratmanza izin verir. Nesne ktphanesi iinde birka prosedr kullnamak iin prosedr 52

CALL ile arp dsal olarak (EXTRN direktifiyle) bildirebilirsiniz. Sonra link olayn ardnzda ktphaneyi program modlyle link edersiniz. Link edici kendiliinden arlm prosedr aacaktr. gereken modl aar. Nesne Ktphaneleri Yapmak: Assembler diskinde nesne ktphanelerini tutan program LIB.EXE (Ktphane Yneticisi) dir. Bir nesne ktphanesi yaratmak iin LIB yazmal ve ktphanenin iine komak istediiniz. lk nesne modln belirtmelisiniz. LIB.EXE kendiliinden LIB ve OBJ uzantlarn ktphane ve nesne modl ismi iin destekler. rnein: lk girite nesne.lib ile siralama.obj isimli ktphane yaratmak iin unu girin; c : lib nesne + siralama ; Bir nesne ktphanesinin diske bir prosedr olarak kaydedileceini hatrlamalsnz. Link komutuyla bir ktphane program arl ve link arac

53

VII. KESMELER (interrupt)


Bu blmde kesmelerin almas ve komutlar incelenecektir. Ayrca Baz BIOS ve DOS kesmeleri aklanacaktr. BIOS ve DOS Kesmelerinin geni bir listesi EK-2 de bulunabilir. Kesmeler, ilemcinin o anda altrmakta olduu koda ara vererek baka bir kodu altrmas durumudur. ntel ilemcilerinde kesmeleri grupta incelenebilir Kesmeler

Yazlm Kesmeleri (Software Interrupts)

Donanm Kesmeleri (Hardware Interrupts)

sel Kesmeler (Exceptions)

Yazlm kesmeleri (software nterrupts): Bunlar programcnn INT makina komutuyla programa dahil ettii kesmelerdir. Yazlm kesmelerinin ilevsel olarak CALL makina komutundan byk bir fark yoktur. Donanm kesmeleri (hardware nterrupts): Donanm kesmeleri dsal bir birim tarafndan ilemcinin INT ucunun uyarlmasyla arlrlar. Donanm aygtlarndan herhangi biri, CPUnun kontrolne ihtiya duyduunda, interrupt olarak isimlendirilen bir sinyal veya bir komut mikroilemciye gnderilir. CPUya gnderilen interrupt, CPU dan istenilen iin ne oIduunu da belirlemektedir. nterrupt sinyalleri aracl ile CPU dan istenen i, interrupt rutinleri olarak isimlendirilen alt programlar tarafndan yerine getirilir. ntel mikroilemcilerinde 2 farkl trde donanm kesme girii vardr. Bunlar; nlenebilir kesme (Interrupt ReQuest-IRQ) IRQ; eer mikroilemcideki I bayra (kesme bayra) mantksal 0 ise, ilemci o anda iledii komutu bitirdikten sonra bu kesme talebine cevap verir. I bayra (kesme bayra) mantksal 1 ise, mikroilemci bu kesmeyi ihmal eder ve iine devam eder. Intel tabanl PC mimarisinde toplam 15 ayr dsal kesme tanmlanabilmektedir. (Bu dsal kesmeler IRQ diye de isimlendirilir.) Bu dsal kesme birimleriyle ilemci arasndaki iletiimi kesme denetleyicisi (8259-Programmable Interrupt Controller) diye isimlendirilen baka bir ilemci kurar. Dsal kesmelerin ou tasarmsal olarak belli birimlere atanmtr. nlenemez kesme (Non Maskable Interrupt-NMI). NMI; hibir zaman kesme bayrana bal deildir. Her nezaman NMI kesme talebi gelirse ilemci o andaki iini brakarak kesmeye cevap verir. Yani programc tarafndan bu kesme nlenemez. sel kesmeler (exception): lemcinin bir makina komutunu altrrken problemle karlamas sonucu kendisinin ard kesmelerdir. rnein; ilemci DIV komutunu altrrken blen deerin sfr olduunu grrse OOH numaral sfra blme (divide by zero) 54

kesmesini arr. VII.1 Kesme Vektrleri: Kesme vektr, mikroilemci gerek modda alrken, hafzann ilk 1024 bytelk alannda (003FFH-00000H) sakl olan 4-byte bir adrestir. Her bir kesme vektr, bir kesme hizmet programnn adresini oluturan bir IP ve CS ierir. lk 2 byte IP ve son 2 byte CS adresidir. 256 tane farkl kesme vektr bulunur. Her vektr, kesme ile arlar bir kesme hizmet programnn adresini tutar. Tablo.6.1, aklamalaryla beraber, kesme vektrlerini ve gerek modda her vektre kar gelen adresleri gstermektedir. Kesme vektrlerden bazlar, blme hatas gibi, program yrtme srasnda oluan hatalar iindir. Bazlar yardmc ilemci iin ayrlmtr. Dierleri sistemdeki dier durumlar ve korumal modda almada oluan hatalar iindir.
Tablo.6.1. Kesme Vektrleri

Kesme no 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19-31 32-255

Adres 0H-3H 4H-7H 8H-BH CH-FH 10H-13H 14H-17H 18H-1BH 1CH-1FH 20H-23H 24H-27H 28H-2BH 2CH-2FH 30H-33H 34H-37H 38H-3BH 3CH-3FH 40H-43H 44H-47H 48H-4FH 50H-7HH 80H-3FFH

Mikroilemci Btn Btn Btn Btn Btn 80186-Pentium 80186-Pentium 80186-Pentium 80386-Pentium 80386 80386-Pentium 80386-Pentium 80386-Pentium 80386-Pentium 80386-Pentium ---80286-Pentium 80486SX Pentium ---Btn

lev Blme hatas Tek adm NMI Durma noktas Tama kesmesi BOUND kesmesi Geersiz ilem kodu
Yardmc ilemci (emulation) kesmesi

ift hatas (Double fault)


Yardmc ilemci segment overrun

Geersiz durum segmenti Segment mevcut deil Yn hatas Genel koruma hatas Sayfa hatas Ayrlm* Kayan-nokta hatas
Ayarlama (alignment) kontrol kesmesi

Makine kontrol Ayrlm* Kullanc kesmeleri

55

VII.2 Kesmelerin almas Her kesmenin 0dan 255e kadar deien bir kod numaras vardr ve her kesmeye karlk gelen bir kesme rutini bulunmaktadr. Interrupt rutinlerinin segment ve offset adresleri 4 bytelk bilgiler halinde ve srasyla bellein dk seviyeli adreslerinde yer almaktadr. Her kesme 4 bayt alan kaplad iin toplam 256X4 bayt alan kesmelere ayrlr. Kesmelerin yerletii bu alana kesme vektr ya da kesme vektr tablosu denir. Programclar bellekte yer alan bu vektr tablosunu deitirebilirler.Vektr tablosu, bilgisayar ilk balatldnda BIOS tarafndan ROM bellee yklenir. 0000:000H [kesme ileyicisinin adresi] 0000:004H [kesme ileyicisinin adresi] .................... Kesme ileyicisi (interrupt handler) bir kesmeyi kesim segment ve offset adreslerini (CS ve IP) yazma ifti ile adresler. Bu yazma ifti u ekilde gsterilir; CS:IP bir interrupt rutinin adresinin bulunduu yeri elde etmek iin, interrupt numaras ile 4 saysn arpmak yeterli olacaktr. rnein 12 numaral kesme u adreste yer alr:

0000:0048 Kesmelerin tanm olarak program dillerindeki fonksiyon arlmalarna benzerler fakat olu biimi asndan farkllklar vardr.Kesmeler, saat ve tarih ayarlamalar, hoparlrn kontrol, seri veya paralel balant birimlerine (port) eriim, klavye, ekran, disket veya disk ile ilgili ilemler, video modunu deitirme, imlecin grnm, fare kullanm, a kontrol, bellek ynetimi, cd-rom kontrol ve dos fonksiyonlar gibi birok alanda kullanlabilir. Temel donanm kesmeleri olan BIOS (Basic lnput-Output System / Temel Giri-k Sistemi) kesmeleri bilinen bir BIOS devresinde yani ROM bellekte yer alr. DOS kesmeleri ise yklenen iletim sistemi dosyalar ile ana bellee yklenir.

56

VII.3 Kesme Komutlar: 8086-80486 farkl kesme komutuna sahiptir. INT, INTO ve INT3. Gerek modda, bu komutlardan her biri, vektr tablosundan bir vektr okur ve sonra bu vektrle adreslenen kesme hizmet programn arr. Korumal modda bu komutlardan her biri kesme tanmlayc tablosundan bir kesme tanmlaycs okur. Bu okunan tanmlayc hizmet programn belirtir. Kesme arma, uzak CALL komutuna benzer; nk dn adresi (IP/EIP ve CS) yna yerletirilir. INT Komutu: Programcnn kullanabilecei 256 tane farkl yazlm kesme komutu (INT) bulunmaktadr. Her INT komutu, 2-byte uzunluunda olup deeri 0 ile 255 (FFH-00H) arasnda deien bir nmerik operanda sahiptir. lk byte ilem kodu, ikinci byte vektr tipi numarasdr. INT komutu kendisine verilen kesmeyi bellekte yer alan kesme vektr tablosundan bulur ve mikroilemciye yollar. Kesmenin aktifletirilmesinden nce bayrak yazmalar dzenlenir. INT komutu icra grdnde, aadaki ilemler gerekleir; 1. Flag kaydedicii stack zerine atlr. 2. Trap bayra reset edilir. 3. Interrupt bayra reset edilir. 4. CS kaydedicii stack zerine atlr. 5. INT komutu ile kullanlan interrupt numaras, 4 says ile arplr ve x olarak kabul edeceimiz bir deer elde edilir. 6. 0000 Segmentinin X nolu offsetinde yer alan ikinci word, CS kaydediciine aktarlr. 7. IP kaydedicii stack zerine atlrr 8. X nolu offsetde yer alan ilk word IP kaydediciine aktarlr. Yukardaki aamalar tamamlandktan sonra, arlan interrupt rutininin segment ve oftset adresleri, CS ve IP kaydedicilerine aktarlm durumdadr. 0 halde bu aamalardan sonraki ilemler. interrupt rutinini oluturan komutlarn icras ile srecektir. lnterrupt rutinleri ierisinde, eitli kaydediciler zerinde ilemler yaplp, bu kaydedicilerin orijinal deerleri deitirilebilmektedir. Ancak mevcut interrupt rutinIerinin tm, zerinde deer deiiklii yapaca kaydedicileri ilemler ncesinde stack zerine push etmekte ve rutinin icras sona ererken kaydedicilerin orijinal deerlerini stack zerinden tekrar pop etmektedir. Baz interrupt rutinleri, bir fonksiyon gibi, eitli deerlerin elde edilmesi amacyla kullanlmakta ve bu deerleri kaydediciler aracl ile rutin dna getirmektedir. Byle bir durumda deer tamak iin kullanlan kaydedicilerin orijinal deerleri korunmayacaktr. 57

IRET Komutu: IRET komutu bir kesme yordamnn sona ermesini salar ve bir 1- IP kaydediciinin eski deeri, stack zerinden ekilir. 2- CS kaydediciinin eski deeri, stack zerinden ekilir. 3- Flag kaydediciinin eski deeri, stack zerinden ekilir.

operanda sahip deildir. IRET komutu icra grdnde, aadaki ilemler yerine getirilir:

INTO Komutu: Bir operanda sahip olmayan INTO komutu, 4 nolu interrupt rutininin

koullu olarak arlmasnda kullanlr. Bu nedenle de, daha ok, aritmetiksel ilem komutlarnn hemen sonrasnda yer alr. INTO komutu icra grd zaman, overflow flagnn durumu test edilir, bir nceki aritmetiksel ilem, overflow flagn set etmi ise, NTO komutunun kontrol ettii koul doru olur ve 4 nolu interrupt rutini arlr. Normal olarak, bu interrupt rutininden dn yoktur. 4 Nolu interrupt rutini, Overflow mesajn ekranda grntleyerek icra aknn iletim sistemine gemesine ve sistem komut satrn dnlmesine sebep olur. Ancak, DOS iletim sisteminin son versionlarnda, 4 nolu interrupt rutini, sadece IRET komutundan olumaktadr. Dier bir deyile overflow hatalarnn kontrol programclara ya da derleyicilere braklmtr. STI ve CLI Komutlar: STI (kesme bayran 1 yapar) ve CTI (komutu ise bayrak deerini 0 deeri yapar) komutlar kesme bayrann (interrupt flag) dzenlenmesinde kullanlrlar VII.4 Kesme Hizmet Program: Bir kesme kesme altprogramnn tanmlanmas daha nce verilen, bir alt program yazma ilemi gibidir. Tek fark, altprogramda kullanlan RET komutunun yerine, kesme hizmet programnda IRET komutunun kullanlmas ve bu kesme alt programnn adresinin, programn banda ilk ilemler yaplrken, kesme tablosunda yerletirilmesidir. Aada bir kesme hizmet programnn genel erevesi verilmitir. rnek VII.1 INTS PROC FAR ... RET 4 INTS ENDP

58

VII.5 PClerde kullanlan kesmeler alt programlar Bilgisayarlarda kullandmz kesme alt programlar 2 ana gruba ayrlr. BIOS kesmeleri ve DOS kesmeleri. Aada bu kesmelerden bazlarnn ksa bir zeti verilmitir.

VII.5.1 ROM-BIOS kesmeleri INT 00H (Divide by Zero) Donanm sistemde bir sfra bl oluumunda bu interrupt arr ve Divide Overflow mesajn verir. Sfra (0) blnmeyi kontrol altna alr.Mikroilemci DIV ve IDIV komutlarnn ardndan bu kesmeyi otomatik olarak iletir. Aritmetik ilemlerde yaplacak hatalar bu kesmeyi dourabilir. O nedenle blme ilemi dikkatli yaplmaldr. INT 01H (Single Step) Bir programn komutlarn birer birer altrmas

istendiinde kullanlr. Tuzak bayrann (Trap flag) kontroln yapar. Her bir komutun iletilmesinden sonra bu kesme oluturulur. Ve tuzak bayra (Trap flag) 0 yaplr. Tek-ilem kesmesi iletildikten sonra bayraklarn deeri saklanr tek-adm (single step) ilemi srdrlr.DEBUG ve hata bulma ilemlerinde kullanlr. INT 02H hatalar (Non-maskable interrrupt) BIOS donanmnda bir I-O parity hatas nedeniyle oluur.Non-maskable

bulunduunda bu interrupt ile mikroilem ipini uyarr. nne geilemeyecek bellek ya da elektriksel interrrupt (NMI) pasif duruma drlemeyen bir kesmedir.Yalnzca bu kesme, CLI (Clear Interrupt) komutu ile pasifletirilemez. INT 03H (Breakpoint) Duru noktas interrupt. DEBUG program iinde

altrlan bir .EXE veya .COM kodu bu interrrupta gelince durur. Programda durma noktasnn (breakpoint) kontroln yapar.Program hatalarnn dzeltilmesinde kullanlr. Program dzelten programc ya da program bu kesmeyi kullanarak durma noktalarn belirler. INT 04H (Overflow errors) INTO (INTerrupt on Overflow ) assembly komutu

kullanlmsa ve flag kaydediciinde Overflow aktif konuma gemise bu nterrupt devreye girer. Tamay (overflow) kontrol eder. Aritmetik ilemlerde tamann kontrolnde kullanlr. Tama bayrann (overflow flag) 1 olmas durumunda karlalr. Aritmetik ilemleri ok olan programlarda kullanlr. Aritmetik ilemlerin ardndan INTO komutu ile aritmetik tama test edilir

59

INT 10h VDEO BIOS KESMELER

Bu kesme, ekran, grnt ve imle ile ilgili ok sayda fonksiyona sahiptir.Bu fonsiyonlardan bazlar: 00H 01H 02H 03H 05H 06H 07H 08H 09H 0AH 0BH 0CH 0DH 0FH Grnt modu mle boyutu mlecin konumu mle konumu ve boyutlar Aktif Grnt Sayfas Yukar kaydrma Aa kaydrma Imlecin bulunduu karakter Karakter grntleme Karakter grntleme Renk Dzenleme Grnt elemann grntleme Grnt elemannn bilgisi Mevcut Grnt modu

INT 14 h

(Serial Port Services) Seri port servisleri. (Keyboard Services) Klavye servisleriKlavyeden dnen deer ve (Printer Services) Yazc servisleriYazcya karakter yollamak ya da (Reboot Computer) Bilgisayar batan a.

Bu kesme ve servisleri seri k dzenler. Deiik bir deyile iletiim kapsn dzenler. INT 16 h klavyenin durumu hakknda bilgi verir. INT 17 h yazcnn durumu ile ilgili ilevleri vardr. INT 19 h lk ykleme (boot) ilemini balatr.Bu kesme disk ya da disketin balang blmnde bulunan ilk ykleyici program arr.Bu kesme Ctrl+Alt+Del tularna birlikte baslarak salanan balatmann kart deildir.Bu kesme sistemin al ile ilgilidir. INT 1Bh (BIOS Control-Break Signal) BIOSun Ctrl-Break sinyali trl+Break

tularnn birlikte kullanmyla oluan durumu kontrol eder.Bu sistem bir bayrak deeri

60

VII.5.2 DOS KESMELER 20H (Program bitir) Bu kesme mevcut ilenen program bitirip kontrol onu aran programa verir. Kesme ayn zamanda ak olan btn dosyalar kapatr ve ara bellek (buffer) alanlarn temizler. MS-DOS iletim sistemi varsaym olarak program kesiminde (Program Segment Prefix / PSP) 80H offsetinde 128 baytlk bir disk transfer adresini oluturur. PSP (Program Segment Prefix / Program Kesim neki) ise bellekte koan programlar kontrol eden ve programn hemen arkasnda yer alan bir bilgidir. DS ve ES yazmalar PSP'nin balang noktasn belirtirler. 21 H (DOS fonksiyonlarn arma) Bu kesme yaklak yz adet DOS fonksiyonunu armak iin kullanlr. Fonksiyonlarn her biri nce belli yazmalara yklenir (cuunlula AH, veya AX) ve ardndan bu kesme ile o fonksiyon arlr. Bu fonksiyonlardan bazlar syledir; 00H Program bitir 02H Karakter grntle 04H klara bilgi yollar 06H Ekrandan giri/k 08H Klavyeden bilgi okuma 0AH Klavyeden bilgi okuma 0CH Klavye ara bellei temizleme 0EH Src seme 10H Dosya kapatma 12H Dosya arama (bir sonraki) 14H Sral okuma 16H Dosya yaratma 01H Klavyeden karakter oku 03H klardan bilgi bekler 05H Karakter yazar 07H Ekrandan giri 09H Dizgi (string) grntleme 0BH Klavye durumu 0DH Diski balatma 0FH Dosya ama 11H Dosya arama (ilk) 13H Dosya silme 15H Sral yazma 17H Dosyann adn deitirme

61

EK I ASSEMBLER KOMUTLARININ LSTES


AAA - Ascii Adjust for Addition ( ASCII Toplama in Ayarla ) Kullanm : AAA Deitirdii Bayraklar: AF CF (OF,PF,SF,ZF tanmsz) AL nin ieriini geerli bir ondalk sayya evirir. Yksek deerli drtl sfrlar. operandlar yok Byklk (Byte) 1

AAD -Ascii Adjust for Division ( ASCII Blme in Ayarla ) Kullanm : AAD Deitirdii Bayraklar: SF ZF PF (AF,CF,OF tanmsz) Ondalk saylarn blnmesinden nce kullanlr.AH ' 10 ile arpar ve sonucu AL 'ye ekler. AH' sfrlar. operandlar yok Byklk (Byte) 2

AAM- Ascii Adjust for Multiplication ( ASCII arpma in Ayarla ) Kullanm : AAM Deitirdii Bayraklar:PF SF ZF (AF,CF,OF tanmsz) ki ondalk saynn arplmasndan sonra kullanlr.Bu komut kullanlmadan nce her byte'n yksek deerlikli drtl sfrlanm olmas gerekir. operandlar yok Byklk (Byte) 2

AAS- Ascii Adjust for Substraction ( ASCII kartma iin ayarlar ) Kullanm : AAS Deitirdii Bayraklar: AF CF(OF,PF,SF,ZF tanmsz) AL iindeki ,nceki ondalk say kartmasnn sonucunu dzeltir. Yksek deerlikli drtlk' sfrlar. operandlar yok ADC -Add with Carry ( Eldeli Toplama ) Kullanm : ADC hedef,kaynak Deitirdii Bayraklar:AF CF OF SF PF ZF ki binary operand toplayarak sonucu hedefe yerletirir. Eer CF =1 ise , hedefe 1 eklenir. 62 Byklk (Byte) 1

operandlar reg,reg hafza,reg reg,hafza

Byklk (Byte) 2 2-4 2-4

operandlar reg,ncel hafza,ncel Accum,ncel

Byklk (Byte) 3-4 3-6 2-3

ADD -Arithmetic Addition ( Aritmetik Toplama ) Kullanm : ADD hedef,kaynak Deitirdii Bayraklar: AF CF OF PF SF ZF Hedefi, kaynaa ekler ve hedefin orijinal ieriiyle deitirir. ki operand da binary dir. operandlar reg,reg hafza,reg reg,hafza Byklk (Byte) 2 2-4 2-4 operandlar reg,ncel hafza,ncel Accum,ncel Byklk (Byte) 3-4 3-6 2-3

AND -Logical And ( Mantksal Ve ) Kullanm : AND hedef, kaynak Deitirdii Bayraklar:CF OF PF SF ZF (AF tanmsz) ki operanda, mantksal ve ilemi gerekletirerek hedefi sonula deitirir. operandlar reg,reg hafza,reg reg,hafza Byklk (Byte) 2 2-4 2-4 operandlar reg,ncel hafza,ncel Accum,ncel Byklk (Byte) 3-4 3-6 2-3

CALL-Procedure Call ( Alt Program ar ) Kullanm : CALL hedef Deitirdii Bayraklar:hibiri IP' (komut gstergeci) yn'a iterek , hedef adresi IP ye ykler. Kod CS:IP de grevine devam eder. operandlar reg16 (near,IPbal) reg16(near,kaydedici dolayl) ptr16:16 (far,fullptr) m16:16 (far,dolayl)

63

CBW -Convert Byte to Word ( Byte' Word'e Deitir ) Kullanm :CBW Deitirdii Bayraklar:hibiri AL nin iaretini AH kaydediciina doru genileterek ; AL iindeki byte' , AX iinde word'e evirir. operandlar yok CLC -Clear Carry ( Elde'i Sil ) Kullanm : CLC Deitirdii Bayraklar: CF Elde (CF=0) bayran temizler. operandlar yok Byklk (Byte) 1 Byklk (Byte) 1

CLD-ClearDirectionFlag ( Yn Bayran Sil ) Kullanm : CLD Deitirdii Bayraklar: DF Yn bayran temizleyerek (DF=0) karakter katar komutlarnn; SI ve DI index kaydedicilarnn ieriinin arttrmasna neden olur. operandlar yok Byklk (Byte) 1

CLI-Clear Interrupt Flag (disable) (Kesilim Bayran Sil)(engelle) Kullanm : CLI Deitirdii Bayraklar: IF Kesilim bayran temizleyerek (IF=0) maskelenebilir donanm interruptlarn engeller. NMI ve yazlm interruptlar engellenemez. Operandlar yok Kullanm : CMC Deitirdii Bayraklar: CF Elde bayran tersyz eder. Operandlar Yok Byklk (Byte) 1 Byklk (Byte) 1

CMC -Complement Carry Flag (Elde Bayrann Tersini Al )

64

CMP -Compare ( Karlatr ) Kullanm : CMP hedef,kaynak Deitirdii Bayraklar:AF CF OF PF SF ZF Hedeften kayna karr ve bayraklar gnceller fakat sonucu saklamaz.Bayraklar sonradan durumlarna gre kontrol edilir. operandlar reg,reg hafza,reg reg,hafza Byklk (Byte) 2 2-4 2-4 operandlar reg,ncel hafza,ncel Accum,ncel Byklk (Byte) 3-4 3-6 4

CMPS -Compare String ( Karakter Katarlarn Karlatr ) Kullanm : CMPS hedef,kaynak CMPSB CMPSW Deitirdii Bayraklar:AF CF OF PF SF ZF Hedefin deerini kaynaktan sonular saklamadan, kartr.kartmaya dayal bayraklar gncellenir ve yn ( D ) bayran durumuna gre SI ve DI index kaydedicilar azaltlr yada arttrlr. CMPSB index kaydedicilarn 1 arttrr/azaltr , CMPSW 2 arttrr/azaltr, CMPSD 4 arttrr/azaltr. Btn data paralar ilerken REP neki kullanlabilir. operandlar yok Byklk (Byte) 1

CWD-Convert Word to Double word ( Word iki Word e evir ) Kullanm : CWD Deitirdii Bayraklar: hibiri AX kaydedici iindeki wordn iaretini DX kaydedicisina doru genileterek, DX:AX iinde bir doubleword deer oluturur. operandlar yok Kullanm : DAA Deitirdii Bayraklar:AF CF PF SF ZF (OF tanmsz) (AL nin iindeki) nceki BCD toplama ileminin sonu deerini dzeltir. AL nin ierii bir ondalk sayya evirilir. Operandlar Yok Byklk (Byte) 1 Byklk (Byte) 1

DAA -Decimal Adjust for Addition ( Ondalk Toplama in Ayarla )

65

DAS- Decimal Adjust for Substraction ( Ondalk karma in Ayarla ) Kullanm : DAS Deitirdii Bayraklar:AF CF PF SF ZF (OF tanmsz) (AL nin iindeki) nceki BCD kartma ileminin sonu deerini dzeltir. AL nin ierii bir ondalk sayya evirilir. Operandlar Yok DEC- Decrement ( Arttrma) Kullanm : DEC hedef Deitirdii Bayraklar: AF OF PF SF ZF Hedefin ierii bir kartlr. Operandlar reg8 Hafza reg16 DIV -Divide ( Bl ) Kullanm : DIV kaynak Deitirdii Bayraklar : (AF,CF,OF,PF,SF,ZF tanmsz) Accumulator'n kaynaa iaretsiz binary blme ilemi. Eer kaynak (operand)blen byte deerdeyse , AX kaynaa blnr ve blm AL'ye ,kalan AH'a yerletirilir. Eer kaynak (operand) blen bir word deerse , DX:AX kaynaa blnr ve blm AX de, kalan DX de saklanr. operandla reg8 reg16 Byklk (Byte) 2 2 operandlar Hafza8 reg16 Byklk (Byte) 2 2-4 Byklk (Byte) 2 2-4 1 Byklk (Byte) 1

ESC -Escape
Kullanm : ESC ncel,kaynak Deitirdii Bayraklar: Hibiri Matematik ilemciler iin data bus'a eriim salar. CPU buna NOP gibi davranr fakat hafza operandn bus'a yerletirir. Operandlar ncel,reg Byklk (Byte) 2

66

HLT-Halt CPU ( Dur ) Kullanm : HLT Deitirdii Bayraklar: Hibiri RESET satr aktif olana kadar bilgisayar durdurur,NMI ve maskelenebilir kesilim alnr.CPU etkin olmamaya balar fakat ,daha sonra restart iin, o anki CS:IP deerini tutar. Operandlar Yok Byklk (Byte) 1

IDIV- Signed Integer Division (aretli Tamsayl blme ) Kullanm : IDIV kaynak Deitirdii Bayraklar:(AF,CF,OF,PF,SF,ZF tanmsz) Akmlatrn kaynaa ,iaretli binary blm. Eer kaynak bir byte deerse , AX kaynaa blnr ve blm AL de kalan AH da saklanr. Eer kaynak bir word deerse ,DX:AX kaynaa blnr ve blm AL de kalan DX de saklanr. operandla reg8 reg16 Byklk (Byte) 2 2 operandlar Hafza8 reg16 Byklk (Byte) 2-4 2-4

IMUL- Signed Multiply ( aretli arpma) Kullanm : IMUL kaynak Deitirdii Bayraklar: CF OF ( AF,PF,SF,ZF tanmsz) Akmlatrn kaynakla ,iaretli arpma ilemi,sonu akmlatrde saklanr. Eer kaynak operand bir byte deer ise ,AL ile arplr ve sonu AX de saklanr.Eer kaynak operand bir word deer ise; AX ile arplr ve sonu DX:AX de saklanr. operandla reg8 reg16 Byklk (Byte) 2 2 operandlar Hafza8 reg16 Byklk (Byte) 2-4 2-4

IN -Input Byte or Word From Port ( Portdan Byte veya Word Oku) Kullanm : IN accum,port Deitirdii Bayraklar:hibiri Bir byte, veya word porttan okunarak srayla AL,veya AX 'e yerletirilir.Eer port numaras 0-255 arasnda ise ncel olarak belirtilebilir, aksi takdirde port numaras DX iinde belirtilmelidir. PC de geerli port numaralar 0-1024 dr, 65535'e kadar olan deerler nc parti reticiler ve PS/2 ler tarafndan belirtilebilir ve tannabilir. Operandlar accum,ncel8 accum,DX Byklk (Byte) 2 1

67

INC- Increment ( Arttr ) Kullanm : INC hedef Deitirdii Bayraklar: AF OF PF SF ZF Hedef iaretsiz binary operanda 1 ekler. Operandlar reg8 reg16 Hafza INT-Interrupt ( Kesilim ) Kullanm : INT say Deitirdii Bayraklar: TF IF Bayraklar iterek ,trap(kapan) ve kesilim bayraklarn temizleyerek (TF=0, IF=0) , yazlm kesilimini balatr. CS nin itilmesini IP takip eder ve interrupt vektr tablosundan bulunan deer CS:IP 'ye yklenir.Daha sonra yeni CS:IP tarafndan adreslenen yeni konumdan uygulama balar. Operandlar 3(sabit) ncel8 Byklk (Byte) 2 1 Byklk (Byte) 2 1 2-4

INTO -Interrupt on Overflow ( Tama Olursa Kesilime Git ) Kullanm : INTO Deitirdii Bayraklar: IF TF Eer overflow (tama) bayra O=1 ise bu komut INT 4 retir. Bu 0000:0010 tan adreslenen kodun uygulanmasn salar. Operandlar Etiket:Dallan Byklk (Byte) 1

IRET/IRETD -Interrupt Return ( Kesilimden Deri Dn ) Kullanm : IRET Deitirdii Bayraklar: AF CF DF IF PF SF TF ZF IP,CS yi ve sonra yndaki bayraklar ekerek kesilimin kontrol noktasna geridner ve bu noktadan uygulamaya devam eder. Operandlar iret Byklk (Byte) 1

68

JA/JNBE Jump Above /Jump not below or equal (stnde/Altnda veya Eit Deilse Dallan) Kullanm : JA JNBE etiket etiket aretsiz karlatrma

Deitirdii Bayraklar: Hibiri Eer Elde bayra ve sfr bayrann ikisi de sfrsa ( CF=0, ZF=0) uygulamann etikete dallanmasna neden olur. Operandlar Etiket:Dallan Byklk (Byte) 2-4

JAE/JNB JumpAbove or Equal/Jump on not below (stnde veya Eit/Altnda Deilse Dallan) Kullanm : JAE etiket JNB etiket Deitirdii Bayraklar:hibiri Eer Elde ( CF=0) bayra sfrsa uygulamann etikete dallanmasna neden olur.Fonksiyonel olarak JNC ye benzer. Operandlar Etiket:Dallan Byklk (Byte) 2-4 aretsiz karlatrma

JB/JNAEJump Below /Jump not Above or Equal (Altnda/stnde veya Eit DeilseDallan ) Kullanm : JB JNAE etiket etiket aretsiz karlatrma

Deitirdii Bayraklar: hibiri Elde bayra ( CF=1) ise ,uygulamann etikete dallanmasna neden olur. Fonksiyonel olarak JC ye benzer. Operandlar Etiket:Dallan Byklk (Byte) 2-4

JBE/JNA Jump Below or Equal /Jump Not Above (Altnda veya Eit /stnde Deilse Dallan) Kullanm : JBE etiket aretsiz karlatrma JNA etiket Deitirdii Bayraklar: hibiri Elde bayra veya Sfr bayra (CF=1 veya ZF=1) ise uygulamann etikete dallanmasna neden olur.

69

Operandlar Etiket:Dallan JC Jump on Carry (Elde ise Dallan ) Kullanm Jc etiket Operandlar Etiket:Dallan

Byklk (Byte) 2-4

aretsiz karlatrma Byklk (Byte) 2-4

Elde bayra bir (CF=1) ise uygulamann etikete dallanmasna neden olur.

JCXZ -Jump if Kaydedici CX is Zero ( Cx Kaydedicii Sfr se Dallan ) Kullanm : JCXZ etiket aretsiz karlatrma. Deitirdii Bayraklar:hibiri Eer CX kaydedicii sfrsa uygulamann etikete dallanmasna neden olur. Operandlar Etiket:Dallan Byklk (Byte) 2-4

JE/JZ -Jump Equal / Jump Zero ( Eitse / Sfrsa Dallan ) Kullanm : JE JZ etiket etiket aretsiz karlatrma .

Deitirdii Bayraklar:hibiri Eer sfr bayra (ZF=1) ise uygulamann etikete dallanmasna neden olur. Operandlar Etiket:Dallan Byklk (Byte) 2-4

JG/JNLE Jump Greater /Jump Not Less or Equal (Bykse/Kk veya Eit Deilse Dallan Kullanm : JG etiket aretli karlatrma. JNLE etiket Deitirdii Bayraklar: hibiri Eer Sfr bayra sfr ise veya iaret bayra tama bayrana eitse (ZF=0 veya SF=OF) ,uygulamann etikete dallanmasna neden olur. Operandlar Etiket:Dallan Byklk (Byte) 2-4

70

JGE/JNL Jump Greater or Equal /Jump Not Less (Byk veya Eit / Kk Deilse Dallan) Kullanm : JGE etiket JNL etiket Deitirdii Bayraklar:hibiri Eer iaret ve Tama bayraklar eitse (SF=OF) ,uygulamann etikete dallanmasna neden olur. operandlar Etiket:Dallan Byklk (Byte) 2-4 aretsiz karlatrma.

JL/JNGE-Jump less / jump not greater or equal (Kkse/Byk veya Eit Deilse Dallan ) Kullanm : JL etiket aretsiz karlatrma. JNGE etiket Deitirdii Bayraklar:hibiri Eer aret bayra Tama bayrana eit deilse (SF OF) ,uygulamann etikete dallanmasna neden olur. operandlar Etiket:Dallan Byklk (Byte) 2-4

JLE/JNG-Jump Less or Equal / Jump not greater(Kk veya Eit / Byk Deilse Dallan) Kullanm : JLE JNG etiket etiket aretli karlatrma .

Deitirdii Bayraklar:hibiri Eer Sfr bayra 1 ise veya iaret bayra overflow bayrana eit deilse (ZF=1 veya SF OF) uygulamann etikete dallanmasna neden olur. operandlar Etiket:Dallan Kullanm : JMP hedef Byklk (Byte) 2-4

JMP -Unconditional Jump (Koulsuz Dallanma ) Deitirdii Bayraklar:Hibiri artsz olarak kontrol etikete transfer eder. Dallanma standart olarak -32768 ile 32767 byte arasndaki adres deerlerinde olur.NEAR veya SHORT dallanma IP nin deitirilmesine neden olurken , FAR dallanma CS ve IP nin deitrilmesine neden olur. operandla reg8(bal reg16 (bal ) Byklk (Byte) operandlar 3 3 reg16 (near,kaydedici dolayl) Byklk (Byte) 5

hafza16 (near,hafza dolayl 5-4

71

JNC-Jump Not Carry ( Elde Deilse Dallan ) Kullanm : JNC etiket aretsiz karlatrma. Deitirdii Bayraklar:hibiri Eer Elde bayra sfrsa (CF=0) ,uygulamann etikete dallanmasna neden olur. Fonksiyonel olarak JAE ye ve JNB 'ye benzer. operandlar Etiket:Dallan Byklk (Byte) 2-4

JNE/JNZ -Jump not equal / Jump not zero ( Eit Deilse / Sfr Deilse Dallan ) Kullanm :JNE JNZ etiket etiket aretsiz karlatrma.

Deitirdii Bayraklar:hibiri Eer zero bayra sfr ise (ZF=0) uygulamann etikete dallanmasna neden olur. operandlar Etiket:Dallan Byklk (Byte) 2-4

JNO -Jump not overflow (Tama yoksa Dallan) Kullanm : JNO etiket aretli karlatrma. Deitirdii Bayraklar:hibiri Eer Tama sfr ise (OV=0), uygulamann etikete dallanmasna neden olur. operandlar Etiket:Dallan Byklk (Byte) 2-4

JNS -Jump Not Signed (aretli Deilse Dallan ) Kullanm : JNS etiket Deitirdii Bayraklar:hibiri Eer aret bayra sfr ise ( SF=0), uygulamann etikete dallanmasna neden olur. aretli karlatrma. operandlar Etiket:Dallan Kullanm : JNP etiket JPO etiket Deitirdii Bayraklar: hibiri Eer parity bayra ssr ise (PF=0) uygulamann etikete dallanmasna neden olur. Byklk (Byte) 2-4 aretsiz karlatrma.

JNP/JPO -Jump Not Parity / Jump Parity odd (Parit Yoksa dallan )

72

operandlar Etiket:Dallan

Byklk (Byte) 2-4

JO -Jump on overflow ( Tama varsa Dallan ) Kullanm : JO etiket Deitirdii Bayraklar: hibiri Tama bayra (OF=1) iaretliyse ,uygulamann etikete dallanmasna neden olur.. operandlar Etiket:Dallan Byklk (Byte) 2-4 aretli karlatrma

JP/ JPE -Jump on Parity / Jump on Parity Even (Parity varsa Dallan ) Kullanm:JP JPE etiket etiket aretsiz karlatrma.

Deitirdii Bayraklar: hibiri Eer parity bayra iaretliyse , uygulamann etikete dallanmasna neden olur. operandlar Etiket:Dallan JS -Jump Signed (aretli se Dallan ) Kullanm : JS etiket aretli karlatrma. Deitirdii Bayraklar:hibiri Eer iaret bayra iaretliyse (SF=1), uygulamann etikete dallanmasna neden olur. operandlar Etiket:Dallan Byklk (Byte) 2-4 Byklk (Byte) 2-4

LAHF -Load Kaydedici AH From Flags ( Bayrak Kaydedicilerinin erini AH kaydediciine kopyala) Kullanm : LAHF Deitirdii Bayraklar:hibiri Bayrak kaydedicilarnn 0-7 bitlerini AH'a kopyalar. Buna AF,CF,PF,SF ve ZF bayraklar dahildir, dier bitler tanmsz. operandlar yok Byklk (Byte) 1

73

LDS- Load Pointer Using DS ( DS Kaydedicii Kullanark Pointeri Ykle ) Kullanm : LDS hedef,kaynak Kaynak hafzadan 32-bit pointeri, hedef kaydedicia ve DS 'ye ykler. Offset hedef regsiter'a ve segment DS 'ye yerletirilir. Bu komutun kullanlmas iin; word n dk deerlikli hafzadaki adresinin offseti , wordn yksek deerlikli hafza adresinin de segmenti iermesi gerekir. Bu yndan ve kesilim vector tablosundan uzak pointerlarn yklenmesini kolaylatrr. operandlar reg16 hafza32 Byklk (Byte) 2-4 2-4

LEA -Load Effective Address (Etkin Adresi Ykle ) Kullanm : LEA hedef,kaynak Deitirdii Bayraklar:hibiri Kaynan offset adresini , hedefe transfer eder. operandlar reg,hafza Byklk (Byte) 2-4

LES -Load Pointer Using ES (ES Kaydedicii Kullanark Pointeri Ykle ) Kullanm : LES hedef,kaynak Deitirdii Bayraklar:Hibiri 32-bit pointeri hafza kaynandan hedef kaydedicie ve ES' e ykler. Offset hedef kaydedicia , ES segmentine yerletirilir. Bu komutun kullanlmas iin dk deerlikli hafza adresindeki word'n offseti, yksek deerlikli adresteki word'n segmenti iermesi gerekir. Bu yndan ve kesilim vector tablosundan uzak pointerlarn yklenmesini kolaylatrr. operandlar reg,hafza LOCK -Lock Bus Kullanm : LOCK Deitirdii Bayraklar:hibiri Bu komut CPU'nun , sonraki komut iletilirken bus lock sinyali ileri srmesine neden olan bir nektir. ki ilemcinin ayn data konumunu gncelletirmesini engellemek iin kullanlr.Bu sadece bus ncesi XCHG, MOV, IN ve OUT komutlarn kilitlemek iin kullanlmaldr. operandlar yok Byklk (Byte) 1 (Bus Kilitle ) Byklk (Byte) 2-4

74

LODS -Load String (Byte , word or double) Kullanm: LODS kaynak LODSB LODSW Deitirdii Bayraklar:hibiri

(Karakter Katarn Ykle )

DS:SI tarafndan adreslenen string elementi akmlatre transfer eder. SI operandn byklne ve kullanlan komuta dayandrlarak arttrlr. Eer ynlendirme bayra iaretliyse (DF=1) ise SI azaltlr, eer ynlendirme bayra sfr ise (DF=0) SI arttrlr. REP neki ile kullanlr. operandlar Etiket:Dallan Byklk (Byte) 2

LOOP -Decrement CX and Loop if CX Not Zero ( CX Kaydediciini Azalt ve CX=0 Deilse Dn) Kullanm: LOOP etiket Deitirdii Bayraklar: hibiri CX'i 1 azaltr ve eer CX sfr deilse etikete dallanr. Etiket operand , Loop komutunu takip eden komutun -128 veya 127 byte' iinde olmaldr. operandlar Etiket:Dallan Byklk (Byte) 2

LOOPE / LOOPZ -Loop While Equal / Loop while zero ( Eit ise / Sfr ise Dn ) Kullanm: LOOPE LOOPZ etiket etiket

Deitirdii Bayraklar: hibiri CX kaydedicii 1 azaltr (bayraklar deitirmeden) ve eer CX 0 ise ve sfr bayra iaretliyse (ZF=1) etiketi dallanr. Etiket operand , loop komutunu takip eden komutun -128 ya da 127 byte ' iinde olmaldr. operandlar Etiket:Dallan Byklk (Byte) 2

LOOPNZ/LOOPNE -Loop While Not Zero / Loop While Not Equal (Sfr Deilse / Eit Deilse Dn) Kullanm : LOOPNZ LOOPNE etiket etiket

Deitirdii Bayraklar:hibiri

75

CX'i 1 azaltr (bayraklar deitirmeden) ve eer CX 0 ise ve sfr bayra sfr ise (ZF=0) etikete dallanr. Etiket operand , loop komutunu takip eden komutun -128 ya da 127 byte ' iinde olmaldr. operandlar Etiket:Dallan Byklk (Byte) 2

MOV -Move Byte or Word (Byte veya Word Kopyala ) Kullanm: MOV hedef,kaynak Deitirdii Bayraklar: hibiri Kaynak operanddan ,hedef operanda byte veya word kopyalar . Operandlar reg,reg hafza,reg reg,hafza hafza,ncel reg,ncel Byklk (Byte) 2 2-4 2-4 3-6 2-3 3 operandlar segreg,reg16 segreg,hafza16 reg16,segreg hafza16,segreg hafza,accum accum,hafza Byklk (Byte) 2 2-4 2 2-4 2-3 3

MOVS -Move String (Byte or Word) ( Byte veya Word Karakter Katarn Kopyala ) Kullanm : MOVS MOVSB MOVSW Deitirdii Bayraklar:hibiri DS:SI tarafndan adreslenen datay (operandlar verilmi olsa bile) ES:DI hedef konumuna kopyalar. SI ve DI 'y, kullanlan operandn veya komutun boyutuna gre ,gnceller. SI ve DI yn bayra sfrlandnda (DF=0) arttrlr ve yn kaydedicii iaretli olduunda (DF=1) da azaltlr. REP nekleri ile kullanlr. operandlar hedef,kaynak Byklk (Byte) 1 hedef,kaynak

MUL -Unsigned Multiply (aretsiz arpma ) Kullanm : MUL kaynak Deitirdii Bayraklar: CF OF (AF,PF,SF,ZF tanmsz) Kaynan akmlatr ile iaretsiz arpm. Eer kaynak bir byte deer ise, AL dier arplan olarak kullanlr ve sonu AX'e yerletirilir. Eer kaynak bir word deerse, AX kaynakla aplr ve sonu DX:AX 'e gnderilir.

76

operandla reg8 reg16

Byklk (Byte) 2 2

operandlar Hafza8 reg16

Byklk (Byte) 2-4 2-4

NEG -Two's complement negation ( 2 ye Gre Tmleyenini Al ) Kullanm : NEG hedef Deitirdii Bayraklar:AF CF OF PF SF ZF Hedefi sfrdan kartr ve hedefin 2ye tmleyninin tekrar hedefe ykler. operandlar reg hafza NOP -No operation ( lem Yok ) Kullanm : NOP Bu hibirey yapma komutudur.Zaman ve yer kazandrr ve en ok code segmentlerini birletirmede kullanldr. operandlar yok Byklk (Byte) 1 Byklk (Byte) 2 2-4

NOT -One's Compliment Negation (Logical NOT) (1e Gre Tmleyenini Al ) Kullanm : NOT hedef Deitirdii Bayraklar:hibiri Yeni bir 1 gre tmleyenini oluturarak hedef operandn bitlerinin tersini alr. operandlar reg hafza OR -Inclusive Logical OR Kullanm : OR ( Veya ) Byklk (Byte) 2 2-4

hedef,kaynak

Deitirdii Bayraklar: CF OF PF SF ZF (AF tanmsz) ki operandn mantksal veya ilemini yapar.Sonucu hedef oprenda ykler. operandlar reg,reg hafza,reg reg,hafza Byklk (Byte) 2 2-4 2-4 operandlar reg,ncel hafza,ncel Accum,ncel Byklk (Byte) 3-4 3-6 2-3

77

OUT -Output Data to Port ( Porta Yaz ) Kullanm : OUT port,accum Deitirdii Bayraklar:hibiri Belirli bir port adresine , AL deki byte' ,veya AX deki word eder.Eer port numaras 0-255 aras ise ncel olarak belirtilebilir.255 den byk port numaralar DX de belirtilmesi gerekir. operandlar accum,ncel8 accum,DX Byklk (Byte) 2 1

POP -Pop Word off stack ( Ynda Word ek ) Kullanm : POP hedef Deitirdii Bayraklar: hibiri O anki ynn en stndeki word (SS:SP) hedefe transfer eder ve sonra SP' yi yeni yn st noktasna doru iki arttrr. CS kaydedicii hedef olarak kullanlmaz. operandlar reg16 segreg hafza16 Byklk (Byte) 2 1 2-4

POPF -Pop Flags off Stack (Ynda Bayrak Kaydediciine ek ) Kullanm : POPF Deitirdii Bayraklar: btn bayraklar Yndaki word deeri bayrak kaydedicilarna eker ve sonra SP yi 2 arttrr. operandlar yok PUSH -Push Word onto Stack ( Yna t ) Kullanm : PUSH kaynak Deitirdii Bayraklar:hibiri SP yi operandn bykl kadar azaltr ve kaynaktan yn st noktasna (SS:SP) bir word transfer eder. operandlar reg16 segreg hafza16 Byklk (Byte) 1 1 2-4 Byklk (Byte) 1

78

PUSHF -Push Flags onto Stack ( Bayrak Kaydediciinin eriini Yna t ) Kullanm : PUSHF Deitirdii Bayraklar: hibiri Bayrak kaydedicilerini yna'a transfer eder. operandlar Yok Byklk (Byte) 1

RCL -Rotate Through Carry Left ( Elde Bayra le Sola Doru Dndr ) Kullanm : RCL hedef ,saym deeri Deitirdii Bayraklar: CF OF Hedefin bitlerini sola doru (saym deeri) kere dndrr. Ve btn data sadan tekrar girilerek sol tarafa itilir. Elde bayra dndrlen son biti tutar. operandlar reg,1 hafza,1 Byklk (Byte) 2 2-4 Operandlar reg,CL hafza,CL Byklk (Byte) 2 2-4

RCR -Rotate Through Carry Right ( Elde Bayra le Saa Doru Dndr ) Kullanm : RCR hedef,saym deeri Deitirdii Bayraklar: CF OF Hedefin bitlerini saa doru (saym deeri) kere dndrr. Ve btn data soldan tekrar girilerek sa tarafa itilir. Elde bayra dndrlen son biti tutar. operandlar reg,1 hafza,1 Byklk (Byte) 2 2-4 Operandlar reg,CL hafza,CL Byklk (Byte) 2 2-4

REP -Repeat String Operation ( Karakter Katar Tekrarla neki ) Kullanm : REP Deitirdii Bayraklar: hibiri Karakter Katar komutlarnn uygulamasn CX 0 olduu srece tekrarlar. Her karakter katar ileminden sonra , CX azaltlr ve Sfr bayra test edilir. operandlar Yok Byklk (Byte) 1

REPE/REPZ -Repeat Equal /Repeat Zero ( Eit se / Sfr se Tekrarla ) Kullanm : REPE REPZ 79

Deitirdii Bayraklar:hibiri Karakter Katar komutlarnn uygulanmasn CX 0 ve Sfr bayra bir ( ZF=1) olduu srece tekrar eder CX azaltlr ve Sfr bayra her karakter katar ileminden sonra test edilir. operandlar Yok Byklk (Byte) 1

REPNE/REPNZ -Repeat not Equal/Repeat Not Zero ( Esit Deil ise / Sfr deil se Tekrarla Kullanm : REPNE REPNZ Deitirdii Bayraklar: hibiri Karakter Katar komutlarnn uygulanmasn CX 0 ve Sfr bayra sfr olduu ( ZF=0) srece tekrar eder CX azaltlr ve Sfr bayra her karakter katar ileminden sonra test edilir. operandlar yok Byklk (Byte) 1

RET/RETF -Return From Procedure ( Alt Proramdan Geri Dn ) Kullanm : RET nBytes RETF nBytes RETN nBytes Deitirdii Bayraklar:hibiri Alt programn konrtoln yn tarafndan tutulan uygulama adresine geri yollar. "n byte" istee bal bir numaradr. operandlar Retn Retn ncel Byklk (Byte) 1 3 operandlar retf retf ncel Byklk (Byte) 1 3

ROL -Rotate Left ( Sola Dndr ) Kullanm : ROL hedef,saym deeri Deitirdii Bayraklar: CF OF Hedefin bitlerini sola doru (saym deeri) kere dndrr. Ve btn data sadan tekrar girilerek sol tarafa itilir. Elde bayra son dndrlen bitin deerini ierir. operandlar reg,1 hafza,1 Byklk (Byte) 2 2-4 Operandlar reg,CL hafza,CL Byklk (Byte) 2 2-4

80

ROR -Rotate Right ( Saa Dndr ) Kullanm : ROR hedef , saym deeri Deitirdii Bayraklar: CF OF Hedefin bitlerini saa doru (saym deeri) kere dndrr. Ve btn data soldan tekrar girilerek sa tarafa itilir. Elde bayra son dndrlen bitin deerini ierir. operandlar reg,1 hafza,1 Byklk (Byte) 2 2-4 Operandlar reg,CL hafza,CL Byklk (Byte) 2 2-4

SAHF -Store AH Kaydedici into Flags ( AH Kaydediciinin eriini Bayrak Kaydediciine Ykle ) Kullanm : SAHF Deitirdii Bayraklar: AF CF PF SF ZF AH nn 0-7 bitlerini bayrak kaydediciina transfer eder. Bu AF,CF,PF,SF ve ZF yi ierir. operandlar yok Byklk (Byte) 1

SAL/SHL -Shift Arithmetic Left/Shift Logical Left ( Aritmetik / Mantksal Sola Kaydr ) Kullanm : SAL hedef,saym deeri SHL hedef, saym Deitirdii Bayraklar:CF OF PF SF ZF (AF tanmsz) Hedefi (saym deeri) kadar bit sola kaydrr, sadan sfr girer. Elde bayra en son deitirilen biti ierir. operandlar reg,1 hafza,1 Byklk (Byte) 2 2-4 Operandlar reg,CL hafza,CL Byklk (Byte) 2 2-4

SAR -Shift Arithmetic Right ( Aritmetik Saa Kaydr ) Kullanm : SAR hedef,saym deeri Deitirdii Bayraklar: CF OF PF SF ZF (AF tanmsz) Hedefi saa (saym deeri) bit kadar kaydrr, o anki iaret biti ensol bite kopyalanr.Elde bayra en son deitirilen biti ierir. operandlar reg,1 hafza,1 Byklk (Byte) 2 2-4 Operandlar reg,CL hafza,CL Byklk (Byte) 2 2-4

81

SBB -Substract with Borrow ( dn Alarak kart ) Kullanm : SBB hedef,kaynak Deitirdii Bayraklar: AF CF OF PF SF ZF Hedeften kayna kartr, eer Elde bayra iaretliyse ( CF=1) ilave olarak 1 kartr.Sonular hedefde saklanr. operandlar reg,reg hafza,reg reg,hafza Byklk (Byte) 2 2-4 2-4 operandlar reg,ncel hafza,ncel Accum,ncel Byklk (Byte) 3-4 3-6 2-3

SCAS -Scan String (byte,word or doubleword) ( Karakter Katar Ara ) Kullanm : SCAS karakter katar SCASB SCASW Deitirdii Bayraklar: AF CF OF PF SF ZF Akmlatrden ES:DI daki deeri karlatrr.ve kartmadakine benzer ekilde bayraklar iaretler. komut formatna ve ynlendirme bayrann konumuna gre DI arttrlr/azaltlr .REP nekleriyle kullanlr. operandlar Karakter katar Byklk (Byte) 1

SHR -Shift Logical right ( Mantksal Saa Kaydr ) Kullanm: SHR hedef,saym deeri Deitirdii Bayraklar: CF OF PF SF ZF (AF tanmsz) Hedefi (saym deeri) bit kadar saa kaydrr ve sfrlar soldan girer. Elde bayra son deitirilen biti ierir. operandlar reg,1 hafza,1 Byklk (Byte) 2 2-4 Operandlar reg,CL hafza,CL Byklk (Byte) 2 2-4

STC -Set Carry ( Elde Bayran Birle ) Kullanm : STC Deitirdii Bayraklar: CF Elde bayran 1 yapar. operandlar yok Byklk (Byte) 1

82

STD -Set Direction Flag ( Yn Bayran Birle ) Kullanm : STD Deitirdii Bayraklar:DF Ynlendirme bayran 1 yaparak ,Karakter katar komutlarnn SI ve DI nn otomatik olarak arttrlmas yerine otomatik azaltlmasna neden olur. operandlar yok Byklk (Byte) 1

STI -Set Interrupt Flag (enable interrupts) ( Kesilim Bayran Birle kesilimi etkin yap Kullanm : STI Deitirdii Bayraklar: IF Kesilim bayran 1 yapar ve CPU donanm interruptlarnn tmnn tannmasn salar. operandlar yok Byklk (Byte) 1

STOS -Store String(Byte,word or doubleword) ( Karakter Katarn Sakla ) Kullanm : STOS STOSB STOSW STOSD Deitirdii Bayraklar: hibiri Akmlatrdeki deeri ES:DI konumunda saklar (operand verilse bile). DI operandn byklne (veya komut formatna) ve ynlendirme bayrann durumuna gre arttrlr/azaltlr. REP nekiyle kullanlr. operandlar Hedef SUB -Substract ( kart ) Kullanm : SUB hedef, kaynak Deitirdii Bayraklar: AF CF OF PF SF ZF Kaynak hedeften kartlr ve sonu hedefte tutulur. operandlar reg,reg hafza,reg reg,hafza Byklk (Byte) 2 2-4 2-4 operandlar reg,ncel hafza,ncel Accum,ncel Byklk (Byte) 3-4 3-6 2-3 Byklk (Byte) 1 hedef

83

TEST -Test for Bit Pattern ( Bit Pattreni Test Et ) Kullanm : TEST hedef,kaynak Deitirdii Bayraklar: CF OF PF SF ZF (AF tanmsz) ki operanda mantksal ve uygular ve bayrak kaydedicin gnceller, sonular saklamaz. operandlar reg,reg hafza,reg reg,hafza Byklk (Byte) 2 2-4 2-4 operandlar reg,ncel hafza,ncel Accum,ncel Byklk (Byte) 3-4 3-6 2-3

WAIT -Event wait ( Bekle ) Kullanm: WAIT Deitirdii Bayraklar: hibiri Matematik ilemcinin ilemin bittiini iaret edene kadar CPU bekleme konumuna geer .Bu komut geici olarak Matematik ilemci tarafndan kullanlan hafzaya CPU nun eriimini nler. operandlar yok XCHG -Exchange ( Dei toku Et ) Kullanm : XCHG hedef,kaynak Deitirdii Bayraklar: hibiri Kaynak ve hedefin ieriklerini birbiriyle deitirir. operandlar reg,reg hafza,reg reg,hafza Byklk (Byte) 2 2-4 2-4 operandlar accum,reg reg,accum Byklk (Byte) 1 1 Byklk (Byte) 1

XLAT/XLATB Translate ( evir ) Kullanm : XLAT eviri tablosu Deitirdii Bayraklar: hibiri AL ierisindeki byte' BX tarafndan adreslenen bir kullanc tablosundaki byte ile deitirir.AL nin orjinal deeri eviri tablosuna indextir. operandlar Tablo Byklk (Byte) 1

84

XOR -Exclusive OR ( EXOR zel Veya ) Kullanm : XOR hedef,kaynak Deitirdii Bayraklar: CF OF PF SF ZF (AF tanmsz) Operandlar arasnda Exor ilemi yapar ve sonucu hedefte saklar. operandlar reg,reg hafza,reg reg,hafza Byklk (Byte) 2 2-4 2-4 operandlar reg,ncel hafza,ncel Accum,ncel Byklk (Byte) 3-4 3-6 2-3

85

EK II. NEM BAZI BOS ve DOS KESMELER TABLOSU


Grevi Ekran Modunu Ayarla Kursorun Pozisyon Ayarla Kursorun Pozisyon Oku Ekran Yukar Kaydr nt 10h 10h 10h 10h Fonk No Kesme ncesi AH=00h AL=Ekran Modu DH=Satr No. DL=Stn No AH=02h BH=Ekran sayfas AH=03h AH=06h BH=Ekran sayfas AL= Kaydrlacak Satr Adedi BH=Bo Satrlarn zellii CH=st Satr No. CL=sol stun no DH=Alt Satr No. DL=sa stun no AL=Kaydrlacak Satr Adedi. BH=Bo Satrlarn zellii. CH=st Satr No. CL=Sol Stun No DH=Alt Satr No DL=Sa Stun No BH=Ekran Sayfas AH=Karekter zellii AL= Karekter Kodu Kesme Sonucu Aklama Ekrann Video Modu Ayarlanr Text/Grafik Modda Ekrandaki Kursorun Pozisyonu Ayarlanr Text Modda Ekrandaki Kursorun Pozisyonu Okunur Text/Modda Ekrandaki Pencereyi Yukar Kaydrr Not:al nin ' 0 ' deeri btn ekran gsterir

DH=Satr NO. DL=Stun No

Ekrani Aag Kaydr EKRAN (Bkn Not 4,,6,7)

10h

AH=07h

Text/Modda Ekrandaki Pencereyi Asa Kaydrr Not:al nin ' 0 ' deeri btn ekran gsterir

Ekrandan Karekter Oku Ekrana Karekter Ve zellik Yaz.

10h

AH=08h

10h

Ekrana Karekter Yaz.

10h

AL=Karekter Kodu BH=Ekran AH=O9h Sayfas BL=Krekterlerin zellii CX=Tekrar Says AL=Karekter Kodu BH=Ekran AH=0Ah Sayfas CX=Tekrar Says

Text/Grafik Modda Ekrandaki O Andaki Kursorun Pozisyonundaki Karekterleri Ve zelliini Okur Text/Grafik Modda O Andaki Kursor Pozisyonunda Belirtilen Tekrarda Ve zellikte Ekrana Karekter Yazlr Text/Grafik Modda O Andaki Kursor Pozisyonunda Belirtilen Tekrarda Ekrana Karekter Yazlr Grafik Modda Belirtilen Yerde Ekrana Bir Pixel Konulur

Ekrana Pixel Koy

10h

Ekrana Pixel Oku Ekran Modu Oku Ekrana Bir Karekter Yazma

10h 10h 21h

AH=0Ch AL=Renk BH=Ekran Sayfas CX=Pixel Stun Says DX=Pixel Satr Says BH=Ekran Sayfas CX= Pixel Stn Grafik Modda Belirtilen Yerdeki Pixelin AH=0Dh Says AL=Okunann Pixelin Rengi Rengi Okunur DX=Pixel Satr Says AH=0Fh AL=Video Modu BH=Ekran Syfas Text /Grafik Modda Ekran Kodu Okunur AH=02h DL=Ekrana Yazlacak Karekter Ekrana Bir Karekter Yazlr

Ekranda Karekter Katar Yazdrma

21h

DS:DX Adresinin Gsterdii Alan AH=09h Sonu $ le Biten Bir Karekter Katar Yazlr AH=00h AH=02h DL=disk no DL=Src No,DH=Kafa,CH=Cylinder,Track CL=Sektor no AL=okunacak sektor says ES:BX Tampon adres deeri DL=Src No,DH=Kafa,CH=Cylinder,Track CL=Sektor no AL=yazlacak sektor says ES:BX Tampon adres deeri DH=Kafa no, DL=Src no CH=Cylinder,Track DH=Kafa no, DL=Src no CH=Cylinder,Track DH=Kafa no, DL=Src no CH=Cylinder,Track DL=Src No NC hata yok. AH=Hata kodu

Diski (hardisk ,disket src) sfrla Sektor oku

13h 13h

DS:DX Adresinin Gsterdigi Ve Sonu $ le Biten Bir Karekter Katarn Ekranda Gsterir Diski baslang durumuna getirir. Not=DL<80H Disket, DL>80H Harddisk Bios servisi kullanarak belirtilen src, kafa Cyclinder veya z den istenen adette sektor okunup ES:BX de tanmlanan tampona yazlr. Bios servisi kullanarak belirtilen src, kafa Cyclinder veya z den istenen adette sektor ES:BX de tanmlanan tampona zerinden sektre yazlr.

DSK / DSKET

Sektor yaz

13h

AH=03h

TRACK Formatla TRACK Formatla Diski Formatla Disk Parametrelerini Oku.

13h 13h 13h 13h

AH=05h AH=06h AH=07h AH=08h

NC hata yok. AH=Hata kodu NC hata yok. AH=Hata kodu NC hata yok. AH=Hata kodu DL=Src adedi,DH=Kafa says CH=Cylinder says, CL=Sektor say. CF=1 ise AL= Hata Kodu CF=1 ise AL= Hata Kodu CF=0 ise AX= File Handle No. CF=1 ise AL= Hata Kodu CF=0 ise AX= File Handle No. CF=1 ise AL= Hata Kodu

Belirtilen z i (Track) formatlar Belirtilen z i (Track) formatlar ve bozuk sektorleri belirler Belirtilen z i (Track) den itibaren btn diski formatlar Belirtilen srcnn parametrelerini okunur.

Dizin Olutur. Dizin Sil. Dosya Olutur

21h 21h 21h

Dosya A

21h

DS:DX ,ASCII Z formatnda dizin AH=39h Ad DS:DX ,ASCII Z formatnda dizin AH=3Ah Ad DS:DX ,ASCII Z formatnda dosya AH=3Ch Ad CX= Dosya znitelii DS:DX ,ASCII Z formatnda dosya AH=3Dh Ad AL= Eriim Kodu (0=Sadece Oku, 1= Sadece Yaz, 2=Oku ve Yaz)

DOSYA / DZN (HANDLE) (Bkn not 5)

Belirtilen Yerde ve isimde bir dizin oluturulur. Belirtilen Dizin Silinir. Belirtilen Dosya sminde Bir Dosya Oluturur.

Daha nce Oluturulmu olan bir Dosya Alr.

87

Dosya Kapat

21h

AH=3Eh BX= File Handle No

CF=0 ise hata yok CF=1 ise AL= Hata Kodu

Daha nce Oluturulmu olan bir Dosya Kapatlr.

Dosyadan Oku

21h

AH=3Fh

DS:DX Data Buffer adresi CX= Okunacak Byte Adedi. BX= Handle no.

nceden Alan Bir Dosyann erii Belirtilen CF=0 ise AX= Okunan Byte Adedi Data Alanna Kopyalanr. CF=1 ise AL= Hata Kodu nceden Alan Bir Dosyann eriine CF=0 ise AX= Yazlan Byte Adedi Belirtilen Data Alannn erii Yazlr. CF=1 ise AL= Hata Kodu CF=0 ise hata yok CF=1 ise AL= Hata Kodu AH=Scan Kodu AL=ASCII Kodu AL=SHIFT Durumu AL=00 kyb Ok, AL=01 kyb Buff Dolu Ad Belirtilen dosya Silinir. Klavyeden Baslan Karekterin Scan Kodu Ve ASCII Kodu Okunur Klavyeden Baslan Karekterin Durumu Okunur

Dosyaya Yaz

21h

AH=40h

Dosya Sil

21h

DS:DX Data Buffer adresi CX= Yazlacak Byte Adedi. BX= Handle no. DS:DX ,ASCII Z formatnda dosya AH=41h Ad

Klavyeden Karekter Oku SHIFT Durumunu Oku KLAVYE (Bkn not 1) Klavyeyi Emule Et Klavyeden Bir Karekter Okuma Klavyeden Bir Karakter Okuma Klavyeden Karekter Katar Okuma

16h 16h 16h 21h 21h 21h

AH=00h AH=02h AH=05h AH=01h AH=07h AH=0Ah DS:DX Adresi Tampon Hafzann Balangcna Atanr CL=ASCII Kodu. CH =ScanKodu

Klavyeden Bir Tua Baslm Gibi Davranr Klavyeden Bir Karekter Okunur,Okunan AL =Klavyeden Girilecek Karekter Karekter Ekranda Gzkr Klavyeden Bir Karekter Okunur,Okunan AL=Klavyeden Girilen Karekter Karekter Ekranda Gzkmez Klavyeden GirilecekKarekter Katar DS:DX Adresinin Gsterdigi Bir Tampon Hafza Alanna Saklanr. agr sonunda Bu Alann lk Byte' Tamponun Byklgn, 2, Byte' Girilen Karekter Adedini Gsterir.Tamponun Dier Byte'lar Girilen Karekterleri Saklar. Yazcya Bir ASCII karakter Yaz. Yazcnn Durumu Test Edilir.

YAZICI

Yazcya Bilgi Yaz. Yazc Durmumunu Test ET

17h 17h

AL= Yazlacak Karakter DX=Yazc AH=00h No. AL= 1 Zaman Am AH=01h DX=Yazc No AH=Durum Kodu AH Bit7 = Yazc Megul Deil AH Bit6 = ACK sinyalil AH Bit5 = Kat Bittil AH Bit3 = I/O Hatas

88

AH Bit0 = Zaman Am Yazciya Bir Karakter Yazma Fareyi Ters Et Ekranda Fareyi Gster Ekranda Fareyi Sil Fare Pozisyonu Tu Durumu Oku 21h 33h 33h 33h 33h AH=05h AX=00h AX=01h AX=02h AX=03h DL=Yazcya Yazlacak Karekter AX=Fare Durumu BX=Tu Adedi Yazcya Bir Karekter Yazlr AX=01;Fare var. AX=00 ;Fare Yok. BX=02;2 Tulu Fare. BX=03; 3Tulu Fare Ekranda Fare zi Gzkr. Ekranda Fare zi Siinir Farenin Ekrandaki Konumunu Ve hangi Tusuna Baslp Baslmadn Test Eder.

FARE (Bkn Not 2)

BX=0/1 Tu Basl/Baslmad CX=Cursorun X Deeri DX=Cursorun Y degeri CX=Cursorun X Deeri DX=Cursorun Y Deeri CX=Sol Snr DX Sa Snr CX= st Snr . DX=Alt Snr CX=yl, DH=Ay,DL=Gn CX=yl, DH=Ay, DL=Gn AL=FF Hatal Tarih CH=Saat, CL=Dk., DH=Sn. DL=Milisn.

TARH

Fare Pozisyonu Ayarla Yan Snrlarn Ayarla st Snrlarn Ayarla Tarihi Oku Tarihi ayarla Zaman Oku Zaman ayarla Asenkron Portunu Ayarla

33h 33h 33h 21h 21h 21h 21h 14h

AX=04h AX=07h AX=08h AH=2Ah AH=2Bh AH=2Ch

Farenin Ekrandaki Yeri Ayarlanr Fare Kursorunun Sa Ve Sol Snrlar Ayarlanr Fare Kursorunun st Ve Alt Snrlar Ayarlanr O gnk tarih okunur. Tarih ayarlanr. Saat okunur Saat ayarlanr. Asenkron Port zerinden bilgi al verii yaplmadan nce portlar ayarlanmaldr.

Asenkron Portu dan Karak. Gnder Asenkron Portu dan Karakkter Oku

14h

14h

Asenkron Port Durum Oku

14h

CH=Saat, CL=Dakika, DH=Saniye AH=2Dh DL=Milisaniye AL=FF Hatal Zaman AL: BT 0,1 Data uzunluu 01= 7 AH=00h Bit, 11=8 Bit AL: BT 2 Stop Biti 0= 1 Bit, 1=2 Bit AL: BT3,4 Parity 00=Yok, 01=Tek, 11=Cift AL:BT 5,6,7 Baud Rate 000=110 ....... 111=9600 AL=Gnderilecek Karakterin ASCII AH=01h kodu AH:BIT 7=1 hatal AH :BT 7=0 ise Port Durumu AL=Okunanan Karakterin ASCII AH=02h kodu AH:BIT 7=1 hatal AH:BIT 7=0 ise Port Durumu AH=03h AH:BIT 7= Zaman Am AH:BT 6=Kaydrma Reg. Bo

SER PORT

Asenkron Port zerinden bir karakter gnderilir.

Asenkron Port zerinden bir karakter okunur.

AL:BIT 7= Alc Hat sinyali Alnd. AL:BIT 6 = Zil alnd

89

SONLAND IRMA

Asenkron Porttan Karak.Oku Asenkron Porttan Karak.Yaz Bilgisayar Tekrar Balat Program Sonlandr. Program Sonlandr. Program Sonlandr.

21h 21h 18h 20h 21h 21h

AH=03h AH=04h

AH:BT 5=TutmaReg. Bo AH:BT 4=Break durumu. AH:BT3=ereve Hatas. AH:BT2=Parity Hatas. AH:BT1=Overrun Hatas. AH:BT 0= Data Hazr. AL= Okunan Karakter DL=Yazlacak Karakter

AL:BIT 5 = DSR Hazr. AL:BIT 4 = CTS Hazr. AL:BIT 3 = CTS Hazr.

AH=00h AH=4Ch

Asenkron Porttan Bir Karakter Okunur. Asenkron Portta Bir Karakter Yazlr. Bilgisayar Tekrar Balatlr. Program Sonlandrr. Program Sonlandrr. Program Sonlandrr.

Not 1 : Klavye Durumu Bit 7 Bit 6 nsert CapsLock Not 2 :Fare Butonu Bit 7 Bit 6 Bit 5 0 0 0 Not 3: Dosya znitelii Bit 7 Bit 6 Arsiv

Bit 5 NumLock

Bit 4 ScrolI Lock

Bit 3 Alt

Bit 2 Ctrl

Bit 1 Sol Shift

Bit 0 Sa Shift

Bit 4 0

Bit 3 Orta Fare Butonu

Bit 2 Sa Fare buton

Bit 1 Sol Fare Butonu

Bit 0

Bit 5

Bit 4 Alt Dizin

Bit 3 Src smi

Bit 2 Sistem Dosyas

Bit 1 Bit 0 Gizli Dosya Yalnz Oku

90

Not 4: Ekran Karakter zellii Bit 7 = Yanp Snme Bit 6 5 4 = Arka Plan Rengi Bit 3 = Parlaklk Bit 2 1 04: EGA Ekran Renk Kod Deeri Not 4: EGA E NNot 6: Ekran Renk Kod Deeri Not = n Plan Rengi 0 0 0 Siyah 0 0 1 Mavi Not 5: Dosya Oluturma Hata Kodu Geersiz fonk. No 0 1 0 Yeil 1 Dosya bulunamad 0 1 1 Cyan 2 Yol bulunamad 1 0 0 Krmz 3 ok fazla dosya ak 1 0 1 Mor 4 Eriime izin verilmedi 1 1 0 Kahve 5 Geersiz Handle No 1 1 1 Beyaz 6 7 ila 12 Dier hatalar

Not 7: Ekran modlar:


Mod 00H 01H 02H 03H 04H 05H 06H 07H 08H 09H 0AH 0DH 0EH 0FH 10H Text/Grafik znrlk Text Text Text Text Grafik Grafik Grafik Text Grafik Grafik Grafik Grafik Grafik Grafik Grafik 40 X 25 40 X 25 80 X 25 80 X 25 320 X 200 320 X 200 640 X 200 80 X 25 160 X 200 320 X 200 640 X 200 320 X 200 640 X 200 640 X 200 640 X 200 Renk 16 gri 16 st/ 8zemin 16 gri 16 st/ 8zemin 4 4 gri 2 Siyah / beyaz 16 16 4 16 16 Siyah / Beyaz 16 Adres B8000 B8000 B8000 B8000 B8000 B8000 B8000 B8000 B8000 B8000 B8000 A0000 A0000 A0000 A0000

EK III. BAZI PROGRAM RNEKLER 1.TEMELLER 1.A MERHABA


.Model small .Stack 64 .Data yaz db 0dh,0ah,'MERHABA ASSEMBLY PROGRAMCILARI. BU ILK PROGRAMINMIZ...$' .Code Ana proc far mov ax,@data mov ds,ax lea dx,yaz call ekran mov ah,4Ch int 21h Ana Endp Ekran proc near mov ah,09h int 21h ret Ekran endp end Ana

1.B; SFRE PROGRAMI SFRE TEK KARAKTER


.Model small .Stack 64 .Data y1 db 0dh,0ah,'lutfen sifreyi girin $' y2 db 0dh,0ah,'sifreyi bildiniz $' hatayaz1 db 0dh,0ah,'sifreyi bilemediniz tekrar deneyin $' hatayaz2 db 0dh,0ah,'sifreyi 3 kez bilemediniz program kapatlacak....$' .Code Ana Proc far mov ax,@data mov ds,ax mov cx,3 lea dx,y1 call ekran don: mov ah,07h int 21h cmp al,'a' je evet call yildiz lea dx,hatayaz1 call ekran loop don lea dx,hatayaz2 call ekran jmp son evet: call yildiz lea dx,y2 call ekran mov ah,7 int 21h son: mov ah,4ch int 21h Ana endp

92

Ekran proc near mov ah,09h int 21h ret Ekran endp yildiz proc near mov dl,'*' mov ah,02 int 21h ret yildiz endp end ana

1.C Data segmentteki sifreyi bulan program


.Model small .Stack 64 .Data y1 db 0dh,0ah, 'Sifreyi girin: $' y2 db 0dh,0ah, 'Sifreyi bildiniz.$' y3 db 0dh,0ah, 'Sifreyi bilemediniz.Tekrar deneyin:$' y4 db 0dh,0ah, 'Sifreyi 3 kez bilemediniz. Program kapatlacak$' key db 'VEDAT' .Code Ana proc far mov ax,@data mov ds,ax lea bx,key mov cx,3 don2:lea dx,y1 call yaz mov si,0 don1: mov ah,07h int 21h cmp al,[bx+si] jne hata call yildiz inc si cmp si,5 jne don1 lea dx,y2 call yaz jmp son hata:call yildiz lea dx,y3 call yaz loop don2 lea dx,y4 call yaz son: mov ah,4ch int 21h Ana endp yaz proc near mov ah,09h int 21h ret yaz endp yildiz proc near

93

mov dl,'*' mov ah,2 int 21h ret yildiz endp end ana

1.D;data segmentteki yaz iinde karakter arayan program


.Model small tampon equ 20 .Stack 64 .Data kar db 'lutfen sifreyi girin' y1 db 0dh,0ah,'aranacak karakteri girin: $' y2 db 0dh,0ah,'aranan karakter bulundu. $' y3 db 0dh,0ah,'aranan karakter bulunamadi. $' y4 db 0dh,0ah,' $' y5 db 0dh,0ah,' Tekrar denemek istermisiniz (e/h)$' .Code Ana Proc far mov ax,@data mov ds,ax lea bx,kar basla:mov si,0 lea dx,y1 call ekran lea dx,y4 call ekran mov ah,01h int 21h don: cmp al,[bx+si] je evet inc si cmp si,tampon jbe don lea dx,y3 call ekran jmp son evet: lea dx,y2 call ekran son: lea dx,y5 call ekran mov ah,01h int 21h cmp al,'e' je basla mov ah,4ch int 21h Ana endp Ekran proc near mov ah,09h int 21h ret Ekran endp end ana

94

1.E data segmentteki yazy ekrana ters olarak yazan program


tampon equ 15 .Model small .Stack 64 .Data yazi db 'Merhaba Assembly' y1 db 0dh,0ah,'Data segmentteki yazi: $' y2 db 0dh,0ah,'Ters olarak yazilan yazi: $' y3 db 0dh,0ah,' $' .Code Ana Proc far mov ax,@data mov ds,ax lea bx,yazi lea dx,y1 call ekran lea dx,y3 call ekran mov si,0 don1:mov dl,[bx+si] mov ah,2 int 21h inc si cmp si,tampon jbe don1 lea dx,y2 call ekran lea dx,y3 call ekran mov si,tampon don2:mov dl,[bx+si] mov ah,2 int 21h dec si cmp si,0 jge don2 son: mov ah,4ch int 21h Ana endp Ekran proc near mov ah,09h int 21h ret Ekran endp end ana

1.F;girilen ASCII sayy ekrana yazan program


.Model small .Stack 64 .Data ynl db 'Yanlis tusa bastiniz', 0dh,0ah,'$' ck db 0dh,0ah,' Girilen ASCII sayy ekrana yazan program.',0dh,0ah,' tusuna basin.',0dh,0ah,'$' y0 db 'Sifir ',0dh,0ah,'$' Programdan ckmak icin esc

95

y1 db 'Bir ',0dh,0ah,'$' y2 db 'iki ',0dh,0ah,'$' y3 db 'Uc ',0dh,0ah,'$' y4 db 'Dort ',0dh,0ah,'$' y5 db 'Bes ',0dh,0ah,'$' y6 db 'Alti ',0dh,0ah,'$' y7 db 'Yedi ',0dh,0ah,'$' y8 db 'Sekiz ',0dh,0ah,'$' y9 db 'Dokuz ',0dh,0ah,'$' y10 db 'On ',0dh,0ah,'$' y11 db 'Onbir ',0dh,0ah,'$' y12 db 'Oniki ',0dh,0ah,'$' y13 db 'Onuc ',0dh,0ah,'$' y14 db 'Ondort ',0dh,0ah,'$' y15 db 'Onbes ',0dh,0ah,'$' .Code Ana Proc far mov ax,@data mov ds,ax lea dx,ck call ekran tekrar: mov ah,0 int 16h cmp ah,1h je son cmp al,'0' jb tekrar cmp al,58h ;Ascii 9 dan bir sonraki karakter ja hatali1 call sayi jmp tekrar hatali1: cmp al,'a' jb hatali2 cmp al,'f' ja hatali2 call sayi jmp tekrar hatali2: lea dx,ynl call ekran jmp tekrar son: mov ah,4ch int 21h Ana endp sayi proc near cmp al,'0' jne dn1 lea dx,y0 call ekran jmp subcik dn1:cmp al,'1' jne dn2 lea dx,y1 call ekran jmp subcik dn2:cmp al,'2' jne dn3 lea dx,y2

96

call ekran jmp subcik dn3:cmp al,'3' jne dn4 lea dx,y3 call ekran jmp subcik dn4:cmp al,'4' jne dn5 lea dx,y4 call ekran jmp subcik dn5:cmp al,'5' jne dn6 lea dx,y5 call ekran jmp subcik dn6:cmp al,'6' jne dn7 lea dx,y6 call ekran jmp subcik dn7:cmp al,'7' jne dn8 lea dx,y7 call ekran jmp subcik dn8:cmp al,'8' jne dn9 lea dx,y8 call ekran jmp subcik dn9:cmp al,'9' jne dn10 lea dx,y9 call ekran jmp subcik dn10:cmp al,'a' jne dn11 lea dx,y10 call ekran jmp subcik dn11:cmp al,'b' jne dn12 lea dx,y11 call ekran jmp subcik dn12:cmp al,'c' jne dn13 lea dx,y12 call ekran jmp subcik

97

dn13:cmp al,'d' jne dn14 lea dx,y13 call ekran jmp subcik dn14:cmp al,'e' jne dn15 lea dx,y14 call ekran jmp subcik dn15: cmp al,'f' jne subcik lea dx,y15 call ekran subcik:ret sayi endp Ekran proc near mov ah,09h int 21h ret Ekran endp end ana

1.G; Ascii karakterlerini ekranda gsterir


.MODEL SMALL .STACK 64 .DATA CHAR DB 00,' $' MESAJ1 DB '-----------ASCII KODLARINI GORUNTULEME PROGRAMI-----------',0DH,0AH,'$' .CODE ANA PROC FAR MOV AX,@DATA MOV DS,AX LEA DX,MESAJ1 CALL YAZ MOV CX,256 LEA DX,CHAR CALL YAZ INC CHAR LOOP DON

DON:

MOV AH,4CH INT 21H ANA ENDP YAZ PROC NEAR MOV AH,09H INT 21H RET YAZ ENDP END ANA

98

1.H; EKRANA VEYA YAZICIYA YAZI YAZAN PROGRAM


.MODEL SMALL .STACK 64 .DATA MESAJ DB 0DH,0AH,'EGER P TUSUNA BASARSANIZ BU YAZI YAZICIYA GONDERILIR.' DB 0DH,0AH,' YAZMADAN CIKMAK ICIN ESC TUSUNA BASIN.... $' .CODE ANA PROC FAR MOV AX,@DATA MOV DS,AX LEA DX,MESAJ CALL YAZ TEKRAR: mov ah,0 int 16h cmp ah,1;ESC TUSU je son CMP AL,'P' JE YAZICI JMP TEKRAR

YAZICI: MOV AH,5 LEA BX,MESAJ KYAZ: MOV DL,[BX] CMP DL,'$' JE SON INT 21H INC BX JMP KYAZ SON: MOV AH,4CH INT 21H ANA ENDP YAZ PROC NEAR MOV AH,09H INT 21H RET YAZ ENDP END ANA

1.I 0-9999 arasindaki decimal sayilari hexadecimal sayilara dondurur


.Model Small .Stack 64 .Data Yaz1 db 0dh,0ah,' 0-9999 arasindaki decimal sayilari hexadecimal sayilara dondurur ', 0dh,0ah,' ESC tusuna basin..',0dh,0ah,'$' y1 db 0dh,0ah,' Decimal : $' y2 db 0dh,0ah,' Hexadecimal: $' cik db 0dh,0ah,' Programi kullandginiz icin tesekkuler $' _enter db 0dh,0ah,'$' sayi db 0 .Code Ana Proc far Mov ax,@data Mov ds,ax

Cikmak icin

99

lea dx,yaz1 call yaz basadon: lea dx,y1 call yaz MOV BX,0 mov sayi,0 tekrar: add sayi,1 ytekrar: mov ah,0 int 16h cmp ah,1h je son cmp al,'0' jb hatali cmp al,58h ;Ascii 9 dan bir sonraki karakter ja hatali mov dl,al mov ah,02h int 21h CALL DESI cmp sayi,4 jne tekrar lea dx,y2 CALL yaz CALL BINE lea dx,_enter CALL yaz jmp basadon hatali: JMP ytekrar son: lea dx,cik call yaz mov ah,4ch int 21h Ana endp

DESI PROC NEAR SUB AL,30H CBW XCHG AX,BX MOV CX,10 MUL CX XCHG AX,BX ADD BX,AX RET DESI ENDP BINE PROC NEAR MOV CH,4 DON: MOV CL,4 ROL BX,CL MOV AL,BL AND AL,0FH ADD AL,30H CMP AL,3AH JL EKRAN ADD AL,07H ; BINE ALT PROGRAMI

100

EKRAN: MOV DL,AL MOV AH,02H INT 21H DEC CH JNZ DON RET BINE ENDP YAZ Proc NEAR Mov ah,09h int 21h RET Yaz ENDP END ana

1.J iki sayiyi toplayip sonucu data segmentte kayit eden program
.model small .stack 64 .data Sonuc db (?) Mesaj db 'iki sayiyi toplayip sonucu data segmentte kayit eden program$' Sayi1 db '1.sayiyi giriniz..:$' Sayi2 db '2.sayiyi giriniz..:$' Toplam db 'iki sayInIn toplamI=$' _enter db 0dh,0ah,'$' .code ana proc far mov ax,@data mov ds,ax lea dx,mesaj call yaz tkr:lea dx,_enter call yaz lea dx,Sayi1 call yaz ht1:call oku cmp al,'0' jb ht1 cmp al,58h ;Ascii 9 dan bir sonraki karakter ja ht1 sub al,30h ; 30 ascii 0 mov cl,al lea dx,_enter call yaz lea dx,Sayi2 call yaz ht2:call oku cmp al,'0' jb ht2 cmp al,58h ;Ascii 9 dan bir sonraki karakter ja ht2 sub al,30h add cl,al lea dx,_enter

101

call yaz lea dx,toplam call yaz mov dl,cl add dl,'0' ;ascii ye cevir mov ah,02h int 21h mov [sonuc],cl jmp tkr mov ah,4ch int 21h ana endp yaz proc near mov ah,09h int 21h ret yaz endp oku proc near mov ah,1 int 21h ret oku endp end ana

2.EKRAN 2.A
.Model small kirmizi equ 4 .Code Ana Proc far mov al,10h mov ah,0 int 10h MOV BH, 0 MOV AH, 0CH MOV AL, kirmizi MOV DX, 100 MOV CX, 50 INT 10H INC CX CMP CX,500 JNE DON mov ah,0 int 16h MOV AH,4CH INT 21H ANA ENDP END ANA

DON:

2.B
.model small Mavi equ 1

102

Yesil equ 2 Cyan equ 3 kirmizi equ 4 ciz macro x1,x2,y1,y2,renk local don1,don2 mov ah,0ch mov al,renk mov dx,y1 mov cx,x1 int 10h inc cx cmp cx,x2 jne don1 inc dx cmp dx,y2 jne don2

don2: don1:

endm .data myok db 'mouse yok $' m2 db '2 tuslu mouse $' m3 db '3 tuslu mouse $' .code ana proc far mov ax,@data mov ds,ax mov ah,0fh int 10h push ax mov ah,0 mov al,10h int 10h mov ax,0 int 33h cmp ax,0 je mouseyok cmp bx,2 je _2tuslumouse lea dx,m3 call yaz jmp git ;3 tuslu mouse

_2tuslumouse:lea dx,m2 ;2 tuslu mouse call yaz jmp git mouseyok:lea dx,myok call yaz jmp son git: mov bh,0 ciz 0,159,330,349,mavi

103

ciz 160,319,330,349,yesil ciz 320,479,330,349,kirmizi ciz 480,639,330,349,cyan mov ax,1 int 33h don: mov ax,3 int 33h cmp bx,3 je son jmp don

son:

pop ax mov ah,0 int 10h mov ah,4ch int 21h ana endp yaz proc near mov ah,09h int 21h ret yaz endp

end ana

2.C
.Model small .data myok db 'mouse yok $' m2 db '2 tuslu mouse, soltus pixel basar,renk okur,ikitus programdan ckar $' m3 db '3 tuslu mouse $' s1 dw 0 rnk db 5 .code ana proc far mov ax,@data mov ds,ax mov ah,0fh int 10h push ax mov cx,0 call ekran call faretest cmp cx,0 je son1 ; call ekranbeyaz call paletciz mov ax,1 int 33h call fare son1:pop ax mov ah,0 int 10h mov ah,4ch

104

int 21h ana endp

fare proc near bekle: mov ax,3 int 33h cmp bx,1 je pixel cmp bx,3 je cik jmp bekle pixel:cmp dx,440 ja renkoku mov ah,0Ch mov bh,0 mov al,rnk int 10h jmp bekle renkoku: mov ax,2 ;fareyi gizle int 33h mov ah,0Dh mov bh,0 int 10h mov rnk,al mov ax,1 int 33h jmp bekle cik:ret fare endp paletciz proc near push ax push bx push cx push dx pushf mov bh,0 mov ah,0ch mov dx,440 don2:mov s1,40 mov al,0 mov cx,0 don1:int 10h inc cx cmp cx,s1 jle don1 inc al add s1,40 cmp cx,639 jle don1 inc dx cmp dx,479 jle don2 popf pop dx pop cx pop bx

105

pop ax ret paletciz endp ekranbeyaz proc near push ax push bx push cx push dx pushf mov bh,0 mov al,0fh mov ah,0ch mov dx,0 don12:mov cx,0 don11:int 10h inc cx cmp cx,639 jle don11 inc dx cmp dx,479 jle don12 popf pop dx pop cx pop bx pop ax ret ekranbeyaz endp faretest proc near push ax push bx pushf mov ax,0 int 33h cmp ax,0 je msyok cmp bx,2 je _2tus lea dx,m3 ;3 tuslu mouse call yaz jmp git _2tus:lea dx,m2 ;2 tuslu mouse call yaz jmp git msyok:lea dx,myok call yaz jmp son2 git:mov cx,1 ;fare varsa 1, yoksa 0 son2:popf pop bx pop ax ret faretest endp ekran proc near push ax mov bh,0 mov ah,0 mov al,12h int 10h

106

pop ax ret ekran endp yaz proc near push ax mov ah,09h int 21h pop ax ret yaz endp end ana

2.D;Grafi modda ekrana mouse ile pixel koyarak ekil izer


wx1 equ 10 wy1 equ 15 wx2 equ 605 wy2 equ 460 clr equ 14 datasg segment def_m dw 03FFFh,01FFFh,00FFFh,007FFh,003FFh,001FFh,000FFh,0007Fh dw 0003Fh,0001Fh,001FFh,010FFh,030FFh,0F87Fh,0F87Fh,0FC3Fh dw 00000h,04000h,06000h,07000h,07800h,07C00h,07E00h,07F00h dw 07F80h,07FC0h,07C00h,04600h,00600h,00300h,00300h,00000h pen1_m dw 0FFFBh,0FFF1h,0FFE0h,0FFC1h,0FF83h,0FF07h,0FE0Fh,0FC1Fh dw 0F83Fh,0F07Fh,0E0FFh,0C1FFh,081FFh,083FFh,087FFh,03FFFh dw 00000h,00004h,0000Ah,00014h,00028h,00050h,000A0h,00140h dw 00280h,00500h,00A00h,01400h,03C00h,02800h,04000h,08000h pen2_m dw 0FFF1h,0FFE0h,0FFC1h,0FF83h,0FF07h,0FE0Fh,0FC1Fh,0F83Fh dw 0F07Fh,0E0FFh,0C1FFh,081FFh,083FFh,087FFh,03FFFh,001FFh dw 00004h,0000Ah,00014h,00028h,00050h,000A0h,00140h,00280h dw 00500h,00A00h,01400h,03C00h,02800h,04000h,08000h,0FC00h frame db 1 dup(?) mes1 db 'Mouse not found$' mes2 db 'MUTBMYO Bilgisayar Program Assembly Dersi devi.$' colour db 1 dup(?) x1 dw 1 dup(?) y1 dw 1 dup(?) x2 dw 1 dup(?) y2 dw 1 dup(?) datasg ends codesg segment main_prog proc far assume cs:codesg,ds:datasg,es:datasg push ds xor ax,ax push ax mov ax,datasg mov ds,ax mov es,ax mov ax,00h int 33h cmp ax,00h je aborted ;initialize mouse

mov ax,0012h ;set display mode = 12h int 10h

107

mov mov mov mov

x1,wx1 x2,wx2 y1,wy1 y2,wy2

Call SetWindow Call SetColoursBar mov mov mov mov x1,607 x2,639 y1,wy1 y2,272

Call SetWindow mov ah,02h mov dx,1D01h int 10h mov ah,09h lea dx,mes2 int 21h mov ax,01h int 33h ;display mouse cursor

mov frame,1 Call SetMouseFrame lea di,colour mov al,0Ah ;default colour = 0Ah = 10 = LightGreen mov [di],al Call MouseControl jmp mainFin aborted: mov ah,09h lea dx,mes1 int 21h ret mainFin: mov ax,0003h int 10h ret main_prog endp MouseControl proc near rpt: push cx push dx mov ax,03h int 33h cmp bx,01h je putpixel_crc pop dx pop cx cmp bx,02h je fin jmp rpt putpixel_crc: pop ax pop bx cmp dx,ax jne putpixel

108

cmp cx,bx jne putpixel jmp rpt putpixel: cmp cx,wx1 jle GetColour_crc cmp dx,wy1 jle GetColour_crc cmp cx,wx2 jge GetColour_crc cmp dx,wy2 jge GetColour_crc mov ax,02h ;hide mouse cursor int 33h mov ah,0Ch mov bx,0000h mov al,[di] int 10h mov ax,01h ;display mouse cursor int 33h jmp rpt GetColour_crc: lea si,y1 cmp dx,[si] jle rpt lea si,y2 cmp dx,[si] jge rpt lea si,x1 cmp cx,[si] jle rpt lea si,x2 cmp cx,[si] jge rpt push dx push cx mov ax,02h ;hide mouse cursor int 33h pop cx pop dx mov ah,0Dh mov bh,00h int 10h lea di,colour mov [di],al mov ax,01h ;display mouse cursor int 33h jmp rpt fin: ret MouseControl endp SetColoursBar proc near mov dx,014Ch mov bx,0000h mov cx,04h countClr: mov ah,02h int 10h mov ax,0ADBh int 10h

109

add dh,01h inc bl cmp bl,0Fh jle countClr ret SetColoursBar endp SetWindow proc near lea si,x1 mov cx,[si] lea si,y1 mov dx,[si] mov ah,0Ch mov al,clr mov bx,0000h dot: push cx push dx lea si,y1 mov dx,[si] int 10h ; (cx,y1) lea si,y2 mov dx,[si] int 10h ; (cx,y2) pop dx lea si,x1 mov cx,[si] int 10h ; (x1,dx) lea si,x2 mov cx,[si] int 10h ; (x2,dx) pop cx lea si,x2 cmp cx,[si] jl rptX lea si,y2 cmp dx,[si] jl rptY jmp finProc rptX: inc cx jmp dot rptY: inc dx jmp dot finProc: ret SetWindow endp SetMouseFrame proc near mov ax,09h mov bx,00h cmp frame,0 je default cmp frame,1 je pn1 cmp frame,2 je pn2 jmp abortFrm default: mov cx,01h lea dx,def_m

110

jmp done pn1: mov cx,0Fh lea dx,pen1_m jmp done pn2: mov cx,0Fh lea dx,pen2_m jmp done done: int 33h abortFrm: ret SetMouseFrame endp codesg ends end main_prog

3.KLAVYE
clr0 equ 00h ;siyah clr1 equ 09h ;mavi clr2 equ 0Ah ;yesil clr3 equ 0Ch ;kirmizi clr4 equ 05h ;mor clr5 equ 06h ;kahverengi clr6 equ 07h ;beyaz clr7 equ 08h ;gri clr8 equ 0eh ;sari clr9 equ 0fh ;parlak beyaz escCD equ 1Bh up equ 48h down equ 50h left equ 4Bh right equ 4Dh key0 equ 30h key1 equ 31h key2 equ 32h key3 equ 33h key4 equ 34h key5 equ 35h key6 equ 36h key7 equ 37h key8 equ 38h key9 equ 39h ;***********data segment******** datasg SEGMENT m1 db m2 db m3 db datasg '0=siyah 1=mavi 2=yesil 3=kirmizi 4=mor 5=kahve 6=beyaz 7=gri$' '8=sari 9=P.beyaz $' 'cikmak iin < ESC > tuslarina basin $' ends

;******** code segment ******** codesg SEGMENT ;******* main_prog proc ******* main_prog PROC far assume cs:codesg assume ds:datasg push ds

111

xor ax,ax push ax mov ax,datasg mov ds,ax mov ax,0012h ; ekranin modunu MOD12 grafik int 10h ; moduna ayarla

lea dx,m1 mov ah,9h int 21h lea dx,m2 mov ah,9h int 21h lea dx,m3 mov ah,9h int 21h

; ekrana m1 mesajini yaz

; ekrana m2 mesajini yaz

; ekrana m3 mesajini yaz

; kursorun baslangic yeri ve degeri mov cx,320 ; x coord mov dx,240 ; y coord mov bl,clr1

rpt: mov ah,0Ch ; ekrana bir nokta bas mov al,bl ; basilan noktanin renk degeri = BL int 10h ; basilan noktanin koordinati = DX ve CX registeri iinde mov ah,07h ; klavyeden bir karakter oku int 21h cmp al,escCD ; basilan tus esc ise cik je fin cmp al,key0 ; basilan tus 0 ise renk 0'a git je color0 cmp al,key1 ; basilan tus 1 ise renk 1'a git je color1 cmp al,key2 ; basilan tus 2 ise renk 2'a git je color2 cmp al,key3 ; basilan tus 3 ise renk 3'a git je color3 cmp al,key4 ; basilan tus 4 ise renk 4'a git je color4 cmp al,key5 ; basilan tus 5 ise renk 5'a git je color5 cmp al,key6 ; basilan tus 6 ise renk 6'a git je color6 cmp al,key7 ; basilan tus 7 ise renk 0'a git je color7

112

cmp al,key8 ; basilan tus 8 ise renk 8'a git je color8 cmp al,key9 ; basilan tus 9 ise renk 9'a git je color9 cmp al,00h je arrow jmp rpt arrow: mov ah,07h ; klavyeden bir karakter oku int 21h cmp al,up ; yukari ok tusuna basilmissa je up1 ; up1 e git cmp al,down ; asagi ok tusuna basilmissa je down1 ; down1 e git cmp al,left ; sol ok tusuna basilmissa je left1 ; left1 e git cmp al,right ; sag ok tusuna basilmissa je right1 ; right1 e git jmp rpt up1: dec dx jmp rpt down1: inc dx jmp rpt ; yukari ok tusuna basilmissa ; y koordinant degerini bir arttir ; herhangi bir tusa basilmamissa ok tuslarna git

; asagi ok tusuna basilmissa ; y koordinant degerini bir azalt

left1: ; sol ok tusuna basilmissa dec cx ; x koordinant degerini bir azalt jmp rpt right1: inc cx jmp rpt ; sag ok tusuna basilmissa ; y koordinant degerini bir artir

; ekrana basilan noktanin renk degerini ; basilan tusun renk degerine gore degistir. color0: mov jmp color1: mov jmp color2: mov jmp color3: mov jmp color4: mov

bl,clr0 rpt bl,clr1 rpt bl,clr2 rpt bl,clr3 rpt bl,clr4

113

jmp rpt color5: mov bl,clr5 jmp rpt color6: mov bl,clr6 jmp rpt color7: mov bl,clr7 jmp rpt color8: mov bl,clr8 jmp rpt color9: mov bl,clr9 jmp rpt fin: mov ax,0003h int 10h ret main_prog endp codesg ends end main_prog

; ekranin modunu MOD 3 text moduna ayarla

4. STRNG string komutlarnin kullanilmasi


DATASG SEGMENT ISIM_1 DB 'ASSEMBLERS' ISIM_2 DB 10 DUP (' ') ISIM_3 DB 10 DUP (' ') DATASG ENDS CODESG SEGMENT BASLA PROC FAR ASSUME CS:CODESG,DS:DATASG,ES:DATASG PUSH DS XOR AX,AX PUSH AX MOV AX,DATASG MOV DS,AX MOV ES,AX CALL ALT_1 CALL ALT_2 CALL ALT_3 CALL ALT_4 CALL ALT_5 CALL ALT_6 RET BASLA ENDP ALT_1 PROC NEAR CLD LEA SI,ISIM_1 LEA DI,ISIM_2 MOV CX,10 ;movsb komutunun kullanilmasi

114

REP MOVSB RET ALT_1 ENDP ALT_2 PROC NEAR CLD LEA SI,ISIM_2 LEA DI,ISIM_3 MOV CX,05 REP MOVSW RET ALT_2 ENDP ALT_3 PROC NEAR CLD LEA SI,ISIM_1 LODSW RET ALT_3 ENDP ALT_4 PROC NEAR CLD LEA DI,ISIM_3 MOV CX,05 MOV AX,2020H REP STOSW RET ALT_4 ENDP ALT_5 PROC NEAR CLD LEA SI,ISIM_1 LEA DI,ISIM_2 MOV CX,10 REPE CMPSB JNE GIT_1 MOV BH,01 GIT_1: LEA SI,ISIM_2 LEA DI,ISIM_3 MOV CX,10 REPE CMPSB JE GIT_2 MOV BH,02 GIT_2: RET ALT_5 ENDP ALT_6 PROC NEAR CLD LEA DI,ISIM_2 MOV CX,10 MOV AL,'A' REPNE SCASB JNE DON_1 MOV AH,03 DON_1: RET ALT_6 ENDP CODESG ENDS END BASLA ;movsw komutunun kullanilmasi

;lodsw komutunun kullanilmasi

;stosw komutunun kullanilmasi

;cmpsb komutunun kullanilmasi

;scasb komutunun kullailmasi

115

5. DOSYALAMA 5.A ismi girilen bir dizini siler


.model small .data dizin_adi db 49 db ? db 50 dup (?) m1 db 0dh,0ah,'Dizin adini girin :$' mhata db 'hata$' satir db 0dh,0ah,'$' .code ana proc far mov ax,@data mov ds,ax lea dx,m1 call yaz lea dx,dizin_adi mov ah,0ah int 21h lea dx,satir call yaz mov bl,dizin_adi+1 mov bh,0 mov [dizin_adi+bx+2],0 lea dx,dizin_adi+2 mov ah,3Ah int 21h jc hata jmp son hata:lea dx,mhata call yaz son: mov ah,4ch int 21h ana endp yaz proc near mov ah,09h int 21h ret yaz endp end ana

5.B ;ismi girilen bir dizin olusturur


.model small .data dizin_adi db 49 db ? db 50 dup (?) m1 db 0dh,0ah,'Dizin adini girin :$' mhata db 'hata$' satir db 0dh,0ah,'$'

.code

116

ana proc far mov ax,@data mov ds,ax lea dx,m1 call yaz lea dx,dizin_adi mov ah,0ah int 21h lea dx,satir call yaz mov bl,dizin_adi+1 mov bh,0 mov [dizin_adi+bx+2],0 lea dx,dizin_adi+2 mov ah,39h int 21h jc hata jmp son hata:lea dx,mhata call yaz son: mov ah,4ch int 21h ana endp yaz proc near mov ah,09h int 21h ret yaz endp end ana

5.c ismi girilen bir dosyay siler


.model small .data dosya_adi

giris_mesaji hata_mesaji yeni_satir .code ana proc far mov ax,@data mov ds,ax isim_gir: lea dx,giris_mesaji call yaz lea dx,dosya_adi mov ah,0ah int 21h

db 49 db ? db 50 dup (?) db 0dh,0ah,'Dosya adini girin :$' db 'hata$' db 0dh,0ah,'$'

117

lea dx,yeni_satir call yaz mov bl,dosya_adi+1 mov bh,0 mov [dosya_adi+bx+2],0 lea dx,dosya_adi+2 mov ah,41h int 21h jc hata jmp son hata:lea dx,hata_mesaji call yaz son:mov ah,4ch int 21h ana endp yaz proc near mov ah,09h int 21h ret yaz endp end ana

5.D ismi girilen bir dosyay aar


.model small .data dosya_adi db 49 db ? db 50 dup (?) m1 db 0dh,0ah,'Dosya adini girin :$' mhata db 'hata$' satir db 0dh,0ah,'$' acildi db 0dh,0ah,'Dosya acildi $' .code ana proc far mov ax,@data mov ds,ax lea dx,m1 call yaz lea dx,dosya_adi mov ah,0ah int 21h lea dx,satir call yaz mov bl,dosya_adi+1 mov bh,0 mov [dosya_adi+bx+2],0 lea dx,dosya_adi+2 mov al,0 mov ah,3dh int 21h jc hata lea dx,acildi call yaz jmp son

118

hata:lea dx,mhata call yaz son: mov ah,4ch int 21h ana endp yaz proc near mov ah,09h int 21h ret yaz endp end ana

5.E ;ismi girilen bir dosyay okur, ekrana yazar


.model small .data dosya_adi db 49 db ? db 50 dup (?) db 4000 dup (?)

dosya_buffer

giris_mesaji db 0dh,0ah,'Dosya adini girin :$' hata_mesaji db 'hata olustu$' yeni_satir dosyaboyu .code ana proc far mov ax,@data mov ds,ax db 0dh,0ah,'$' dw 4000

lea dx,giris_mesaji call yaz lea dx,dosya_adi ;dosya adn gir mov ah,0ah int 21h mov bl,dosya_adi+1 ;asciiz mov bh,0 mov [dosya_adi+bx+2],0

lea dx,dosya_adi+2 ;dosya ac mov al,0 mov ah,3dh int 21h jc hata ;dosya ac hatas push ax ;hande no sakland mov bx,ax oku:mov cx,dosyaboyu ;dosya oku lea dx,dosya_buffer mov ah,3fh int 21h jc hata1 ;dosya oku hatas cmp ax,0

119

je son1 ;ekrana bas mov cx,ax ;ax okunan dosya boyutu lea si,dosya_buffer ekrana: mov ah,2 mov dl,[si] cmp dl,1ah ;1A=EOF je son int 21h inc si loop ekrana son1:pop bx ;dosya kapat mov ah,3eh int 21h jmp son hata1:pop bx mov ah,3eh int 21h hata:lea dx,hata_mesaji call yaz son:mov ah,4ch int 21h ana endp yaz proc near mov ah,09h int 21h ret yaz endp end ana

5.F ismi girilen bir dosyay aar ve iine yaz yazar


.model small .data dosya_adi db 50 db ? db 50 dup (?) db 200 db ? db 200 dup (?) dw ? db 0dh,0ah,'Dosya adini girin :$' db 0dh,0ah,'kayit edilecek bilgiyi girin: db 'hata$' db 'bu isimde dosya var $' db 0dh,0ah,'$' $'

dosya_buffer

handle giris_mesaji1 giris_mesaji2 hata_mesaji ikaz yeni_satir .Code

120

ana proc far push ds mov ax,0 push ax mov ax,@data mov ds,ax tekrar: lea dx,giris_mesaji1 ;dosya adn girin call yaz lea dx,dosya_adi call oku lea dx,yeni_satir call yaz mov bl,dosya_adi+1 ; asciiz dosya ad mov bh,0 mov [dosya_adi+bx+2],0 lea dx,dosya_adi+2 mov al,1 mov ah,3dh int 21h jc dosya_yok lea dx,ikaz call yaz jmp tekrar ret ; oku ve yazmak icin dosyay ac

; bu isimde dosya var

dosya_yok: ; bu isimde dosya yoksa dosya olustur lea dx,dosya_adi+2 mov cx,0h ;cx dosya znitelii(bak intr.xls dosyas) mov ah,3ch int 21h jc hata mov handle,ax lea dx,giris_mesaji2 ;mesaj kayt edilecek bilgiyi gir call yaz lea dx,yeni_satir call yaz satir_gir: lea dx,dosya_buffer call oku cmp dosya_buffer+2,0dh je cikis ;enter baslrsa ck

mov bl,dosya_buffer+1 ;dosya sonuna enter koy mov bh,0 mov [dosya_buffer+bx+2],0dh ;0dh+0Ah=enter mov [dosya_buffer+bx+3],0ah add dosya_buffer+1,2 ;dosya boyunu 2 arttr lea dx,yeni_satir

121

call yaz mov bx,handle ;data segmetteki bilgileri dosyaya yaz lea dx,dosya_buffer+2 mov cl,dosya_buffer+1 ; yazlacak byte says mov ch,0 mov ah,40h int 21h jc hata cmp al,dosya_buffer+1 jne hata jmp satir_gir cikis: mov bx,handle mov ah,3eh int 21h jc hata ;dosyay kapat ; yazlacak byte ile yazlan esit deilse hatal

ret ;hatasz sonlandrma hata: lea dx,hata_mesaji call yaz ret ana endp cls proc near push ax push bx push cx push dx mov ah,6 mov al,0 mov ch,0 mov cl,0 mov dh,0 mov dl,24 mov dl,79 mov bh,7 int 10h pop dx pop cx pop bx pop ax ret cls endp cursor proc near push ax push bx push dx mov ah,2 mov dh,0 mov dl,0 mov bh,0 int 10h pop dx pop bx pop ax

122

ret cursor endp yaz proc near push ax mov ah,09h int 21h pop ax ret yaz endp oku proc near push ax mov ah,0Ah int 21h pop ax ret oku endp end ana

6.KTPHANE KULLANIMI 6.A Ktphane dizin sil


.model small extrn sil:far .code ana proc far call sil mov ah,4ch int 21h ana endp end ana .model small public sil .data dizin_adi db 49 db ? db 50 dup (?) m1 db 0dh,0ah,'Dizin adini girin :$' mhata db 'hata$' satir db 0dh,0ah,'$' .code sil proc far mov ax,@data mov ds,ax lea dx,m1 call yaz lea dx,dizin_adi mov ah,0ah int 21h lea dx,satir call yaz mov bl,dizin_adi+1 mov bh,0 mov [dizin_adi+bx+2],0 lea dx,dizin_adi+2 mov ah,3Ah int 21h jc hata jmp son

123

hata:lea dx,mhata call yaz son: ret sil endp yaz proc near mov ah,09h int 21h ret yaz endp end sil

6.B Ktphane dizin yap


.model small public dizin .data dizin_adi db 49 db ? db 50 dup (?) m1 db 0dh,0ah,'Dizin adini girin :$' mhata db 'hata$' satir db 0dh,0ah,'$' .code dizin proc far mov ax,@data mov ds,ax lea dx,m1 call yaz lea dx,dizin_adi mov ah,0ah int 21h lea dx,satir call yaz mov bl,dizin_adi+1 mov bh,0 mov [dizin_adi+bx+2],0 lea dx,dizin_adi+2 mov ah,39h int 21h jc hata jmp son hata:lea dx,mhata call yaz son: ret dizin endp yaz proc near mov ah,09h int 21h ret yaz endp end dizin .model small extrn dizin:far .code yap proc far call dizin mov ah,4ch int 21h yap endp end yap

124

6.C Ktphane dosya oku


.model small public dosyaoku .data dosya_adi db 49 db ? db 50 dup (?) dosya_buffer db 400 dup (?) giris_mesaji db 0dh,0ah,"Dosya adini girin :$" yeni_satir db 0dh,0ah,"$" dosyaboyu dw 4000 m1 db 0dh,0ah,"Dosya acilamadi :$" m2 db 0dh,0ah,"Dosya okunamdi :$" .code dosyaoku proc far mov ax,@data mov ds,ax lea dx,giris_mesaji call yaz lea dx,dosya_adi mov ah,0ah int 21h lea dx,yeni_satir call yaz mov bl,dosya_adi+1 ;asciiz mov bh,0 mov [dosya_adi+bx+2],0 lea dx,dosya_adi+2 mov al,0 mov ah,3dh int 21h mov bx,ax jc acilamadi ;dosya ac ;dosya adn gir .Model small extrn dosyaoku :far .code ana proc far call dosyaoku mov ah,4ch int 21h ana endp end ana

;hande no sakland ;dosya ac hatas

mov cx,dosyaboyu ;dosya oku lea dx,dosya_buffer mov ah,3fh int 21h jc okunamadi ;dosya oku hatas cmp ax,0 je son1 ; ekrana bas mov si,bx ;s handel no mov cx,ax ;ax okunan dosya boyutu lea bx,dosya_buffer ekrana: mov ah,2 mov dl,[bx] ; cmp dl,1ah ;1A=EOF ; je son int 21h inc bx loop ekrana

125

son1:mov bx,si mov ah,3eh int 21h jmp son okunamadi: lea dx,m1 call yaz hata1:mov ah,3eh int 21h jmp son acilamadi: lea dx,m2 call yaz son:mov ah,4ch int 21h dosyaoku endp yaz proc near mov ah,09h int 21h ret yaz endp end dosyaoku

;dosya kapat

7.MAKROLAR
.Model small .Code topla macro x1,x2,toplam local git mov al,x1 mov ah,x2 add ah,al cmp ah,9 je git mov toplam,ah git: mov toplam,ah endm Ana proc far topla 2,3,dl topla 4,6,bh topla 14,1,ch mov ah,4ch int 21h ana endp end ana

126

8.ASSEMBLY LE PASCAL ARASINDA BALANTI


.Model small public ekran1 .Code ekran1 Proc near mov dl,'A' mov ah,2 int 21h ret ekran1 ENDP END program disAssemblerCagrisi; uses crt; {$L pascal1.obj} Procedure ekran1;external; Begin clrscr; ekran1; readln; end.

.Model small extrn astring:byte public ekran2 .Data

program disAssemblerCagrisi; uses crt; {$L pascal2.obj} const astring:string[25]='Bu bir deneme satiridir $';

.Code ekran2 Proc near mov ax,@data mov ds,ax lea dx,astring mov ah,9 int 21h ret ekran2 ENDP END Procedure ekran2;external; Begin clrscr; ekran2; readln; end.

.Model small extrn astring:byte extrn row:byte extrn col:byte public ekran3 .Data .Code ekran3 Proc near mov ax,@data mov ds,ax mov bh,0 mov dl,row mov dh,col mov ah,2 int 10h lea dx,astring mov ah,9 int 21h ret ekran3 ENDP END

program pascal3; {$L PASCAL3.obj} USES CRT; procedure ekran3 (const row,col:integer); external; var row,col:integer; const astring:string[25]='Bu bir deneme satiridir $'; begin write ('Cursor satir degerini girin='); readln (row); write ('Cursor sutun degerini girin='); readln (col); ekran3(row,col); end.

127

Yaplmas gereken ilaveler 2- turbo debug kullanm, program derleme aamalar, derleyicinin, link, lib parametreleri, oluan dosyalarn incelenmesi, (ek 3 olarak ver ) (yok yaz) 3-Baz tablolar (kalvye, port adresleri,...) (ek 4 olarak ver ) (var fotokopi ektir.)

128

You might also like