ASSEMBLY - ASSEMBLER

Aylar 12-01-03

Arkada�lar bu ilk yaz�mda assemly temel kullan�m� registerler modul ve makrolar�n tan�mlamalar� de�i�ken tiplerini g�rece�iz. Bundan sonraki b�l�mlerimizde s�rekli olarak yazd���m Asm programlar�n� birlikte inceleyece�iz.

Asembler, text (yaz� ) olarak yaz�lan programlar�n makina koduna �evrilmesini sa�lar. " MOV A, 5 " komutunun microcontroller i�in hi� bir anlam� yoktur. Ancak ayn� komut "74 05" olarak ifade edildi�inde anlam kazan�r. Asembler veya daha �st seviye Basic, C, Forthran, Pascal vs. diller makina dili kodlar�n�n bizim anlayaca��m�z hale getirilmi� �eklidir.

Y�ksek seviyeli dillerle birka� sat�rl�k yaz�lan programlar asembler'da birka� veya daha fazla sayfaya kadar ��kabilir. Ayr�ca asembler'da kar���k matematik i�lemlerini yapmak �ok zordur. Kullan�lan en alt seviye dil Asembler 'dir.Bu dil ile program yazmak olduk�a zordur.��nki bu dille program yaz�labilmesi i�in kullan�lan microcontroller veya ( microprocosser )'un mimari yap�s�n�n iyi bilinmesi gerekmektedir.Asembler'i iyi kullanan bir programc� y�ksek seviye dillerine g�re daha g��l�, daha verimli ve daha h�zl� �al��an programlar yazabilir.Ancak program yazma s�resi y�ksek seviyeli dillere g�re �ok daha uzun olur. .

1.ASEMBLER DE KULLANILAN SEMBOLLER :

Semboller say�sal sabitlerin, adreslerin, macrolar�n vb.yerini tutan alfan�merik g�sterimlerdir.Semboller i�in kullan�lan karakterler b�y�k harfler (A-Z), k���k harler (a-z), rakamlar ( 0 - 9 ), soru ( ? ) ve ( _ ) i�aretidir.T�m semboller harf yada ( ? ) veya ( _ ) i�aretleri ile ba�lamal�d�r.

�rnek ,

PI

Ba�la

Seri_port

Adr_1024

?_?_?

Bir sembol rakam ile ba�layamaz. Bir sembol�n kullan�m�nda derleyici t�m sembolleri b�y�k harfe �evirir. Bu nedenle b�y�k ve k���k harfli semboller ayn� de�eri al�r. "reset" ile "RESET" aras�nda fark yoktur.Semboller bir program i�erisinde sadece bir kez tan�mlanabilirler ve 255 karakteri ge�emezler.Ancak derleyici i�in ilk 32 karakter ge�erlidir, di�er karakterler �nemli de�ildir.Baz� semboller kullan�c� taraf�ndan tan�mlanamazlar. Bunlar EQ, NE, HIGH, LOW, MOD, DATA, EQU vs. Mnemonic kodlarda kullan�lan semboller de kullan�c� taraf�ndan kullan�lamazlar.Bunlar MOV, R1, R5, A, AB, C, DPTR, PC vb. Kullan�c� taraf�ndan kullan�lamayacak sembollerin bir listesi EK B' de verilmi�tir.

" ; " (Noktal� virg�l): Derleyicin dikkate almamas� gereken ve genellikle a��klama ihtiyac� hissedilen yerlerde kullan�l�r.

�rnek :

;***********************************************

;BU SATIRLAR A�IKLAMA ���N KULANILMI�TIR.

;DERLEY�C� TARAFINDAN D�KKATE ALINMAZ

;***********************************************

mov r1,#45 ; r1 registerine 45 y�kle.

inc r1 ; r1 registerini 1 art�r.

;========Ba�ka bir a��klama sat�r� ===============

2.ETiKETLER (LABELS) :

Sembollerin �zel durumlar�d�r. Etiketler fiziksel adreslerin yerine, program�n daha iyi anla��labilmesi i�in kullan�l�r.

basla :

mov a,# 3

inc a

sjmp start

Burada " basla " etiket olarak kullan�lm��t�r ve " mov a,#3 " komutunun bulundu�u adresi belirler.

