Menu
Coddy logo textTech

다양한 크기의 MOV

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

이미 al (8비트)과 rax (64비트)를 사용해 보셨습니다. 하지만 다른 크기들도 있습니다. 서로 다른 레지스터는 서로 다른 양의 데이터를 보유합니다.

x86-64 레지스터 패밀리:

레지스터크기비트사용 시점
rax8 바이트64 비트전체 숫자, 주소, 시스템 호출(syscall) 번호
eax4 바이트32 비트rax의 하위 절반
ax2 바이트16 비트eax의 하위 절반
al1 바이트8 비트ax의 하위 절반 (비트 0-7)
ah1 바이트8 비트ax의 상위 절반 (비트 8-15)

동일한 패턴이 다른 레지스터에도 적용됩니다:

64비트32비트16비트8비트 (하위)
rbxebxbxbl
rcxecxcxcl
rdxedxdxdl
rsiesisisil
rdiedididil

크기가 중요한 이유:

데이터를 이동할 때 소스와 대상의 크기가 일치해야 합니다. 일치하지 않으면 CPU는 다음과 같은 동작을 할 수 있습니다:

  • 데이터의 일부만 복사함
  • 알 수 없는 메모리에서 추가 바이트를 복사함
  • 오류를 발생시킴

크기가 일치하는 예시:

mov rax, 1000        ; 64비트에서 64비트로 (정상)
mov eax, 1000        ; 32비트에서 32비트로 (정상)
mov ax, 1000         ; 16비트에서 16비트로 (정상)
mov al, 5            ; 8비트에서 8비트로 (정상)

크기가 일치하지 않을 때 발생하는 현상:

mov rax, 0x123456789ABC   ; 64비트 값
mov al, 0xFF              ; al은 0xFF를 가지며, rax의 나머지 비트는 변경되지 않은 상태로 유지됨

작은 값을 더 큰 레지스터로 이동할 때, 상위 비트는 그대로 유지됩니다. 이는 예기치 않은 결과를 초래할 수 있습니다.

안전한 규칙:

지금까지 이 코스에서, 메모리의 모든 데이터는 1바이트입니다. 그렇기 때문에 rax가 아닌 al을 사용합니다.

데이터를 이동할 때 레지스터 크기는 메모리 크기와 일치해야 합니다:

  • 1바이트 메모리 → al, bl, cl 등을 사용합니다.
  • 8바이트 메모리 → rax, rbx, rcx 등을 사용합니다.

제3장에서 다양한 메모리 크기에 대해 배울 것입니다.

challenge icon

챌린지

이미 생성된 다음과 같은 데이터 주소들이 있습니다:

  • source — 1바이트 값 (5)을 포함합니다.
  • destination — 빈 공간 (1바이트)

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

  1. source의 값을 al로 로드합니다.
  2. al의 값을 destination에 저장합니다.

직접 해보기

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

section .bss
    digit resb 1

section .text
    global _start

_start:
    ; 학생의 코드가 먼저 실행됨 (source에서 로드하여 destination에 저장)
    
    %include "solution.asm"
    
    ; destination에서 저장된 값을 로드
    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실력 점검

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

기초의 모든 레슨