Menu
CoddyTech

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:

InstruksiFungsinya
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 isinya
  • lea = 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 byte

Ini berguna untuk bekerja dengan array dan struktur data.

challenge icon

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
    syscall
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar

Latihan sendiri: Playground Assembly