어셈블러(assembler)
- 컴퓨터에서 사용하는 저급 프로그래밍 언어인 어셈블리 언어를 기계어로 변환하는 소프트웨어
- 어셈블리 언어는 컴퓨터의 기계어에 대응하는 기호적인 표현을 사용하기 때문에, 각 기계어 명령어는 어셈블리 언어의 명령어와 일대일 대응이 가능하다.
- 어셈블러의 주요 작업은 어셈블리 언어의 각 명령어를 해당하는 기계어 코드로 변환하는 것
- 이런 변환은 기본적으로 대체 작업이지만, 레이블을 메모리 주소에 맵핑하는 등의 추가 작업도 포함될 수 있다.
어셈블리 언어는 컴퓨터 아키텍처에 매우 의존적이다. 즉, 서로 다른 컴퓨터 아키텍처에서는 동일한 기능을 가진 명령어라도 다른 어셈블리 코드를 가질 수 있다. 따라서, 특정 컴퓨터 아키텍처에 대한 깊은 이해 없이는 어셈블리 언어를 효과적으로 사용하는 것이 어렵다.
어셈블리 언어는 주로 시스템 프로그래밍에서 사용되며, 시스템의 하드웨어나 운영체제와 직접적으로 상호작용해야 하는 코드를 작성할 때 주로 사용된다. 이러한 경우, 고급 프로그래밍 언어에서는 처리하기 어려운 저수준의 작업을 수행할 수 있다.
어셈블리 언어
- 컴퓨터 프로그래밍 언어 중에서 가장 저수준의 언어 중 하나로, 기계어 코드에 직접적으로 대응하는 사람이 읽을 수 있는 코드를 제공
- 기본적으로 컴퓨터 아키텍처의 기계어 명령 집합에 대한 기호적인 표현
- 어셈블리 언어는 각기 다른 CPU 아키텍처마다 고유한 명령어 집합을 가진다.
- 즉, 어셈블리 언어로 작성된 프로그램은 그 프로그램이 작성된 특정 컴퓨터 아키텍처에서만 실행될 수 있다.
어셈블리 언어는 다음과 같은 특징을 가지고 있다:
- 기계 친화적: 어셈블리 언어는 기계어와 매우 밀접한 관련이 있어, 시스템의 내부 작동 방식을 제어하는 데 매우 유용하다.
- 성능 최적화: 프로그래머가 메모리나 프로세서 명령을 직접 제어할 수 있으므로, 성능을 최적화하는 데 필요한 세밀한 제어를 할 수 있다.
- 하드웨어 상호작용: 특정 하드웨어를 제어하거나 운영체제의 저수준 기능을 활용해야 하는 경우에 사용된다.
그러나 어셈블리 언어는 프로그래밍이 복잡하고, 디버깅이 어렵고, 코드를 이해하거나 유지보수하기 어렵다는 단점이 있다. 또한 어셈블리 언어로 작성된 코드는 해당 아키텍처에 종속적이므로, 다른 아키텍처에서는 재사용할 수 없다.
오늘날 대부분의 소프트웨어 개발은 고급 프로그래밍 언어를 사용하여 이루어지지만, 임베디드 시스템, 컴퓨터 바이러스, 운영체제, 게임 엔진 등 특정 영역에서는 여전히 어셈블리 언어가 사용된다.
어셈블리 언어 프로그래밍
- 저수준의 컴퓨팅 작업에서 요구되는 것과 같은 특정 작업을 수행하기 위해 어셈블리 언어를 사용하는 프로그래밍 작업
- 어셈블리 언어 프로그래밍은 컴퓨터의 중앙 처리 장치(CPU)가 수행할 수 있는 명령어를 직접 기술하는 방식으로 이루어진다.
- 이 명령어들은 컴퓨터 메모리의 특정 위치를 지정하거나, 계산을 수행하거나, 입력/출력 작업을 실행하거나, 조건에 따라 프로그램의 흐름을 제어하는 등의 작업을 수행한다.
어셈블리 언어 프로그래밍은 아래와 같은 몇 가지 단계로 이루어진다:
- 코드 작성: 어셈블리 언어로 코드를 작성한다. 이는 프로그래머가 특정 작업을 수행하기 위해 CPU에 내릴 명령어를 명시하는 것을 포함한다.
- 어셈블리: 작성한 어셈블리 코드는 어셈블러를 통해 기계어로 변환된다. 기계어는 컴퓨터가 직접 이해하고 실행할 수 있는 언어이다.
- 링킹: 여러 어셈블리 코드 파일이 하나의 실행 가능한 프로그램으로 결합된다. 이 단계는 링커(linker)라는 도구를 통해 이루어진다.
- 디버깅 및 최적화: 프로그램의 작동을 확인하고, 문제가 있으면 디버깅 필요한 경우, 프로그램의 실행 속도나 메모리 사용량을 줄이기 위해 코드를 최적화한다.
어셈블리 언어 프로그래밍은 복잡하고 시간이 많이 걸리며, 종종 고급 프로그래밍 언어를 사용하는 것보다 훨씬 어렵다. 그러나 어셈블리 언어를 사용하면 하드웨어를 더욱 세밀하게 제어하고, 시스템의 성능을 극대화하는 등의 이점이 있다. 따라서 하드웨어에 대한 깊은 이해가 필요한 프로그래밍 작업, 예를 들어 임베디드 시스템, 드라이버, 운영체제 등에서 어셈블리 언어 프로그래밍이 요구되곤 한다.
용어 정리
- 어셈블러(assembler) : 특정한 처리를 수행하는 프로그램, 다른 프로그래머 사전에 작성했던 프로그램에서 필요한 부분을 모으는 역할을 하기도 했기에 붙은 이름
- 어셈블리 언어 : 어셈블러 프로그램 작성에 사용되는 언어
- 어셈블리 언어 프로그래밍 : 어셈블러 프로그램을 작성하는 프로그래밍
어셈블러의 장점
- 프로그램을 수정하는 일을 쉽게 해준다.
- 명령을 추가/삭제 할때 변경 기록을 직접 관리하는 대신 어셈블러가 각 명령어와 데이터 값이 메모리상 어느 위치에 있을지 파악해주기 때문에.
어셈블러의 특징
- 프로세서의 명령어와 일대일로 연결되는 해당 아키텍처에 특화된 언어이다.
- ex) 맥과 PC 인텔의 어셈블리 언어는 다르다.
- 명령어가 이진수로 인코딩 되는 특정한 방식과 메모리에 정보가 배치되는 방식 등을 알고 있다.
- 즉, 특정 컴퓨터용 프로그램이 다른 컴퓨터에서 실행되도록 변환하려면 프로그래머는 두 프로세서의 세부사항을 모두 숙달하여야 한다.
어셈블러의 기원과 역사
- 1950년대 , 프로그래밍 시 단순 반복 작업을 처리하기 위한 프로그램을 만들었는데, 이것이 어셈블러의 기원이다.
- 최초의 전자식 컴퓨터에서의 프로그래밍은 카드나 종이에 구멍을 뚫어서 그 수를 기계가 판독하게 만들어야 했다. 즉, 수동으로 명렁어와 데이터를 변경 또는 추가를 해야했고, 프로그램을 바꾸는 것이 매우 어려웠다.
- 여기서 패치의 기원이나온다. 원래 뜻은 옷에 뚫린 구멍을 덮을 때 쓰는 천 쪼가리 이지만, 구천공카드에 뚫린 구멍을 매꾸는 고침(수정)이 패치라는 언어로 굳어졌다.
'CS > 1일 1로그 100일 완성 IT 지식' 카테고리의 다른 글
27로그 - 작문과 비슷한 프로그래밍 (0) | 2023.06.29 |
---|---|
26로그 - 고수준 언어에서 프로그램 실행까지 (0) | 2023.06.29 |
24로그 - 알고리즘은 이상, 프로그래밍은 현실 (0) | 2023.06.16 |
22로그 - 10개 도시를 최단거리로 여행하는 법 (0) | 2023.06.15 |
21로그 - 검색을 쉽게 만드는 정렬 : 선택 정렬 vs 퀵 정렬 (0) | 2023.06.15 |