section .text
text section은 어셈블리어 코드를 작성하는 section이다.
section .text
global _start
_start :
code1
code2
code2
위의 코드처럼 text section은 global _start 로 시작하여야 한다.
global _start는 이 키워드부터 어셈블리어가 시작된다는 프로그래머와 CPU 사이의 약속이다.
section .bss
bss section에는 초기화되지 않은 전역변수를 선언한다.
section .bss
var1 resb 10
(resb(1byte) x 10 = 10byte 크기를 가진 변수 var1이 만들어졌다.)
(bss section의 크기지정자)
| 크기지정자 | 크기 |
|---|---|
| db | 1 byte |
| dw | 2 byte |
| dd | 4 byte |
| dq | 8 byte |
section .data
data section에는 초기화된 전역변수를 선언한다.
section .data
var1 dw 0x06
(dw(2byte) 크기의 상수 var1에 0x06 값이 들어갔다.)
bss segment와 data segment를 구분하는 이유는 메모리 공간 때문이다.
어셈블리어가 사용되는 임베디드 시스템은 메모리 공간 최적화가 매우 중요하다.
초기화되지 않은 변수는 초기화된 변수보다 크기가 매우 작기 때문에 초기화되지 않은 변수를 따로 관리함으로써 메모리 공간을 매우 절약할 수 있다.
(data section의 크기지정자)
| 크기지정자 | 크기 |
|---|---|
| resb | 1 byte |
| resw | 2 byte |
| resd | 4 byte |
| resq | 8 byte |
procedure(함수)
다른 프로그램언어의 함수를 어셈블리어에서는 procedure이라고 부른다.
L1 : code1
code2
code3
...