Menu
Coddy logo textTech

LEA - Carica indirizzo

Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 19 di 45.

Finora hai usato mov per caricare valori dalla memoria nei registri. Ma a volte non vuoi il valore. Vuoi l'indirizzo stesso.

LEA sta per Load Effective Address. Calcola un indirizzo di memoria e inserisce quell'indirizzo in un registro, senza accedere alla memoria.

Sintassi:

lea register, [address]

MOV vs LEA:

IstruzioneCosa fa
mov al, [number]Va in memoria, prende il valore contenuto al suo interno e lo inserisce in al
lea rsi, [number]NON va in memoria. Calcola l'indirizzo di number e lo inserisce in rsi

Pensala così:

  • mov = apri la scatola e prendi ciò che c'è dentro
  • lea = annota il numero della scatola (indirizzo) su un pezzo di carta

Esempio:

number db 42        ; Il valore 42 è memorizzato a un indirizzo

mov al, [number]    ; al = 42 (il valore)
lea rsi, [number]   ; rsi = indirizzo di number (ad es., 0x402000)

Perché ti serve LEA?

In assembly, quando vuoi stampare una stringa o passare a una funzione una posizione di memoria, ti serve l’indirizzo, non il valore. La syscall write (che imparerai nel capitolo 5) si aspetta un indirizzo in rsi.

Cosa può fare LEA (oltre ai semplici indirizzi):

LEA può anche eseguire calcoli matematici di base sugli indirizzi. Per esempio:

lea rsi, [number + 5]   ; rsi = indirizzo di number + 5 byte

È utile per lavorare con array e strutture dati.

challenge icon

Sfida

Scrivi una riga di assembly per caricare l’indirizzo di message nel registro rsi.

Provalo tu

section .data
    msg_prefix db 'message = '
    prefix_len equ $ - msg_prefix

section .text
    global _start

_start:
    ; L'istruzione lea dello studente viene eseguita per prima
    ; rsi dovrebbe ora contenere l'indirizzo di message
    
    ; Stampa il prefisso
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_prefix
    mov rdx, prefix_len
    syscall
    
    %include "solution.asm"
    
    ; Stampa la stringa usando l'indirizzo caricato dallo studente
    mov rax, 1
    mov rdi, 1
    ; rsi contiene già l'indirizzo (dal codice dello studente)
    mov rdx, 6                    ; "Hello" + carattere di nuova riga = 6 byte
    syscall
    
    ; Esci
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Playground Assembly