Majelis - Array
Kita telah membahas bahwa arahan definisi data ke assembler digunakan untuk mengalokasikan penyimpanan untuk variabel. Variabel juga dapat diinisialisasi dengan beberapa nilai tertentu. Nilai yang diinisialisasi dapat ditentukan dalam bentuk heksadesimal, desimal, atau biner.
Misalnya, kita dapat mendefinisikan variabel kata 'bulan' dengan salah satu cara berikut -
MONTHS DW 12
MONTHS DW 0CH
MONTHS DW 0110B
Arahan definisi data juga dapat digunakan untuk mendefinisikan array satu dimensi. Mari kita definisikan deretan angka satu dimensi.
NUMBERS DW 34, 45, 56, 67, 75, 89
Definisi di atas menyatakan larik enam kata yang masing-masing diinisialisasi dengan angka 34, 45, 56, 67, 75, 89. Ini mengalokasikan 2x6 = 12 byte ruang memori berturut-turut. Alamat simbolis dari nomor pertama adalah ANGKA dan nomor kedua adalah ANGKA + 2 dan seterusnya.
Mari kita ambil contoh lainnya. Anda dapat menentukan larik bernama inventaris ukuran 8, dan menginisialisasi semua nilai dengan nol, seperti -
INVENTORY DW 0
DW 0
DW 0
DW 0
DW 0
DW 0
DW 0
DW 0
Yang bisa disingkat menjadi -
INVENTORY DW 0, 0 , 0 , 0 , 0 , 0 , 0 , 0
Direktif TIMES juga dapat digunakan untuk beberapa inisialisasi ke nilai yang sama. Menggunakan TIMES, array INVENTORY dapat didefinisikan sebagai:
INVENTORY TIMES 8 DW 0
Contoh
Contoh berikut mendemonstrasikan konsep di atas dengan mendefinisikan larik 3 elemen x, yang menyimpan tiga nilai: 2, 3, dan 4. Ini menambahkan nilai dalam larik dan menampilkan jumlah 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
Ketika kode di atas dikompilasi dan dijalankan, itu menghasilkan hasil sebagai berikut -
9