Assembly programlama yaparken bazı kod parçalarını tekrar tekrar yazmak yerine makro yada prosedür olarak bir kez yazıp her ihtiyacımız olan yerde çağırabiliriz. Makrolar ve prosedürler arasındaki fark ise programın derlenmesi sırasında makrolar yazılan kodlar program akışı içerisinde çağrıldığı her noktaya kopyalanırlar. Prosedür ise bir kez program içerisinde tanımlanarak çağrıldığı noktalarda program akışı bu tanıma gider işlendikten sonra çağrılma noktasına geri dönerek akış devam eder.
Prosedürler program içerisinde küçük fonksiyon tanımlamalarıdır. Tanımlama yapılırken “proc” anahtar kelimesi kullanılır bir prosedür bittiğini belirtmek için ise “endp” anahtarı kullanılır. Program akışında prosedürü çağırmak için “call” kullanılır. Kullanımına örnek için aşağıdaki kodu incelersek öncelikle çalışmaya başladığında cx değeri 1234h iken çağrı yapıldığında myproc içerisinde cx değeri 1122h olarak değiştirilip tekrar çağrıldığı konuma geri dönerek ax değerini 9999h olarak set edecektir.
.model small
.stack 32
.data
.code
mov ax,@data
mov ds,ax
mov ax,0
mov cx,1234h
call myproc
mov ax,9999h
hlt
myproc proc
mov cx,1122h
ret
myproc endp
.exit
end
Makrolar da prosedürler gibi fonksiyonlardır. Çağrıldıkları noktadan önce tanımlanmaları gerekir. “makro” komutu ile tanımlanırlar ve parametre alabilirler. Sonlandığını belirtmek için ise “endm” komutunu kullanabiliriz. Örnek bir toplama makrosu aşağıdaki gibidir. makro içinde etiket tanımı yapmak için “local” komutu ile makro içinde kullanacağınız etiketleri tanımlamanız gerekmektedir.
.model small
.stack 32
.data
isim db "muraterdem"
.code
mov ax,@data
mov es,ax
mov ds,ax
mov ax,0
toplama macro p1,p2,p3,p4
mov ax,p1
add ax,p2
add ax,p3
add ax,p4
endm
toplama 1 2 3 4
mov bx,ax
end
interruptlar sistem ile programın etkileşime geçmesi için kullanılan komutlardır. Bu komutlar “int” komutu ile çağrılır bir çok kesme bulunmaktadır, gerektiğinde araştırma yapılmalıdır. Örnek olarak 8086 da “f1” kısayolu ile yardım dokümanına bakabiliriz. Burada int 21h açıklaması aşağıdaki gibidir.
Burada anlatıldığı gibi dx registerine stringin adresini, ah içerisine 9h atayarak “int 21h” komutunu verdiğimizde stringi ekrana yazacaktır. Kodlama aşağıdaki gibi yapılabilir.
.model small
.stack 32
.data
isim db "murat erdem",'$'
.code
mov ax,@data
mov es,ax
mov ds,ax
mov ax,0
lea dx,isim
mov ah,09h
int 21h
.exit
end