Professional Documents
Culture Documents
Asm Konu Anlatimi
Asm Konu Anlatimi
DERS
NOTLARI
Konya, 1998
Her ne kadar uzman programc�lar�n �zel alanlarda kulland��� bir dil olarak
tan�mlansa da, programc�lar istedikleri takdirde her t�rl� uygulamay� bu dil ile
geli�tirebilirler yada kulland�klar� �st d�zey dil alt�ndan �a��rabilecekler i
procedurler yazabilirler. ��nk� hemen hemen her dilde assembler i�in destek
bulunmaktad�r.
Dilin en b�y�k avantaj� CPU �evrebirimlerinin ve ana belle�in �ok iyi bir �ekilde
kontrol�n� sa�lamas�d�r. Ayr�ca i�letim sistem fonksiyonlar�n� da �ok kolayl�kla
kullanmak m�mk�nd�r. Assembler program dili derleyicisi kullan�lan ko mutlar�n
birebir makine dili kar��l�klar�n� �retir. Bu nedenle bu dil ile olu�turulan
programlar olabilecek en k�sa programlar olurlar.
Bir assembler program� �al�abilir bir program�n t�m kesimlerinin tam olarak
tan�t�lmas� ile olu�turulabilir. Bu nedenle bir assembler programda minimum �� ana
kesim bulunmal�d�r.
1 - STACK Segment
2 - DATA Segment
3 - CODE Segment
STACK ENDS
DATA ENDS
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DX,MESAJ
MOV AH,09
INT 21H
RET
ANA ENDP
CODE ENDS
END
1. B�LG�N�N TEMS�L�
2- VER� T�PLER�
Bir programlama dilinin temel �zelliklerinden birisi dilin i�inde kullan�lacak olan
veri tipleridir. Burada assembler dilinde kullan�lan en basit veri tiplerinden
bahsedilecektir.
2.1 BYTE
Byte 8 bitten olu�an bir bilgi birimidir. Assembler�da byte ile hem n�merik hemde
alfan�merik bilgileri temsil etmek m�mk�nd�r.
Gerek BYTE gerekse diger veri tiplerinde say�lar i�aretli ve i�aretsiz olarak iki
ana guruba ayr�l�rlar. �aretsiz say�lar t�m veri alan�n� bir b�t�n olarak
degerlendirildi�i bir durumu ifade eder. Say�lar�n i�aretli veya i�aretsiz olmas�
makine a��s�ndan izafi bir durumdur.
Byte iki ana k�s�mdan olu�ur. Her k�s�ma NIBBLE ad� verilir. Her NIBBLE bir
hexadecimal say�y� temsil eder.
1 0 0 0 0 0 0 1
----------- -------------
2.NIBBLE 1.NIBBLE
2.2 WORD
2 Adet Byte ile olu�turulmu� bir yap�d�r. 8088 ve di�er mikroi�lemciler 16 bit
uzunlu�undaki bu yap�y� desteklerler. Word yap�s�n� bir b�t�n olarak
i�leyebilece�iniz gibi y�ksek byte (HB) veya Low byte (LB) olarak da
i�leyebilirsini z.
2.3 DOUBLEWORD
�ki word uzunlu�unda yani 32 bit uzunlu�unda bir yap�d�r. Gerek adreslemede gerekse
b�y�k say�lar�n saklanmas�nda kullan�l�r.
2.4 QUADWORD
3- M�KRO��LEMC� TASARIMI
AX Ah-Al Accumulator
BX Bh-Bl Base
CX Ch-Cl Counter
DX Dh-Dl Data
Segment Registerleri
CS Code Segment
DS Data Segment
SS Stack Segment
ES Extra Segment
Offset Registerleri
IP Instraction Pointer
SP Stack Pointer
BP Base Pointer
SI Stack Information
DI Data Information
Flag Registerleri
Flag
3.1.1 AX YAZMACI
Programlarda en �ok kullan�lan yazma�lardan biridir. Accumulator��n k�salt�lmas�
sonunda olu�an AX yazmac� b�t�n giri� ve ��k� i�lemlerinde ve baz� aritmetik
i�lemlerde kullan�l�r.
AX
--------------------------------------------------------
AH AL
3.1.2 BX YAZMACI
BX
--------------------------------------------------------
BH BL
3.1.3 CX YAZMACI
CX
--------------------------------------------------------
CH CL
3.1.4 DX YAZMACI
DX
--------------------------------------------------------
DH DL
5. DEBUG PROGRAMI
Debug program� exe veya com tipli, diger bir deyi�le makine dili formatl� program
dosyalar�n�n �al�t�r�lmas�, bu programlar�n bellek yerle�imlerinin, cpu �zerindeki
etkilerinin ve verilerinin incelenmesi, de�i�tirilmesi vs. amac�yla ku llan�lan bir
programd�r.
Debug program� ile bir makine dili program� bellege y�kleyebilir, bu program� step
step �al�t�rabilece�iniz gibi program�n belli bir k�sm�n� �al�t�rabilirsiniz veya
program�n makine dili kodlar� �zerinde de�i�iklik yapabilir, programa yeni kodlar
ekleyebilir veya ��karabilirsiniz. Yada herhangi bir program� assembly kullanarak
veya makine dili kullanarak yeniden olu�turabilirsiniz.
Debug program� dos i�letim sisteminin bir par�as�d�r. Bu nedenle dos versionlar�
aras�nda komutlarda veya komut �zelliklerinde de�i�iklikler olabilmektedir. Burada
program�n t�m komutlar�n� anlatmak yerine program yazmay� veya incelemeyi
sa�layacak olan komutlar �zerinde durulacakt�r.
-- A [segment:offset]
�eklindedir.
Komutun �al�t�r�lmas� ile, default veya belirlenen segment ve offset adresi yeni
bir sat�r ba��na yaz�larak bu adresin yan�nda komut giri�i i�in beklenir. Her komut
girilip enter tu�una bas�ld���nda debug ilk �nce girilen komutu yorumlar ve girile
n komut do�ru ise segment ve offset adresleri yaz�lan komut uzunlu�u kadar
art�r�larak yeni komut giri�i i�in beklemeye ba�lar. E�er girilen komut hatal� ise
hata yeri g�sterilerek komutun tekrar girilmesi i�in ayn� segmet ve offset
adreslerinde beklenir. E�er herhangi bir sat�rda komut girilmeyerek enter tu�una
bas�l�rsa debug komut sat�r�na geri d�ner. �rnek;
C>Debug
- A
2054:0100 Push Ds
2054:010C Pop Ds
2054:010D Int 20
2054:010F
- G
Program yaz�l�rken en son girilen komutun offset adresi default offset olarak
al�n�r. A komutundan ��kt�ktan sonra tekrar ayn� komut kullan�l�rsa default
segmentin son kal�nan offseti ekrana getirilir. E�er programa ek yap�lacaksa bu
y�ntem kullan� labilir. Ancak herhangi bir komut de�i�tirilecekse komuta girilirken
de�i�tirilecek sat�r�n segment ve offset adresi verilerek girilmelidir.
5.1.2. G Go Komutu
Go komutu haf�zadaki bir program�n icra ettirilmesi amac� ile kullan�l�r. Komutun
format�;
- G Adres
�eklindedir.
Komuttan sonra verilen Adres parametresi se�imliktir. Adres verilmez ise program
CS;IP ikilisindeki de�erler default olarak al�narak �al�t�r�l�r. Verilen adres her
zaman program�n ba�lat�laca�� adres olarak al�n�r. Bu de�er sadece offset olarak ve
rilebilece�i gibi segmet ve offest olarak da verilebilir.
Haf�zadaki herhangi bir program RET yada INT 20 komutlar�ndan biri ile bitmelidir.
G komutu bu iki assembler komutundan birini icra ettirdi�inde PROGRAM TERMINATED
NORMALLY deyimi ile sona erer. Bahsedilen komutlar program icras�n� sona erdirerek
k omut sat�r�na d�nmeyi sa�lar. Herhangi bir program bu iki komuttan biri ile sona
ermiyor ise makinan�z denetimsiz komutlar y�z�nden kilitlenecek yada istem d��
davranacakt�r.
L Komutu disk �zerindeki herhangi bir program�n belle�e y�klenmesi i�in kullan�l�r.
Komutun herhangi bir parametresi yoktur. Komut N komutu ile ismi belirlenmi�
bulunan program� belle�e y�kler.
N Komutu, L veya W komutu i�in dosya ismi se�mekte kullan�l�r. Komutun kullan�m
�ekli;
- N Dosya Ad�
�eklindedir.
Name komutu Load ve Write komutlar�ndan �nce kullan�larak diskten �a�r�lacak yada
diske yaz�lacak dosyan�n ad�n� belirlemekte kullan�l�r.
- R Register Ad�
Komut registerlerin kullan�m� ile ilgili olmak �zere 3 ayr� g�revi yerine getirir.
- R
2054:0100 IE PUSH DS
FLAGLAR
Overflow
Direction
Interrupt
Sign
Zero
Auxiliary Carry
Parity
Carry
BIT SET (1)
OV
DN
EI
NG
ZR
AC
PE
CY
BIT RESET (0)
NV
UP
DI
PL
NZ
NA
PO
NC
- R F
NV UP EI PL NZ NA PO NC - ZRUP
Trace komutu haf�zada bulunan bir program�n sat�rlar�n�n tek tek veya belli bir
k�sm�n�n �al�t�r�lmas� i�in kullan�l�r. Komutun kullan�m� a�a��da verilmi�tir.
- T=Adres De�er
De�er parametresi ka� adet komutun pe�pe�e icra ettirilece�ini g�sterir. E�er
kullan�lmam� ise bu de�er 1 olarak al�n�r. E�er herhangi bir parametre kullan�lmaz
ise komut CS:IP ile adreslenen yerden ba�layarak 1 komut icra ettirilir ve komutun
icr as�ndan sonra registerlerin de�eri ve i�lenecek olan komut ekranda
g�r�nt�lenir.
- U Adres1 Adres2
�rnek 1
U 101 106
�rnek 2
U 102 106
Bellekteki herhangi bir pro�ram�n bir blok �eklinde diske pro�ram olarak
yaz�lmas�n� sa�lar. Komutun kullan�m �ekli;
W Adres
�eklindedir.
Komuttan sonra verilen adres diske kaydedilecek pro�ram�n ba�lang�� adresidir. E�er
bu parametre verilmezse 0100 offseti default olarak kabul edilir. Diske yaz�lacak
program�n uzunlu�u BX:CX register �iftinden al�n�r.
�rnek;
N Deneme.com
R BX
: 0000
R CX
: 0010
Tanimlar
Tanimlar
STK ENDS
Tanimlar
Tanimlar
DAT ENDS
....
....
ANA ENDP
COD ENDS
END
�eklindedir.
Komut bir isim ile ba�lar. Tan�mlanan isim degi�ken olabilme kurallar�na uygun
herhangi bir harf dizisidir. Tan�mlanan isim program i�inde yap�lacak atamalarda
vb. i�lemlerde kullan�labilir.
Segment anahtar c�mlesi ile ba�layan bir segment ENDS c�mlesi ile son bulmak
zorundad�r.
�rnek
Tanimlar
Tanimlar
STK ENDS
Tanimlar
Tanimlar
STK ENDS
Program i�inde belirlenen segmet kesimlerinden hangisinin hangi register ile takip
edilecegi assembler derleyicisine Assume deyimi ile bildirilir. Komutun kullan�m
�ekli,
�rnek:
Tan�mlar
Tan�mlar
STK ENDS
Tan�mlar
Tan�mlar
DATA ENDS
Proc komutu Code segment i�indeki bir i�lem blogunun tan�mlanmas�n� sa�lar.
Tan�mlanan bloklar bir procedure davranabilirler ve diger bloklar taraf�ndan CALL
komutu ile �a�r�labilirler. Her assembler program� i�inde en az 1 i�lem blogunun
olmas� zo runludur. �lk �al�acak olan blok segment ba�lan��c�ndaki bloktur. Bu
bloktan diger bloklar �a�r�labilir. Eger assembler program �st d�zey dillerden
�a�r�lacak bir program ise ilk �al�acak blok �a�r�lan blok olaca��ndan segment
ba��nda olma zorunlulu�u y oktur. Komutun kullan�l� �ekli;
�eklindedir.
�sim, degi�ken olabilme kurallar�na uymak ko�ulu ile istenen herhangi bir harf
dizisi olabilir. PROC deyiminden sonra gelen tip FAR veya NEAR olabilir. Bu
deyimler ilerideki b�l�mlerde detayl� olarak anlat�lacakt�r. ilk �al�acak b�l�m�n
FAR, dige r b�l�mlerin NEAR olabilece�inin bilinmesi bu b�l�m i�in yeterlidir.
Proc deyimi ile ba�layan herhangi bir program blogu ENDP deyimi ile
sonland�r�lmal�d�r.
�rnek:
STK SEGMENT PARA �STK�
Tan�mlar
STK ENDS
Tan�mlar
DATA ENDS
Push DS
Push SS
CALL ATLA1
BASLA ENDP
RET
ATLA1 ENDP
ENDS
END
Call komutu herhangi bir i�lem blogu i�inden bir ba�ka i�lem blogunu �ag�rmak i�in
kullan�l�r. Komut ayn� segment i�indeki(Near) i�lem bloklar�n� �a��rabilece�i gibi
farkl� segment i�indeki(Far) i�lem bloklar�n� da �a��rabilir. Komutun kullan�l� �
ekli;
CALL �a�r�lan Blok Ad�
Call komutunun i�lenmesi s�ras�nda mikroi�lemci �a�r�lan bloga gitmeden �nce code
segment i�inde bulundu�u adresi stack segment i�ine saklar ve �a�r�lan yere
dallan�r. �a�r�lan blok i�inde i�lemler sona erdikten sonra stack segmente saklanan
adrese tekrar geri d�n�l�r. �a�r�lan blok i�indeki i�lemlerin bitti�i RET komutu
ile belirlenir.
Ret komutu genel olarak parametresiz kullan�l�r ve stack segment i�indeki bilginin
CS:IP ikilisine aktar�lmas�n� sa�lar.
DB
DW
DD
DQ
DT
DUP
Komutlar� ile yap�l�r.
7.1 DB Deyimi
Byte tipi bir degi�kenin veya sabitin tan�mlanmas�n� sa�lar. Tan�mlama byte tipinde
bir alan olabilece�i gibi dizi �eklinde bir alan da olabilir. Tan�mlanan
alan(lar�n) 8 bit olmas� nedeni ile bu alana 0 ile FF aras�nda herhangi bir deger
atanabili r. Deyimin kullan�l� �ekli;
T�m de�i�ken veya sabit tan�mlama deyimleri ile tan�mlanan alanlara ilk deger atama
i�lemleri tan�mlama an�nda ger�ekle�tirilir. E�er tan�mlanan alana deger
atanmayacak ise ilk deger olarak ? atanmal�d�r. A�a��daki atamalar ge�erli
atamalard�r.
SAYI DB 30 ;ilk de�eri 30 olan SAYI sabit/de�i�keni
ABC DB �ADI SOYADI� ;ilk de�eri ADI SOYADI olan karakter dizisi
ilk de�er atamas� s�ras�nda bir dizi olu�turulacak ve dizinin i�ine belirli bir
de�er/de�erler atanacaksa DUP deyimi kullan�l�r.
7.2 DW Deyimi
�eklindedir.
MESAJ DW 1210H
SAYI1 DW ?
SAYI2 DW 10 DUP(0)
SAYI3 DW 0,0AABH,CCCAH
7.3 DD Deyimi
�eklindedir.
MESAJ DD 12100000H
SAYI1 DD ?
SAYI2 DD 10 DUP(0)
SAYI3 DD 0,0AABC12H,0H
7.4 DQ Deyimi
�eklindedir.
MESAJ DQ 12100000H
SAYI1 DQ ?
SAYI2 DQ 10 DUP(0)
SAYI3 DQ 0,0AABC12H,0H
7.5 DT Deyimi
�eklindedir.
MESAJ DT 12100000H
SAYI1 DT ?
SAYI2 DT 10 DUP(0)