Menu
Coddy logo textTech

MOV 메모리에서 레지스터로

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

지금까지 여러분은 숫자를 레지스터에 직접 이동시키고(immediate) 레지스터 간에 값을 복사했습니다. 이제 메모리에서 레지스터로 데이터를 로드하는 방법을 배우게 됩니다.

이것이 중요한 이유:

0장에서 배운 내용을 기억해 보세요: CPU는 메모리와 직접 작업할 수 없습니다. 데이터는 먼저 레지스터에 로드되어야 합니다. 그 방법은 다음과 같습니다.

구문:

mov register, [address]

대괄호 [ ]는 "이 메모리 주소로 가서 그곳에 저장된 값을 가져오라"는 의미입니다.

이렇게 생각해 보세요:

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

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

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

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

중요한 규칙:

규칙설명
소스는 메모리 주소여야 합니다[label] 또는 [address]
대괄호가 필요합니다mov al, myNumber는 값이 아니라 주소를 로드합니다
크기가 일치해야 합니다메모리에 바이트가 저장된 경우 al을 사용하십시오 (rax가 아님)

흔히 하는 실수:

; 틀림: myNumber의 값이 아닌 주소를 로드함
mov al, myNumber

; 옳음: myNumber에 저장된 값을 로드함
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실력 점검

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

기초의 모든 레슨