Skip to content

Assembly Language (어셈블리어)

1세대 programming code인 machine code의 뒤를 이어 등장한 2세대 programming code임.

  • 1949년 EDSAC에서 사용된 Initial Orders 가 컴퓨터용 최초의 어셈블리 언어로 간주되며, 이는 최초로 machine code 명령어를 사람이 읽을 수 있는 형태로 표현하여 프로그래밍을 단순화하였음.
  • 이후 1951년 Symbolic Assembly Program (SAP)이 IBM 701 컴퓨터용으로 개발되었고 이는 최초의 상용 어셈블러로 알려짐.

특징

Machine code와 1:1로 대응하는 Mnemonic 언어임.

  • Machine code의 bit pattern 들의 조합 대신 간단한 영어단어에 해당하는 mnemonics를 사용.
  • address에 label을 붙여서 보다 기억하기 쉽고 효율적인 프로그래밍이 가능해짐.
  • comment가 가능해짐 (가독성 대폭 향상됨)

기억하기 쉽도록 machine code 의 instructor에 상징적인 기호 (영어단어로 생각하면 쉬움)를 할당한 것임.

다음과 같은 대응이 이루어짐.

기계어

00000000 00000000 10110000 01110001

Assembly code

mov al, 061h
  • 위는 x86 Assembly code이며,
  • AX (Accumulator register)의 하위 8비트인 al
  • 16진수로 표현된 61(=97)을 복사하라는 명령어.

매우 실행 속도가 빠르며, 약간의 호환성(메인 프레임과 유닉스 간)을 가짐.


Assembler 란?

Assembly code 로 작성된 source code를 읽어들여서 해당하는 machine code code (binary code)를 생성해주는 프로그램.

  • Assembly code에서 사용된 symbol과 label을 실제 binary pattern으로 바꾸어줌.

최초의 assembler는 machine code로 작성되었음. 해당 assembler를 이용하여 assembly code로 좀 더 나은 assembler를 만들고, 이 assembler를 이용하여 assembly code로 좀 더 나은 assembler를 만드는 식으로 개선이 이루어짐.
이같은 개선을 bootstrap (or boot)이라고도 한다. 좀더 자세한 건 다음 URL 참고 : Bootstrap



사용분야

80196과 같은 Micro-controller 혹은 firmware 프로그래밍에서 꽤 자주 사용됨.


Examples

Hello World를 출력하는 C 소스코드 에 대응하는 Assembly code 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 code 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       

더 읽어보면 좋은 자료들