Menu
Coddy logo textTech

LEA - Charger l'adresse

Fait partie de la section Fondamentaux du Journey Assembly de Coddy — leçon 19 sur 45.

Jusqu'à présent, vous avez utilisé mov pour charger des valeurs depuis la mémoire dans des registres. Mais parfois, vous ne voulez pas la valeur — vous voulez l'adresse elle-même.

LEA signifie Load Effective Address. Elle calcule une adresse mémoire et place cette adresse dans un registre, sans accéder à la mémoire.

Syntaxe :

lea register, [address]

MOV vs LEA :

InstructionCe qu'elle fait
mov al, [number]Accède à la mémoire, récupère la valeur à l'intérieur, la place dans al
lea rsi, [number]N'accède PAS à la mémoire. Calcule l'adresse de number et la place dans rsi

Voyez les choses ainsi :

  • mov = ouvrez la boîte et prenez ce qu'il y a à l'intérieur
  • lea = notez le numéro de la boîte (l'adresse) sur un morceau de papier

Exemple :

number db 42        ; La valeur 42 est stockée à une certaine adresse

mov al, [number]    ; al = 42 (la valeur)
lea rsi, [number]   ; rsi = adresse de number (par ex., 0x402000)

Pourquoi avez-vous besoin de LEA ?

En assembleur, lorsque vous voulez afficher une chaîne de caractères ou passer un emplacement mémoire à une fonction, vous avez besoin de l'adresse, pas de la valeur. L'appel système write (que vous apprendrez au Chapitre 5) attend une adresse dans rsi.

Ce que LEA peut faire (au-delà des adresses simples) :

LEA peut également effectuer des calculs mathématiques de base avec des adresses. Par exemple :

lea rsi, [number + 5]   ; rsi = adresse de number + 5 octets

Ceci est utile pour travailler avec des tableaux et des structures de données.

challenge icon

Défi

Écrivez une ligne d'assembleur pour charger l'adresse de message dans le registre rsi.

Essayez vous-même

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

section .text
    global _start

_start:
    ; L'instruction lea de l'étudiant s'exécute en premier
    ; rsi devrait maintenant contenir l'adresse de message
    
    ; Afficher le préfixe
    mov rax, 1
    mov rdi, 1
    mov rsi, msg_prefix
    mov rdx, prefix_len
    syscall
    
    %include "solution.asm"
    
    ; Afficher la chaîne en utilisant l'adresse chargée par l'étudiant
    mov rax, 1
    mov rdi, 1
    ; rsi contient déjà l'adresse (provenant du code de l'étudiant)
    mov rdx, 6                    ; "Hello" + saut de ligne = 6 octets
    syscall
    
    ; Quitter
    mov rax, 60
    mov rdi, 0
    syscall
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Fondamentaux