Assembly Language (어셈블리어)¶
1세대 programming language인 machine language의 뒤를 이어 등장한 2세대 programming language임.
특징¶
Machine Language와 1:1로 대응하는 Mnemonic언어임.
- Machine Language의 binary code에서의 bit pattern 들의 조합 대신 간단한 영어단어에 해당하는 mnemonics를 사용.
- address에 label을 붙여서 보다 기억하기 쉽고 효율적인 프로그래밍이 가능해짐.
- comment가 가능해짐 (가독성 대폭 향상됨)
기억하기 쉽도록 machine language 의 instructor에 상징적인 기호 (영어단어로 생각하면 쉬움)를 할당한 것임.
다음과 같은 대응이 이루어짐.
기계어
Assembly language
매우 실행 속도가 빠르며, 약간의 호환성(메인 프레임과 유닉스 간)을 가짐.
Assembler 란?¶
Assembly language 로 작성된 source code를 읽어들여서 해당하는 machine language code (binary code)를 생성해주는 프로그램.
- Assembly language에서 사용된 symbol과 label을 실제 binary pattern으로 바꾸어줌.
최초의 assembler는 machine language로 작성되었음. 해당 assembler를 이용하여 assembly language로 좀 더 나은 assembler를 만들고, 이 assembler를 이용하여 assembly lnauguage로 좀 더 나은 assembler를 만드는 식으로 개선이 이루어짐.
이같은 개선을 bootstrap (or boot)이라고도 한다. 좀더 자세한 건 다음 URL 참고 : Bootstrap
사용분야¶
80196과 같은 마이크로프로세서 혹은 firmware 프로그래밍에서 꽤 자주 사용됨.
Examples¶
Hello World를 출력하는 C 소스코드 에 대응하는 Assemly language program.
_main:
push ebp
mov ebp, esp
push sHelloWorld ; 명령어와 주석을 조합할 수 있습니다.
call print_string ; print_string 프로시저를 호출합니다.
mov eax, 0
; 빈 줄에도 주석을 달 수 있습니다.
; 프로세스가 0 이외의 값을 반환하면
; 정상적으로 종료되지 않은 것으로
; 간주하기 때문에, 반환 값을 언제나
; 0으로 맞춰주어야 합니다.
end1: mov esp, ebp ; 구문의 모든 요소를 적용한 명령입니다.
end2: pop ebp
end3: ret ; 프로시저를 반환합니다.
end4: ; _main의 경우 프로그램이 종료됩니다.
Fibonacci sequence에 해당하는 Assembly language program.
load #0
store first
load #1
store second
again:
load first
add second
store next
load second
store first
load next
store second
cmp #200 ;200까지만 계산.
ble again ; 작거나 같은 경우 agina label로 jump
first: bss 1 ; memory 할당.
second: bss 1
next: bss 1