Menu
CoddyTech

.data 섹션

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

2장에서는 메모리에서 값을 불러오고 메모리에 값을 저장했습니다. 그런데 그 메모리는 어디서 온 걸까요? 누가 num1, num2, result를 만들었을까요?

정답은 .data 섹션입니다. 이곳에서 메모리에 자신만의 데이터를 만듭니다.

.data 섹션이란 무엇인가요?

.data 섹션은 프로그램이 실행되기 전에 메모리에 저장될 데이터를 정의하는 어셈블리 프로그램의 일부입니다.

구문:

section .data
    ; 여기에 데이터 정의를 작성하세요

필요한 이유:

.data 섹션이 없는 경우.data 섹션이 있는 경우
사용할 데이터가 없습니다숫자, 문자열 및 변수를 만들 수 있습니다
메모리 주소를 알 수 없습니다myNumber 또는 message와 같은 레이블을 사용할 수 있습니다
코드를 테스트할 수 없습니다만든 데이터를 불러오고 저장할 수 있습니다

간단한 예:

section .data
    age db 25           ; 값이 25인 "age"라는 바이트를 만듭니다
    price dw 1000       ; 값이 1000인 "price"라는 워드를 만듭니다
    name db 'Bob'       ; 문자 B, o, b로 이루어진 "name"이라는 문자열을 만듭니다

파일에서의 위치:

0장에서 배운 두 파일 패턴을 기억하세요:

파일내용
data.asm데이터 정의가 포함된 section .data
main.asm%include "data.asm" 다음에 코드가 포함된 section .text

프로그램이 실행될 때 일어나는 일:

  1. 운영 체제가 프로그램을 메모리에 로드합니다
  2. .data 섹션을 읽고 데이터를 특정 메모리 주소에 배치합니다
  1. 레이블(age, price, name)은 주소가 됩니다
  2. 이제 코드는 [age], [price], [name]을 사용해 이러한 주소에 접근할 수 있습니다

중요한 규칙:

규칙설명
데이터를 한곳에 모아 두세요section .data를 두 번 이상 열 수도 있지만(어셈블러가 각 부분을 합칩니다), data.asm의 한 섹션에 모아 두는 편이 읽기 쉽습니다
레이블은 고유해야 합니다age 레이블을 두 개 만들 수 없습니다
코드가 실행되기 전에 데이터가 생성됩니다_start가 시작될 때 바로 사용할 수 있습니다

다음 수업에서는 db, dw, dd, dq를 사용하여 다양한 유형의 데이터를 정의하는 방법을 배우게 됩니다.

challenge icon

챌린지

data.asm 파일에 다음을 수행하는 코드를 작성하세요:

  1. .data 섹션을 만드세요
  2. 값이 5인 count라는 바이트를 만드세요

직접 해보기

%include "data.asm"

section .text
    global _start

_start:
    ; count의 값을 al로 불러오기
    mov al, [count]
    
    ; 출력할 수 있도록 값 저장하기
    mov r12, rax
    
    ; ASCII로 변환하여 출력하기 (0-9만 해당)
    add al, 48
    mov [digit], al
    
    mov rax, 1
    mov rdi, 1
    mov rsi, digit
    mov rdx, 1
    syscall
    
    ; 종료하기
    mov rax, 60
    mov rdi, 0
    syscall

section .bss
    digit resb 1
quiz icon실력 점검

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

기초의 모든 레슨

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