Menu
Coddy logo textTech

MOV 메모리에서 레지스터로

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

지금까지는 숫자를 레지스터로 직접 이동하고(즉시값), 레지스터 간에 값을 복사했습니다. 이제 memory에서 레지스터로 데이터를 불러오는 방법을 배웁니다.

이것이 중요한 이유:

0장에서 배운 내용을 기억하세요. CPU는 메모리와 직접 작업할 수 없습니다. 먼저 데이터를 레지스터로 불러와야 합니다. 다음과 같이 하면 됩니다.

구문:

mov register, [address]

대괄호 [ ]는 다음을 의미합니다: "이 memory address로 이동하여 그곳에 stored된 값을 가져옵니다."

다음과 같이 생각해 보세요:

메모리 address number에 상자가 하나 있다고 상상해 보세요. 그 상자 안에는 값이 있으며, 예를 들어 숫자 5가 들어 있습니다. 다음과 같이 작성하면:

mov al, [number]    ; 메모리 주소 "number"의 값을 al에 로드합니다

CPU에 다음과 같이 말하는 것입니다. " number라고 불리는 상자로 가서, 그 안에 있는 값(이 경우에는 5)을 가져와 al 레지스터에 복사해."

이 명령이 실행되면 값 5는 이제 al에 저장됩니다. 주소 number의 상자 안에 있던 원래 값은 그대로 남아 있습니다. 제거되지 않습니다.

중요한 규칙:

규칙설명
소스는 memory address여야 함[label] 또는 [address]
대괄호는 필수임mov al, myNumber는 값을 불러오는 것이 아니라 address를 불러옴
크기가 일치해야 함memory에 바이트가 저장되어 있다면 al을 사용해야 함(rax가 아님)

흔한 실수:

; 잘못됨: myNumber의 ADDRESS를 로드하며, 값이 아님
mov al, myNumber

; 올바름: myNumber에 저장된 VALUE를 로드함
mov al, [myNumber]
challenge icon

챌린지

메모리 주소 value의 값을 al 레지스터로 로드하는 어셈블리 한 줄을 작성하세요.

직접 해보기

section .data
    msg db 'al = '
    msg_len equ $ - msg

section .bss
    digit resb 1

section .text
    global _start

_start:
    ; 학생의 코드가 먼저 실행됩니다 (al에 값을 로드합니다)
    
    %include "solution.asm"
    
    ; al에서 값을 저장합니다
    mov r12, rax
    
    ; "al = "를 출력합니다
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msg_len
    syscall
    
    ; al의 값을 출력합니다
    mov rax, r12
    add rax, 48
    mov [digit], al
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; 종료
    mov rax, 60
    mov rdi, 0
    syscall
quiz icon실력 점검

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

기초의 모든 레슨

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