Menu
Coddy logo textTech

.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]을 사용하여 이 주소들에 접근할 수 있습니다

중요한 규칙:

규칙설명
프로그램당 하나의 .data 섹션모든 데이터를 한 곳에 두십시오
레이블은 고유해야 합니다두 개의 age 레이블을 가질 수 없습니다
데이터는 코드가 실행되기 전에 생성됩니다_start가 시작될 때 사용할 준비가 됩니다

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

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

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

기초의 모든 레슨