Asembler, text (yazı ) olarak yazdığınız 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.Bunun tersi olarak da bizler için makina kodu fazla birşey ifade etmez. 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 yazdığınız 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 yazabilmeniz için kullandığınız microcontroller ( veya microprocosser )'un mimari yapısını iyi bilmeniz 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 olarak ,
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
6.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.