.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 |
프로그램이 실행될 때 일어나는 일:
- 운영 체제가 프로그램을 메모리에 로드합니다
.data섹션을 읽고 데이터를 특정 메모리 주소에 배치합니다
- 여러분의 레이블(
age,price,name)은 주소가 됩니다 - 이제 여러분의 코드는
[age],[price],[name]을 사용하여 이 주소들에 접근할 수 있습니다
중요한 규칙:
| 규칙 | 설명 |
|---|---|
프로그램당 하나의 .data 섹션 | 모든 데이터를 한 곳에 두십시오 |
| 레이블은 고유해야 합니다 | 두 개의 age 레이블을 가질 수 없습니다 |
| 데이터는 코드가 실행되기 전에 생성됩니다 | _start가 시작될 때 사용할 준비가 됩니다 |
다음 레슨에서는 db, dw, dd 및 dq를 사용하여 다양한 유형의 데이터를 정의하는 방법을 배우게 됩니다.
챌린지
data.asm 파일에 다음 작업을 수행하는 코드를 작성하세요:
.data섹션을 생성합니다- 값이 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이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.