Menu
Coddy logo textTech

MOV 레지스터에서 메모리로

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

이제 메모리에서 레지스터로 데이터를 로드하는 방법을 알았으니, 그 반대의 경우인 레지스터에서 메모리로 데이터를 저장하는 것을 배우게 될 것입니다.

구문:

mov [address], register

대괄호 [ ]는 "레지스터의 값을 이 메모리 주소에 저장하라"는 의미입니다.

이렇게 생각해 보세요:

메모리 주소 destination에 빈 상자가 있다고 상상해 보세요. 레지스터에 값이 들어 있습니다 (예를 들어, al에 숫자 7이 들어 있습니다).

다음과 같이 작성하면:

mov [destination], al

CPU에게 다음과 같이 지시하는 것입니다: "al 레지스터(7)의 값을 가져와서 destination이라는 이름의 상자에 넣으세요."

이 명령어가 실행된 후, 메모리 주소 destination에는 이제 값 7이 포함됩니다. al에 있는 값은 그대로 유지되며 제거되지 않습니다.

예제:

mov al, 7            ; 7을 al 레지스터에 넣습니다
mov [destination], al ; al의 값을 메모리 주소 "destination"에 저장합니다

참고: 이 연습에서 메모리의 데이터는 1바이트(8비트)입니다. 그렇기 때문에 al을 사용합니다. 이는 크기에 맞는 8비트 레지스터입니다. 레지스터 크기에 대해서는 나중에 더 자세히 배우게 될 것입니다.

중요 규칙:

규칙설명
대괄호가 필요합니다mov destination, al은 틀린 표현입니다
대상(destination)은 메모리 주소여야 합니다[destination]과 같은 레이블을 사용하세요
크기가 일치해야 합니다이 연습에서는 al (8비트)을 사용하세요

흔히 하는 실수:

; 틀림: 대괄호 누락
mov destination, al

; 올바름: 메모리에 값을 저장함
mov [destination], al

아래의 챌린지에서, 메모리 주소 destination은 이미 생성되어 있습니다. 3장에서는 자신만의 데이터를 생성하는 방법을 배우게 됩니다. 지금은 MOV 명령어에만 집중하세요.

challenge icon

챌린지

다음 작업을 수행하는 어셈블리 코드 두 줄을 작성하세요:

  1. 숫자 9를 al 레지스터에 넣습니다.
  2. al의 값을 메모리 주소 destination에 저장합니다.

(메모리 주소 destination은 이미 생성되어 있습니다.)

직접 해보기

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

section .bss
    digit resb 1

section .text
    global _start

_start:
    ; solution.asm이 여기에 포함됩니다
    ; 이것은 destination과 학생의 MOV 명령어를 정의합니다
    
    %include "solution.asm"
    
    ; 출력을 위해 메모리에 저장된 값을 al로 로드합니다
    mov al, [destination]
    
    ; 저장합니다
    mov r12, rax
    
    ; "destination = " 출력
    mov rax, 1
    mov rdi, 1
    mov rsi, msg
    mov rdx, msg_len
    syscall
    
    ; 값 출력
    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실력 점검

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

기초의 모든 레슨