어셈블리어의 기본 구조

두부4등분·2025년 10월 11일

프로그램의 전체 구성

section .data	; 데이터(변수) 선언 영역
section .bss	; 초기화되지 않은 변수 영역
section .text	; 실행 코드 영역
global _start	; 프로그램의 진입점

.data 초기값이 있는 변수 저장
.bss 초기값이 없는 변수 저장
.text 실제 명령어 저장
.start 프로그램 실행이 시작되는 위치

기본 실행 흐름

CPU는 프로그램을 명령어 단위로 읽고 실행한다.
1. 명령어 읽기
2. 피연산자 해석
3. 해당 동작 수행
4. 다음 명령어로 이동

명령어 기본 형태

명령어 목적지, 원본

피연산자

종료설명예시
RegisterCPU 내부 고속 저장 공간eax,ebx,ecx
Immediate코드 안에 직접 적힌 상수mov eax, 5
Memory실제 메모리 주소에 있는 값mov eax, [num]

메모리 접근 시 반드시 대괄호 []를 써야한다.

데이터 정의(변수 선언)

키워드의미예시
dbbyte (1바이트)msg db 'A'
dwword (2바이트)num dw 1234
dddouble word (4바이트)value dd 10
dqquad word (8바이트)big dq 12345678

word는 CPU가 한 번에 처리할 수 있는 데이터 단위(Unit)를 말한다.

예시

section .data
num dd 10	; 정수형 변수 num = 10
msg db 'A'	; 문자형 변수 msg ='A'

어셈블리어의 실행 단위

CPU는 명령어를 하나씩 실행하면서 현재 위치(Program Counter, PC)를 관리한다.

구조설명
순차 실행위에서 아래로 한 줄씩 실행
비순차 실행분기문으로 흐름 변경

jmp같은 분기문이 등장하기 전까지 CPU는 .text 내부 명령을 순서대로 실행하는 단순한 구조다.

프로그램의 종료 구조

mov eax, 1	;sys_exit 호출 번호
mov ebx, 0	;종료 코드 0
int 0x80	;리눅스 커널에 "프로그램 종료" 요청 (프로그램 종료)

추가적으로 알아보고 싶은 것
왜 프로그램 종료 구조는 저렇게 되는가
NASM, MASM, GAS 등 어셈블러 별 차이점과 공통점

0개의 댓글