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:
| Istruzione | Cosa 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'è dentrolea= 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.
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
syscallQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1La macchina
Che cos’è la CPUMemoriaRegistri vs memoriaCome funzionano le istruzioniSchema a due fileL’architettura x86-642Sistemi numerici
Perché il binario?Numeri binariDa decimale a binarioPerché l'esadecimale?Da esadecimale a decimaleDa decimale a esadecimaleASCII ed esadecimale5Chiamata di sistema di uscita
Cos'è una chiamata di sistema?Chiamata di sistema di uscita (60)Codici di uscitaRiepilogo: uscita correttaEsercitati da solo: Playground Assembly