Assembly 언어의 출현 배경
o 초기 컴퓨터는 이진 코드로만 프로그래밍되었으며, 이는 기계어라고 불리는 저수준의 명령어로 구성되었습니다. 기계어는 컴퓨터의 아키텍처에 따라 다양한 형태를 갖추고 있었습니다.
o 하지만 기계어는 0과 1로 이루어진 비트로 표현되어 있어 사람이 이해하고 작성하기 어려웠습니다. 또한, 컴퓨터의 아키텍처마다 기계어 명령어의 형식과 의미가 다르기 때문에 다양한 기계어를 학습하고 사용해야 하는 어려움도 있었습니다.
o 이러한 어려움을 해결하기 위해 어셈블리어가 등장했습니다. 어셈블리어는 기계어 명령어와 일대일로 대응되는 기호로 구성되어 사람이 이해하고 기록하기 쉽도록 설계되었습니다. 기계어 명령어를 사람이 읽고 이해할 수 있는 형태로 변환함으로써 프로그래머들은 보다 직관적으로 컴퓨터를 제어할 수 있게 되었습니다.
o 어셈블리어는 초기 컴퓨터 시스템에서 주로 사용되었습니다. 1950년대와 1960년대에는 어셈블리어가 프로그래밍의 주요 언어로 채택되었습니다. 이 당시에는 컴퓨터의 성능이 제한되어 있었고, 하드웨어를 효율적으로 다루기 위해서는 저수준의 언어가 필요했습니다. 또한, 초기 컴퓨터 시스템은 주로 과학 및 공학 분야에서 사용되었으며, 하드웨어와 밀접한 관련이 있는 작업들이 많았습니다. 따라서 어셈블리어는 하드웨어 제어, 시스템 프로그래밍, 임베디드 시스템 등의 분야에서 중요한 역할을 수행했습니다.
o 어셈블리어의 등장으로 프로그래밍의 생산성과 유지보수성이 향상되었습니다. 그러나 어셈블리어는 여전히 저수준의 추상화를 제공하기 때문에 복잡한 프로그램을 작성하는 데에는 제약이 있습니다.
Assembly 언어의 특징
o 어셈블리어(Assembly language)는 컴퓨터 아키텍처에서 사용되는 저급 프로그래밍 언어입니다. 기계어와 일대일로 매핑되는 언어로, 기계어 명령어를 사람이 이해하기 쉬운 기호로 표현합니다. 이러한 기호는 기계어 명령어와 일대일 대응되므로 컴퓨터의 명령어와 직접적으로 매핑됩니다.
o 어셈블리어는 컴퓨터의 아키텍처에 따라 다양한 형태를 갖습니다. 각각의 아키텍처는 고유한 명령어 세트를 가지며, 어셈블리어는 해당 명령어 세트를 사용하여 컴퓨터의 동작을 제어합니다.
o 어셈블리어는 기계어와 밀접한 관련이 있으므로 어셈블리어를 이해하려면 기계어에 대한 기본적인 이해도 필요합니다. 기계어는 컴퓨터가 직접 이해하고 실행할 수 있는 이진 코드로, 0과 1로 구성된 비트로 표현됩니다. 이 비트는 컴퓨터의 메모리에 저장된 프로그램 명령어와 데이터를 나타냅니다.
o 어셈블리어는 기계어의 명령어와 일대일로 매핑되는 기호로 표현됩니다. 이러한 기호는 사람이 이해하고 기록하기 쉽도록 설계되었습니다. 예를 들어, 기계어로는 "10110000 01100001"과 같은 이진 코드로 표현된 명령어가 있을 수 있습니다. 이를 어셈블리어로 표현하면 "MOV AL, 61h"와 같이 읽기 쉽고 이해하기 쉬운 형태로 변환됩니다.
o 어셈블리어의 구문은 기계어 명령어와 유사합니다. 명령어는 오퍼랜드(operand)와 작업(operation)으로 구성됩니다. 오퍼랜드는 명령어에 적용되는 데이터나 메모리 주소를 나타내며, 작업은 해당 데이터나 메모리 주소에서 수행되는 연산을 나타냅니다.
o 어셈블리어는 각각의 아키텍처에 특화된 문법을 가지고 있습니다. 예를 들어, x86 아키텍처에서 사용되는 어셈블리어는 MIPS 아키텍처에서 사용되는 어셈블리어와 다르게 표현됩니다. 따라서 특정 아키텍처에 대한 어셈블리어를 학습하고 사용해야 합니다.
o 어셈블리어 프로그램은 텍스트 파일로 작성되며, 어셈블러(assembler)라는 특수한 소프트웨어를 사용하여 기계어로 변환됩니다. 어셈블러는 어셈블리어 코드를 읽고 해당 아키텍처에 맞는 기계어로 변환하는 역할을 수행합니다.
Assembly 언어의 활용
○ 주로 시스템 프로그래밍, 임베디드 시스템, 하드웨어 제어 등과 같은 영역에서 사용됩니다. 또한, 성능이 중요한 작업이나 특정 하드웨어에 최적화된 코드를 작성해야 할 때 유용합니다.
* 대부분의 소프트웨어 개발 작업에는 고급 프로그래밍 언어가 더 적합하며, 어셈블리어는 특정한 경우에만 사용
○ 어셈블리어는 시스템 프로그래밍에 자주 사용됩니다. 운영체제, 장치 드라이버, 부트로더 등과 같은 시스템 소프트웨어를 개발하는 데에 어셈블리어가 활용될 수 있습니다.
- 시스템 소프트웨어가 하드웨어와 직접 상호작용해야 하는데, 어셈블리어는 이러한 저수준의 작업을 수행하기에 적합하기 때문
Assembly 언어의 장점
○ 어셈블리어는 저수준 프로그래밍 언어로서 하드웨어를 직접 다룰 수 있는 장점을 가지고 있습니다. 따라서 어셈블리어는 주로 성능이 중요한 작업이나 특정 하드웨어에 최적화된 작업을 수행해야 할 때 주로 사용됩니다.
- 어셈블리어를 사용하여 작성된 프로그램은 일반적으로 고급 프로그래밍 언어로 작성된 프로그램보다 빠르고 효율적인 실행이 가능합니다. 이는 어셈블리어가 직접 하드웨어를 다룰 수 있기 때문입니다.
- 하드웨어 제어에 필요한 코드를 작성에도 사용됩니다. 예를 들어, 마이크로컨트롤러나 센서와 같은 하드웨어를 제어해야 할 때 어셈블리어를 활용할 수 있습니다. (하드웨어 제어는 주로 타이밍이 중요하며 세밀한 조작이 필요한 작업이므로, 어셈블리어를 사용하여 저수준의 제어를 수행하는 것이 효과적일 수 있습니다.)
- 어셈블리어는 기계어와 밀접한 관련이 있으므로 기계어와 하드웨어 구조에 대한 이해와 경험이 필요합니다. 어셈블리어는 고급 프로그래밍 언어보다 작성하기 어렵고 오류가 발생하기 쉬울 수 있습니다. 그러나 성능과 효율성이 중요한 작업에서 어셈블리어는 강력한 도구로 활용될 수 있습니다.
- 어셈블리어는 임베디드 시스템에서도 사용됩니다. 임베디드 시스템은 제한된 자원을 가진 작은 장치나 시스템으로, 성능과 메모리 사용량을 최적화해야 합니다. 이런 환경에서는 어셈블리어를 사용하여 작성된 코드가 더 효율적이고 경량화된 프로그램을 구현할 수 있습니다.
Assembly 언어의 한계점
o 어셈블리어는 기계어와 마찬가지로 저수준 프로그래밍 언어로 분류됩니다. 이는 컴퓨터의 하드웨어와 밀접하게 관련되어 있으며, 메모리, 레지스터, 연산장치 등의 하드웨어 구성 요소에 직접 접근할 수 있습니다. 그러나 어셈블리어는 사람이 이해하고 작성하기 쉽도록 고급 프로그래밍 언어와는 다른 수준의 추상화를 제공합니다.
o 일반적으로 어셈블리어는 고급 프로그래밍 언어보다 더 직관적으로 하드웨어를 조작할 수 있습니다. 그러나 어셈블리어는 상대적으로 낮은 수준의 추상화를 제공하므로 작성하기 어렵고 오류를 범하기 쉽습니다. 또한, 아키텍처마다 다른 어셈블리어를 사용하기 때문에 특정 아키텍처에 대한 이해와 경험이 필요합니다.
'ICT 관련 지식 및 정보' 카테고리의 다른 글
1990년대 컴퓨터의 발전과 시대 배경(전편) (0) | 2023.06.18 |
---|---|
1980년대 컴퓨터의 발전과 시대 배경 (1) | 2023.06.18 |
COBOL language 이야기 (0) | 2023.06.11 |
JavaScript language 이야기 2부 (0) | 2023.06.11 |
JavaScript language 이야기 1부 (0) | 2023.06.11 |