LEA — загрузка адреса
Часть раздела Основы путешествия по Assembly на Coddy. Урок 19 из 45.
До сих пор вы использовали mov, чтобы загружать значения из памяти в регистры. Но иногда вам нужно не значение. Вам нужен сам address.
LEA означает Load Effective Address. Он вычисляет адрес памяти и помещает этот адрес в register, не обращаясь к памяти.
Синтаксис:
lea register, [address]MOV vs LEA:
| Instruction | Что делает |
|---|---|
mov al, [number] | Обращается к памяти, получает находящееся внутри значение и помещает его в al |
lea rsi, [number] | НЕ обращается к памяти. Вычисляет address number и помещает его в rsi |
Представьте это так:
mov= открыть коробку и взять то, что внутриlea= записать номер коробки (address) на листке бумаги
Пример:
number db 42 ; Значение 42 хранится по некоторому адресу
mov al, [number] ; al = 42 (значение)
lea rsi, [number] ; rsi = адрес number (например, 0x402000)Зачем нужен LEA?
В ассемблере, когда вы хотите вывести строку или передать функции расположение в памяти, вам нужен address, а не значение. Системный вызов write (который вы изучите в главе 5) ожидает address в rsi.
Что может делать LEA (помимо простых address):
LEA также может выполнять простые математические операции с address. Например:
lea rsi, [number + 5] ; rsi = адрес number + 5 байтЭто полезно для работы с массивами и структурами данных.
Задание
Напиши одну строку на языке assembly, чтобы загрузить адрес message в регистр rsi.
Попробуйте сами
section .data
msg_prefix db 'message = '
prefix_len equ $ - msg_prefix
section .text
global _start
_start:
; Инструкция lea студента выполняется первой
; rsi теперь должен содержать адрес message
; Печать префикса
mov rax, 1
mov rdi, 1
mov rsi, msg_prefix
mov rdx, prefix_len
syscall
%include "solution.asm"
; Печать строки с использованием адреса, загруженного студентом
mov rax, 1
mov rdi, 1
; rsi уже содержит адрес (из кода студента)
mov rdx, 6 ; "Hello" + newline = 6 байт
syscall
; Выход
mov rax, 60
mov rdi, 0
syscallВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
1Машина
Что такое CPUПамятьРегистры против памятиКак работают инструкцииПаттерн двух файловАрхитектура x86-64Потренируйтесь самостоятельно: Песочница Assembly