3.ASEMBLER KONTROLLER� :

Asembler kontrolleri ana dosyan�z�n haricindeki yard�mc� dosyalar�, liste dosyas�n�n format�n�, kullan�lacak i�lemlerin modeli gibi kontrollerin yap�lmas�n� sa�lar.Bunlar;

3.1 . $DATE ( Tarih ) :Tarih belirtilir

�rnek :

$ Date ( 15.2.1997 )

3.2 . $INCLUDE ( File ) : Ana program d���ndaki program b�l�mlerini ana programa dahil eder.

�rnek :

$ INCLUDE (TABLO.ASM)

3.3. $MOD51 ve $MOD52 : Programdaki Special Function Register ( SFR ) leri �nceden tan�mlar. " MOD51 " 8051 ve 8031, " MOD52 " 8032 ve 8052 nin registerini tan�mlar.

3.4. $TITLE ( Ba�l�k ) : Ba�l�k belirtir.

�rnek :

$TITLE (�rnek uygulama 1 )

4.MACRO TANIMLAMA :

"Macro" lar programda her zaman tekrar edilen kodlar i�in faydal�d�r.Programc�ya zaman kazand�r�r.Kod bir defa yaz�l�r ve program�n �e�itli yerinde bir�ok defa macro ismiyle kullan�labilir. Macrolar 4 b�l�mden olu�ur.

Isim MACRO [etiket1,etiket2 ...,de�i�ken1,de�i�ken2 ...]

KOD


ENDM


-Macronun ismi


-Macronun etiket ve de�i�kenleri


-Macronun kod'u


-ENDM macro sonunu belirler

�rnek 1 :

ACC (Ak�m�lat�r ) 'deki say�y� 16 ile �arpan bir macro yazal�m.

CARP_ 16 MACRO

RL A ; x 2

RLA ; x 4

RLA ; x 8

RLA ; x 16

ENDM

Bu macro program� i�ersinde ;

:

:

MOV A, # 3

CARP _16 ; ACC i�ersindeki de�er 16 ile �arp�l�r.

:

:

�eklinde kullan�l�r.

�rnek 2 :

ACC (Ak�m�lat�r) i�ersindeki de�ere istenilen bir say�n�n eklenmesi

EKLE MACRO X

ADD A, #X

ENDM

Bu macronun program i�ersinde kullan�lmas�

:

:

MOV A, # 5

EKLE ( 10 ) ; A' ya 10 eklenir ve A i�erisindeki yeni de�er 15 (0FH) olur.

:

:

�rnek 3 :

R0 '�n i�ersindeki de�erin istenilen bir de�erle kar��la�t�r�l�p, o de�ere e�itse istenilen adrese s��rama yap�lmas� .

ESITSE _ GIT MACRO X,L1,L2

SUB R0, # X

JZ L1

LJMP L2

ENDM

Bu macronun program i�ersinde kullan�lmas�

:

DON :

:

:

MOV R0,#10

ESITSE _ GIT 10, ESIT, DON

:

:

ESIT:

:

R0 registerindeki de�er 10 say�s�na e�itse " ESIT " adresine e�it de�ilse " DON " adresine s��rama yap�l�r.

5. ASEMBLER "DIRECTIVE" LERI

Directive'ler sembolleri tan�mlamak, haf�zada yer ay�rmak ve ana dosyan�n�n sonunu belirlemek i�in kullan�l�r.

EQU : Bir sembole bir de�er atamak i�in kullan�l�r. Daha �nce tan�mlanm�� A, R0, R1 ... gibi registerlerin tekrar tan�mlanmas�nda da kullan�labilir.

ON EQU 10

SAYICI EQU R7 ; R7 daha �nce tan�mlanm�� bir registerdir.Fakat ; tekrar tan�mlanm��t�r.Programda direk R7 olarak ; kullan�labilece�i gibi SAYICI ismiyle de ; kullan�labilir. " INC R7 " ile " INC SAYICI " ayn� ; i�lemi yapar.

BES EQM ON/2

A_REG EQU A

DHARF 1 EQU 'D'

SABIT EQU 23

SAYI EQU Sabit +5

CIKIS EQU P1.0 ;Port 1 in 0 numaras� ��k�� olarak tan�mland�.

