section .data
kalimat db "Belajar menghitung jumlah karakter dalam kalimat",10
jum_car equ $-kalimat
section .text
global _start
_start:
mov edx,jum_car
mov ecx,kalimat
mov ebx,1
mov eax,4
int 0x80
mov ebx, 0
mov eax, 1
int 0x80
Jika pada contoh sebelumnya, cetakkal.asm, kita harus mendefinisikan dulu berapa besar atau banyak karakter yg akan dicetak.
Kalau kalimat yg akan dicetak pendek ya tidak masalah. Bagaimana jika kalimat yang akan dicetak sangat panjang, misal 1000 karakter. Tidak mungkin kan kita menghitung satu persatu dahulu, baru didefinisikan. Intinya sangat memakan banyak waktu. Ada cara yang lebih mudah dan praktis yaitu dengan memanfaatkan pointer.
Caranya yaitu dengan mengisi register edx (register yang biasanya diisi dgn jumlah karakter kalimat yg akn dicetak) dengan pointer ke kalimat tersebut. Perintah dasar pointer yaitu:
label_data:
.ascii "data"
label_pointer:
.ukuran_data $-label_data
Sebelumnya:
mov edx,50
dimana 50 adalah jumlah karakter yang akan dicetak. Jika ingin memakai pointer harus didefinisikan dulu pointernya:
jum_car equ $-kalimat
dimana jum_car adalah label untuk pointer. equ adalah ukuran data yang umum digunakan untuk menghitung karakter. $-kalimat adalah pointer yang menunjuk ke pada alamat data, dalam contoh ini data dilabelkan dengan “kalimat” yang disimpan pada register ecx.
Dari contoh di atas, jelas kita tidak harus menghitung dulu jumlah karakter yang akan didefinisikan. Tetapi tinggal menggunakan pointer yang menunjuk ke kalimat yang akan dicetak. Jadi pointer tersebut pengganti dari jumlah karakter tersebut.