어셈블리어란?
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 |
댓글