BIT : Bir sembole haf�zadaki bir " bit " 'in direk adresini atar.Adresin n�merik de�eri 0 - 127 aras�nda ise atanan adres internal memory ( dahili haf�zada) ' dedir, 128 - 255 aras�nda ise atanan adres SFR'lerdedir.

CF BIT 0D7H ;Carry flag (PSW registerinde )

LAMBA _ YAK BIT 6

LAMBA _ S�ND�R BIT LAMBA_YAK+1

DATA : Directive, direk adreslenebilen internal memory adresinin bir sembole atanmas�n� sa�lar .

PSW DATA 0D0H ; Program status adresinin tan�mlanmas�

DIPLAY1 DATA 32H

DISPLAY2 DATA DISPLAY 1+1

PORT1 DATA 90H

XDATA : XDATA , directive ,external ( harici ) data memory adresinin bir sembole atanmas�n� sa�lar. Atanan de�er ( 0- 65535 ) aras�nda olmal�d�r.

BUFFER XDATA 2048

DB : Program memory 'e byte sabitlerin y�klenmesini sa�lar.

�rnek 1 :

TABLO :

DB 1

FB 2

DB 3

DB 5

veya ;

Tablo:

DB 1,2,3,5

�rnek 2:

Mesaj :

DB 'merhaba size'

�rnek 3 :

Kar���k:

DB 2*8 ,'MPG', 2*16, 'abc'

ORG = Kullan�lan mevcut aktif segment yer belirleyicisini tan�mlamak i�in kullan�l�r.Program esnas�nda program�n�z�n hangi adresten ba�layaca��n� belirler.

�rnek 1 :

ORG 0

MOV A , # 10

JMP start

ORG 2000h

start : INC A

:

END

�rnek 2 :

org 1000 h

org RESET ; RESET 'in �nceden tan�mlanm�� olmas� gerekir. (RESET EQU 0)

org RESET +1024

END : End directive program�n�z�n bitti�ini belirtmek i�in program�n�z�n en sonunda kullan�lar.

org 0

Start :

mov a,#40 :

inc a :

:

End

ASEMBLER'IN �RETT��� HATA KODLARI

Derleme esnas�nda yazd���m�z programa $INCLUDE ( dosya ) ile program par�alar� dahil etti�imizde, bu dosyalar�n a��lmas�nda olu�an hata kodu :

FATAL ERROR opening (dosya ismi )

�eklinde bizi uyar�r. Dosya isminin do�ru olup olmad���n� tekrar kontrol etmemiz gerekir.Program�n derlenmesinden sonra

ASEMBLY COMPLETE , 02 ERRORS FOUND

Mesaj� geldi�inde yaz�l�mda 2 hata yapt���m�z� belirtir. " Liste .LST " komutuyla listeyi �a��r�p hatalar�m�z� sat�r sat�r g�rebiliriz. " ESC " tu�una basarak programa tekrar d�nebiliriz.

Yaz�l�mda yap�lan hatalar :

ERROR # 1 : Illegal character :

Yaz�l�mda kullan�lmamas� gereken bir karakterin kullan�ld���n� g�sterir.(kullan�lan karakterler ba�lang�� b�l�mlerinde a��klanm��t�.)

ERROR #2 : Undefined symbol

Tan�mlanmam�� bir sembol kullan�ld���nda olu�ur.

ERROR #3 :Dublicate symbol

Daha �nce tan�mlanm�� bir sembol ikinci kez tekrar tan�mlanmaya �al���l�rsa olu�ur.

ERROR #4 :Illagal digit for radix.

Sembollerin kullan�lmamas� gereken bir karakter veya rakamla ba�lamas� sonucu meydana gelir.

ERROR #5 : Number too large.

Belirtilen say� 16 bit'i ( 65535 ) ge�ti�inde olu�ur.

ERROR #6 : Missing END directive

Ana program sonunda " END " kullan�lmad��� zaman olu�ur.

ERROR #7 : Illegal opcode / directive after label

Etiketten sonra yanl�� opcode veya directive kullan�ld���nda olu�ur.

ERROR #9 : Text beyond END directive

Program sonunda kullan�lan " END " den sonra program yaz�l�m� devam etti�inde olu�ur.

