Menu
Coddy logo textTech

다양한 크기의 MOV

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

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

x86-64 레지스터 패밀리:

레지스터크기bits사용 시기
rax8 bytes64 bits전체 숫자, 주소, syscall 번호
eax4 bytes32 bitsrax의 하위 절반
ax2 bytes16 bitseax의 하위 절반
al1 byte8 bitsax의 하위 절반(bits 0-7)
ah1 byte8 bitsax의 상위 절반(bits 8-15)

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

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

크기가 중요한 이유:

data를 이동할 때 source와 destination의 크기가 일치해야 합니다. 일치하지 않으면 CPU는 다음과 같은 동작을 할 수 있습니다:

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

일치하는 크기의 예:

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의 다른 비트들은 변경되지 않은 채로 유지됩니다

더 작은 값을 더 큰 레지스터로 이동하면 upper bits는 그대로 stay합니다. 이로 인해 예상치 못한 결과가 발생할 수 있습니다.

안전한 규칙:

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

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

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

3장에서 다양한 메모리 크기에 대해 배우게 됩니다.

challenge icon

챌린지

다음 데이터 주소가 이미 생성되어 있습니다:

  • source: 1바이트 값(5)을 포함합니다
  • destination: 비어 있는 공간(1바이트)

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

  1. source에서 값을 al로 Load
  2. al의 값을 destination에 Store

직접 해보기

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실력 점검

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

기초의 모든 레슨

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