Menu
Coddy logo textTech

LEA - 주소 로드

Coddy Assembly 여정의 기초 섹션에 포함된 레슨. 45개 중 19번째.

지금까지는 메모리에서 레지스터로 을 불러오기 위해 mov를 사용했습니다. 하지만 때로는 값을 원하지 않을 때도 있습니다. 그 자체의 address를 원합니다.

LEA유효 주소 Load Effective Address를 의미합니다. 메모리 주소를 계산하고 메모리에 접근하지 않고 해당 address를 register에 넣습니다.

구문:

lea register, [address]

MOV vs LEA:

Instruction무엇을 하는가
mov al, [number]메모리로 가서 내부의 을 가져와 al에 넣습니다.
lea rsi, [number]메모리로 가지 않습니다. numberaddress를 계산하여 rsi에 넣습니다.

이렇게 생각해 보세요:

  • mov = 상자를 열고 안에 있는 것을 꺼내기
  • lea = 상자 번호(address)를 종이에 적기

예:

number db 42        ; 값 42가 어떤 주소에 저장됩니다

mov al, [number]    ; al = 42 (값)
lea rsi, [number]   ; rsi = number의 주소 (예: 0x402000)

LEA가 필요한 이유는 무엇인가요?

어셈블리에서 문자열을 출력하거나 함수에 메모리 위치를 전달하려면 값이 아니라 address가 필요합니다. write syscall(5장에서 배우게 됩니다)은 rsi에 address가 있기를 기대합니다.

LEA가 할 수 있는 일(단순한 주소를 넘어):

LEA는 주소를 사용해 기본적인 수학 연산도 수행할 수 있습니다. 예를 들어:

lea rsi, [number + 5]   ; rsi = number + 5 바이트의 주소

이는 배열과 데이터 구조를 다룰 때 유용합니다.

challenge icon

챌린지

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" + 개행 = 6 바이트
    syscall
    
    ; 종료
    mov rax, 60
    mov rdi, 0
    syscall
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨

직접 연습해 보세요: Assembly 플레이그라운드