ERROR #10 : Illegal or missing expression

Programda yanl�� veya eksik ifade kullan�lm�� demektir.

ERROR #11 : Illegal or missing expression operator

Programda yanl�� ve eksik bir matematik operat�r� kullan�lm�� demektir.

ERROR #12 :Unbalanced parantheses

Eksik parantez kullan�lm�� demektir.

ERROR #13 :Illegal or missing expression volume

Yanl�� veya eksik sembol veya n�merik de�er kullan�lm��.

ERROR #16 : Division by zero

Programda kullan�lan ifadede, bir say� s�f�ra b�l�nmeye �al��t���nda olu�ur.

ERROR #17 : Illegal bit designator

Bir sembole uygun olmayan bit adresi atamaya �al���ld���nda olu�ur.

ERROR #18 : Target address exceeds relative adress range

SJMP , JZ, JNC gibi ba��l s��rama komutlar�n�n s��ran�lacak adresin 127 byte'� ge�ti�i durumlarda olu�ur.

ERROR #20 :Illegal Operant

Kullan�lan komut uygun de�il.

ERROR #21 :Illegal indirect register

R0 ve R1 haricinde indirect (dolayl�) adresleme yap�ld���nda olu�ur.

ERROR #22 :Missing operant delimiter

Virg�l� eksik komut kullan�lm��.

ERROR #24 :Attempting to EQUate a previosly SET Symbol

SET directive'i ile �nceden tan�mlanm�� sembol'�n EQU ile tekrar tan�mlanmak istendi�inde olu�ur.

ERROR # 25 :Attempting to SET a previosly EQUated Symbol

EQU directive'i ile �nceden tan�mlanm�� sembol'�n SET ile tekrar tan�mlamak istendi�inde olu�ur.

ERROR # 26 :Illegal SET / EQU expression

SET veya EQU directive'lerinden sonra uygun olmayan ifade kullan�lm��.

ERROR # 27 :Illegal expression with forward referans

�fadede hen�z tan�mlanmam�� bir sembol kullan�lm�� .

ERROR # 28 : Adress exceeds Adres range

Belirtilen adres 255'i a�m��

ERROR # 29 :Expecting an EOL or COMMEND

Derleyici bir sat�rdaki komutu derlerken derlenen komuttan sonra sat�r sona ermemi� ise olu�ur.

ERROR # 32 :Byte definition exceeds 255

DB directivite ile kullan�lan bir sabit 255'den b�y�kse olu�ur.

ERROR # 33 : Premature end of string

ASCII harfleri ile meydana gelmi� bir dizi uygun kesme ile sonland�r�lmam�� demektir.

ERROR # 35 :Include file nesting exceeds 8

$INCLUDE ( file ) kontrolu ile programa dahil edilen program par�alar�n�n say�s� 8 say�s�n� ge�erse olu�ur.

ERROR # 36 :Illegal or missing argument

Asembler kontrollerinde eksik veya yanl�� argument kullan�ld���nda olu�ur.

ERROR # 37 :Illegal control statement

Anla��lamayan kontrol ifadesi kullan�ld�. Eksik veya yanl�� olabilir.

ERROR # 38 :Unable to open file

Derlenecek olan dosya a��lamad�

ERROR # 40 :Program synchronization error

Program�n�zda ORG directivite'leri ile tan�mlad���n�z program haf�za adresleri birbirisi i�ine ge�erse ( yani kar���rsa ) olu�ur.

ERROR # 45 : Illegal or missing macro name

MACRO yaz�m� s�ras�nda; uygun olmayan sembol veya 2. defa kullan�lm�� sembol kullan�ld���nda olu�ur.

ERROR # 46 : Macro nesting too deep

Tan�mlanan macrolar 9. seviyeye a�t���nda olur.

ERROR # 47 :Number of parameters doesn't match defination

Macro da kullan�lan parametrelerin say�s� macro da kullan�lan parametrelerin say�s�na uygun olmad���nda olu�ur.

ERROR # 48 :Illegal parameter specification

Daha �nce tan�mlanm�� sembollerin macro i�erisinde de tan�mlanmaya �al���ld���nda olu�ur.

ERROR # 49 :Too many paremeters

