Programming Language/Assembly

어셈블리어란?

D4tai1 2018. 7. 14.

1. 어셈블리어란? 

- 기계어를 1:1로 매핑하는 가장 저레벨의 언어

- CPU(레지스터)와 메모리(RAM) 사이에 데이터를 조작

- C언어 기준에서 보면 어셈블리어에서 사용하는 instruction은 CPU에 내장

- CPU에서 지원하는 함수는 저레벨이라 반복적인 일을 하기 힘들기 때문에 운영체제에서 미리 함수로 구현하여 사용할 수 있도록 제공[CPU의 API를 이용하여 OS의 API 개발]

- 그 외 메인보드에 있는 ROM BIOS에 있는 API도 사용가능

 

2. 장점 

- 소스가 공개되지 않은 프로그램을 디스어셈블하여 바이너리수준에서 분석하여 이해 가능

- 하드웨어를 직접제어하는 부분(운영체제의 커널, 드라이버)은 간결성과 편의성때문에 어셈블리언어로 코딩

3. 단점

- 다양한 문법형식, 호환성이 낮음

 

 

4. 실행파일 생성

- 운영체제가 CPU를 포함한 모든 리소스를 관리

- 즉, 운영체제가 정해놓은 규약을 준수하는 바이너리만 해당 운영체제에서 실행가능

- 운영체제마다 규칙은 다름

- 어셈블리어로 작성한 소스코드는 운영체제에 따라 코드가 달라짐

 

5. 어셈블러

- 어셈블리어로 작성된 소스를 기계에서 실행 가능하도록 기계어로 변환하는 프로그램

- 어셈블러에 의해 만들어진 바이너리가 실행되려면 링킹이 필요.

  + 링킹 : 필요한 라이브러리를 모두 저레벨함수로 결합하는 과정

  + 링커 : 링킹을 하는 프로그램

 

 

 

6. 문법표기

 1) intel

  - mov eax, 10

 2) AT & T

  - mov $3, %eax

 

7. 데이터 단위

 1) 1byte = 8bit

 2) 2byte = 16bit

 3) 4byte = 32bit

 4) 8byte = 64bit

 

 

'Programming Language > Assembly' 카테고리의 다른 글

Linux System Call  (0) 2019.01.26
메모리와 변수  (0) 2018.07.14
레지스터  (0) 2018.07.14

댓글