Montaj - Diziler
Değişkenler için depolama ayırmak için assembler veri tanımlama direktiflerinin kullanıldığını daha önce tartışmıştık. Değişken, belirli bir değerle de başlatılabilir. Başlatılan değer onaltılık, onluk veya ikili formda belirtilebilir.
Örneğin, aşağıdaki yollardan biriyle 'ay' kelimesini tanımlayabiliriz -
MONTHS DW 12
MONTHS DW 0CH
MONTHS DW 0110B
Veri tanımlama yönergeleri, tek boyutlu bir diziyi tanımlamak için de kullanılabilir. Tek boyutlu bir sayı dizisi tanımlayalım.
NUMBERS DW 34, 45, 56, 67, 75, 89
Yukarıdaki tanım, her biri 34, 45, 56, 67, 75, 89 sayılarıyla başlayan altı kelimeden oluşan bir dizi bildirir. Bu, 2x6 = 12 bayt ardışık bellek alanı tahsis eder. İlk numaranın sembolik adresi NUMARALAR olacaktır ve ikinci numaranınki NUMBERS + 2 vb. Olacaktır.
Başka bir örnek alalım. Boyut 8 envanter adlı bir dizi tanımlayabilir ve tüm değerleri sıfır ile başlatabilirsiniz.
INVENTORY DW 0
DW 0
DW 0
DW 0
DW 0
DW 0
DW 0
DW 0
Hangisi kısaltılabilir -
INVENTORY DW 0, 0 , 0 , 0 , 0 , 0 , 0 , 0
TIMES yönergesi, aynı değere birden çok ilklendirme için de kullanılabilir. TIMES kullanılarak INVENTORY dizisi şu şekilde tanımlanabilir:
INVENTORY TIMES 8 DW 0
Misal
Aşağıdaki örnek, üç değeri depolayan 3 öğeli bir x dizisi tanımlayarak yukarıdaki kavramları gösterir: 2, 3 ve 4. Diziye değerleri ekler ve toplamı 9 -
section .text
global _start ;must be declared for linker (ld)
_start:
mov eax,3 ;number bytes to be summed
mov ebx,0 ;EBX will store the sum
mov ecx, x ;ECX will point to the current element to be summed
top: add ebx, [ecx]
add ecx,1 ;move pointer to next element
dec eax ;decrement counter
jnz top ;if counter not 0, then loop again
done:
add ebx, '0'
mov [sum], ebx ;done, store result in "sum"
display:
mov edx,1 ;message length
mov ecx, sum ;message to write
mov ebx, 1 ;file descriptor (stdout)
mov eax, 4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax, 1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
global x
x:
db 2
db 4
db 3
sum:
db 0
Yukarıdaki kod derlendiğinde ve yürütüldüğünde, aşağıdaki sonucu verir -
9