Macrolar da kullan�labilecek maximum paremetre say�s� 16 'd�r.Bu say� a��ld���nda olu�ur.

ERROR # 50 :Line exceeds 255 characters

Program yaz�m� esnas�nda kullan�lan sat�r uzunlu�u 255 karekteri a�t���nda olu�ur.

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.

Assembler programlama dilinde kullan�lacak olan bilgilerin uzunlugu bilgisayar�n mikroi�lemcisine bagl�d�r. 8088 mikroi�lemci i�in en fazla 16 bit uzunlugunda bir veri temsil edilebilir. 80286, 80386 ve 80486 mikroi�lemcileri daha g eli�mi� olduklar� i�in kulland�klar� bilgi uzunlugu daha fazla olabilir.

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.

1 0 0 0 0 0 0 1 ��aretsiz 129 say�s�n� temsil eder.

1 0 0 0 0 0 0 1 ��aretli -1 say�s�n� temsil eder.

Negatif say�larda en duyarl� bit 1 olur.

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

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�i gibi y�ksek byte (HB) veya Low byte (LB) olarak da i�lenebilir.

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.

QUADWORD

64 Bit uzunlu�unda bir yap�d�r. 4 word'un birle�tirilmesi ile olu�turulur.

8088 Mikroi�lemcisi olan bir makinada direkt mikroi�lemcinin destekledi�i BYTE ve WORD kavramlar� kullan�labilir. 80286, 80386 ve �zeri mikroi�lemcilerde BYTE ve WORD kavramlar�n�n d���nda DOUBLEWORD ve QUADWORD kavramlar� da kulla n�labilir. 8088 mikroi�lemcilerde WORD'den daha uzun sabit ve de�i�kenler de kullan�labilir. Ancak bu kullan�m direkt mikroi�lemci destegi d���nda yaz�l�m deste�i ile olur.

ASSEBLER PROGRAM YAPISI ve ILGILI KOMUTLAR

Bir program belle�i par�alara b�lerek (segmentleyerek) kullan�r. Assembler programlarda da yap� itibariyle bellegin segmentlere ayr�lmas� ve ayr�lan her b�l�m�n ayr� ayr� tan�mlanarak kullan�lmas� esast�r. Bu nedenle bir assembler program�nda genel itibariyle b�l�m tan�mlar� program�n yap�s�n� olu�turur. Genellikle bir programda ge�ici verilerin sakland��� stack, kal�c� verileri saklamak i�in data ve program kodlar�n�n sakland��� code segment b�l�mleri yer al�r. Bir assembler program�n�n �rnek yap�s� a�a��da verilmi�tir.

STK SEGMENT PARA 'STK'

Tanimlar

Tanimlar

STK ENDS

DAT SEGMENT PARA 'STK'

Tanimlar

Tanimlar

DAT ENDS

COD SEGMENT PARA 'COD'

ANA PROC NEAR

ASSUME SS:STK, DS:DAT, CS:COD

....

....

ANA ENDP

COD ENDS

END

Segment Komutu

Segment komutu program�n kulland��� segment kesimlerini tan�mlamak i�in kullan�l�r. Program i�inde tan�mlanan herhangi bir segment segment registerleri taraf�ndan takip edilir. Tan�mlanan herhangi bir segmentin hangi register taraf�ndan takip edil ecegi ASSUME deyimi ile tan�mlan�r. Komutun kullan�m �ekli;

isim SEGMENT tip 's�n�f'

�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.

Tip segmentin adreslenebilme tipini belirler. Bu deyim ile kullan�labilecek tip �e�itleri;

PAGE 256 Byte ve katlar�yla adreslenebilen segment

PARA 16 Byte ve katlar�yla adreslenebilen segment

WORD Word ve katlar�yla adreslenebilen segment

BYTE Byte ve katlar�yla adreslenebilen segment

Segment anahtar c�mlesi ile ba�layan bir segment ENDS c�mlesi ile son bulmak zorundad�r.

�rnek

STK SEGMENT PARA 'STK'

Tanimlar

Tanimlar

STK ENDS

STK SEGMENT PAGE 'STK'

Tanimlar

Tanimlar

STK ENDS

Assume Komutu

