LEA: Muat Alamat
Termasuk bagian Dasar-Dasar dalam perjalanan Assembly di Coddy. Pelajaran 19 dari 45.
Sejauh ini, kamu telah menggunakan mov untuk memuat nilai dari memori ke dalam register. Namun, terkadang kamu tidak menginginkan nilainya. Kamu menginginkan alamat itu sendiri.
LEA adalah singkatan dari Load Effective Address. Instruksi ini menghitung alamat memori dan memasukkan alamat tersebut ke dalam register tanpa mengakses memori.
Sintaks:
lea register, [address]MOV vs LEA:
| Instruksi | Fungsinya |
|---|---|
mov al, [number] | Mengakses memori, mengambil nilai di dalamnya, lalu memasukkannya ke al |
lea rsi, [number] | TIDAK mengakses memori. Menghitung alamat number dan memasukkannya ke rsi |
Bayangkan seperti ini:
mov= buka kotaknya dan ambil isinyalea= catat nomor kotak (alamat) di selembar kertas
Contoh:
number db 42 ; Nilai 42 disimpan di suatu alamat
mov al, [number] ; al = 42 (nilainya)
lea rsi, [number] ; rsi = alamat number (misalnya, 0x402000)Mengapa kamu memerlukan LEA?
Dalam assembly, saat kamu ingin mencetak string atau meneruskan lokasi memori ke fungsi, kamu memerlukan alamat, bukan nilainya. Syscall write (yang akan kamu pelajari di Bab 5) mengharapkan alamat di rsi.
Yang dapat dilakukan LEA (selain menangani alamat sederhana):
LEA juga dapat melakukan perhitungan matematika dasar dengan alamat. Contohnya:
lea rsi, [number + 5] ; rsi = alamat number + 5 byteIni berguna untuk bekerja dengan array dan struktur data.
Tantangan
Tulis satu baris assembly untuk memuat alamat message ke dalam register rsi.
Coba sendiri
section .data
msg_prefix db 'message = '
prefix_len equ $ - msg_prefix
section .text
global _start
_start:
; Instruksi lea dalam kodemu dijalankan lebih dulu
; rsi sekarang seharusnya berisi alamat message
; Cetak prefiks
mov rax, 1
mov rdi, 1
mov rsi, msg_prefix
mov rdx, prefix_len
syscall
%include "solution.asm"
; Cetak string menggunakan alamat yang kamu muat
mov rax, 1
mov rdi, 1
; rsi sudah berisi alamatnya (dari kodemu)
mov rdx, 6 ; "Hello" + baris baru = 6 byte
syscall
; Keluar
mov rax, 60
mov rdi, 0
syscallPelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar
Latihan sendiri: Playground Assembly