Mikroi�lemciler program i�inde bellek kesimlerini takip edebilmek i�in en az 3 adet segment registeri kullan�r. Bu registerler CS, DS, SS registerleridir. CS registeri program kodlar�n� takip etmek i�in, DS registeri program i�inde sabit olarak kul lan�lan verileri saklamak i�in, SS registeri ise program i�inde kullan�lan ge�ici verileri saklamak i�in kullan�l�r.

Program i�inde belirlenen segmet kesimlerinden hangisinin hangi register ile takip edilecegi assembler derleyicisine Assume deyimi ile bildirilir. Komutun kullan�m �ekli,

Assume register : segment , register : segment , ........ �eklindedir.

�rnek:

STK SEGMENT PARA 'STK'

Tan�mlar

Tan�mlar

STK ENDS

DATA SEGMENT PARA 'DAT'

Tan�mlar

Tan�mlar

DATA ENDS

CODE SEGMENT PARA 'CODE'

BASLA PROC FAR

ASSUME DS:DATA, SS:STK, CS:CODE

Proc Komutu

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 blo�unun olmas� zorunludur. �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 yoktur. Komutun kullan�l�� �ekli;

isim PROC tip

�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, diger 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

DATA SEGMENT PARA 'DAT'

Tan�mlar

DATA ENDS

CODE SEGMENT PARA 'CODE'

BASLA PROC FAR

ASSUME DS:DATA, SS:STK, CS:CODE

Push DS

Push SS

Mov Ax, 15h

.

.

CALL ATLA1

BASLA ENDP

ATLA1 PROC FAR

.

RET

ATLA1 ENDP

ENDS

END

Call/Ret Komutu

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.

DEG��KEN VE SAB�T TANIMLAMA

Assembler program i�inde herhangi bir segment kesiminde degi�ken tan�mlamas� yap�labilir. De�i�ken ve sabit tan�mlamalar�;

� 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;

degi�ken DB ilk deger

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

SAY DB 0AH ;ilk de�eri 10 olan SAY sabit/de�i�keni

ABC DB 'ADI SOYADI' ;ilk de�eri ADI SOYADI olan karakter dizisi

DIZI DB 0,1,2,3,4,5,6,7 ;de�erleri 0,1,2,3,4,5,6,7 olan byte 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.

ABC DB 10 DUP (?) ;i�erikleri olmayan 10 byte'l�k bir dizi

ABC DB 50 DUP (0AH) ;��erikleri 10 olan 50 byte'l�k bir dizi

ABC DB 25 DUP (0,1) ;i�erikleri 0,1,0,1.... olan 25 byte'l�k bir dizi

7.2 DW Deyimi

iki byte'l�k bir sabit/de�i�ken tan�mlamas�n�n yap�lmas�n� sa�lar. Deyimin kullan�l�� �ekli;

degi�ken DW ilk de�er

�eklindedir.

MESAJ DW 1210H

SAYI1 DW ?

SAYI2 DW 10 DUP(0)

SAYI3 DW 0,0AABH,CCCAH

7.3 DD Deyimi

D�rt byte'l�k bir sabit/de�i�ken tan�mlamas�n�n yap�lmas�n� sa�lar. Deyimin kullan�l�� �ekli;

degi�ken DD ilk de�er

�eklindedir.

MESAJ DD 12100000H

SAYI1 DD ?

SAYI2 DD 10 DUP(0)

SAYI3 DD 0,0AABC12H,0H

7.4 DQ Deyimi

64 bitlik, Sekiz byte'l�k bir sabit/de�i�ken tan�mlamas�n�n yap�lmas�n� sa�lar. Deyimin kullan�l�� �ekli;

degi�ken DQ ilk de�er

�eklindedir.

MESAJ DQ 12100000H

SAYI1 DQ ?

SAYI2 DQ 10 DUP(0)

SAYI3 DQ 0,0AABC12H,0H

7.5 DT Deyimi

Seksen bit 10 byte'l�k bir sabit/de�i�ken tan�mlamas�n�n yap�lmas�n� sa�lar. Deyimin kullan�l�� �ekli;

degi�ken DT ilk de�er

�eklindedir.

MESAJ DT 12100000H
SAYI1 DT ?
SAYI2 DT 10 DUP(0)

Pc Tecnique Referance kitab�ndan al�nt�d�r.

1