본문 바로가기
ICT 관련 지식 및 정보

Assembly language 이야기

by 바로보자 2023. 6. 12.
반응형

matrix

Assembly 언어의 출현 배경

o 초기 컴퓨터는 이진 코드로만 프로그래밍되었으며, 이는 기계어라고 불리는 저수준의 명령어로 구성되었습니다. 기계어는 컴퓨터의 아키텍처에 따라 다양한 형태를 갖추고 있었습니다.

 

o 하지만 기계어는 01로 이루어진 비트로 표현되어 있어 사람이 이해하고 작성하기 어려웠습니다. 또한, 컴퓨터의 아키텍처마다 기계어 명령어의 형식과 의미가 다르기 때문에 다양한 기계어를 학습하고 사용해야 하는 어려움도 있었습니다.

 

o 이러한 어려움을 해결하기 위해 어셈블리어가 등장했습니다. 어셈블리어는 기계어 명령어와 일대일로 대응되는 기호로 구성되어 사람이 이해하고 기록하기 쉽도록 설계되었습니다. 기계어 명령어를 사람이 읽고 이해할 수 있는 형태로 변환함으로써 프로그래머들은 보다 직관적으로 컴퓨터를 제어할 수 있게 되었습니다.

 

o 어셈블리어는 초기 컴퓨터 시스템에서 주로 사용되었습니다. 1950년대와 1960년대에는 어셈블리어가 프로그래밍의 주요 언어로 채택되었습니다. 이 당시에는 컴퓨터의 성능이 제한되어 있었고, 하드웨어를 효율적으로 다루기 위해서는 저수준의 언어가 필요했습니다또한, 초기 컴퓨터 시스템은 주로 과학 및 공학 분야에서 사용되었으며, 하드웨어와 밀접한 관련이 있는 작업들이 많았습니다. 따라서 어셈블리어는 하드웨어 제어, 시스템 프로그래밍, 임베디드 시스템 등의 분야에서 중요한 역할을 수행했습니다.

 

o 어셈블리어의 등장으로 프로그래밍의 생산성과 유지보수성이 향상되었습니다. 그러나 어셈블리어는 여전히 저수준의 추상화를 제공하기 때문에 복잡한 프로그램을 작성하는 데에는 제약이 있습니다.

Assembly 언어의 특징

o 어셈블리어(Assembly language)는 컴퓨터 아키텍처에서 사용되는 저급 프로그래밍 언어입니다. 기계어와 일대일로 매핑되는 언어로, 기계어 명령어를 사람이 이해하기 쉬운 기호로 표현합니다. 이러한 기호는 기계어 명령어와 일대일 대응되므로 컴퓨터의 명령어와 직접적으로 매핑됩니다.

 

o 어셈블리어는 컴퓨터의 아키텍처에 따라 다양한 형태를 갖습니다. 각각의 아키텍처는 고유한 명령어 세트를 가지며, 어셈블리어는 해당 명령어 세트를 사용하여 컴퓨터의 동작을 제어합니다.

 

o 어셈블리어는 기계어와 밀접한 관련이 있으므로 어셈블리어를 이해하려면 기계어에 대한 기본적인 이해도 필요합니다. 기계어는 컴퓨터가 직접 이해하고 실행할 수 있는 이진 코드로, 01로 구성된 비트로 표현됩니다. 이 비트는 컴퓨터의 메모리에 저장된 프로그램 명령어와 데이터를 나타냅니다.

 

o 어셈블리어는 기계어의 명령어와 일대일로 매핑되는 기호로 표현됩니다. 이러한 기호는 사람이 이해하고 기록하기 쉽도록 설계되었습니다. 예를 들어, 기계어로는 "10110000 01100001"과 같은 이진 코드로 표현된 명령어가 있을 수 있습니다. 이를 어셈블리어로 표현하면 "MOV AL, 61h"와 같이 읽기 쉽고 이해하기 쉬운 형태로 변환됩니다.

 

o 어셈블리어의 구문은 기계어 명령어와 유사합니다. 명령어는 오퍼랜드(operand)와 작업(operation)으로 구성됩니다. 오퍼랜드는 명령어에 적용되는 데이터나 메모리 주소를 나타내며, 작업은 해당 데이터나 메모리 주소에서 수행되는 연산을 나타냅니다.

 

o 어셈블리어는 각각의 아키텍처에 특화된 문법을 가지고 있습니다. 예를 들어, x86 아키텍처에서 사용되는 어셈블리어는 MIPS 아키텍처에서 사용되는 어셈블리어와 다르게 표현됩니다. 따라서 특정 아키텍처에 대한 어셈블리어를 학습하고 사용해야 합니다.

 

o 어셈블리어 프로그램은 텍스트 파일로 작성되며, 어셈블러(assembler)라는 특수한 소프트웨어를 사용하여 기계어로 변환됩니다. 어셈블러는 어셈블리어 코드를 읽고 해당 아키텍처에 맞는 기계어로 변환하는 역할을 수행합니다.

Assembly 언어의 활용

주로 시스템 프로그래밍, 임베디드 시스템, 하드웨어 제어 등과 같은 영역에서 사용됩니다. 또한, 성능이 중요한 작업이나 특정 하드웨어에 최적화된 코드를 작성해야 할 때 유용합니다.

    * 대부분의 소프트웨어 개발 작업에는 고급 프로그래밍 언어가 더 적합하며, 어셈블리어는 특정한 경우에만 사용

 

어셈블리어는 시스템 프로그래밍에 자주 사용됩니다. 운영체제, 장치 드라이버, 부트로더 등과 같은 시스템 소프트웨어를 개발하는 데에 어셈블리어가 활용될 수 있습니다.

  • 시스템 소프트웨어가 하드웨어와 직접 상호작용해야 하는데, 어셈블리어는 이러한 저수준의 작업을 수행하기에 적합하기 때문

Assembly 언어의 장점

어셈블리어는 저수준 프로그래밍 언어로서 하드웨어를 직접 다룰 수 있는 장점을 가지고 있습니다. 따라서 어셈블리어는 주로 성능이 중요한 작업이나 특정 하드웨어에 최적화된 작업을 수행해야 할 때 주로 사용됩니다.

  • 어셈블리어를 사용하여 작성된 프로그램은 일반적으로 고급 프로그래밍 언어로 작성된 프로그램보다 빠르고 효율적인 실행이 가능합니다. 이는 어셈블리어가 직접 하드웨어를 다룰 수 있기 때문입니다.
  • 하드웨어 제어에 필요한 코드를 작성에도 사용됩니다. 예를 들어, 마이크로컨트롤러나 센서와 같은 하드웨어를 제어해야 할 때 어셈블리어를 활용할 수 있습니다. (하드웨어 제어는 주로 타이밍이 중요하며 세밀한 조작이 필요한 작업이므로, 어셈블리어를 사용하여 저수준의 제어를 수행하는 것이 효과적일 수 있습니다.)
  • 어셈블리어는 기계어와 밀접한 관련이 있으므로 기계어와 하드웨어 구조에 대한 이해와 경험이 필요합니다. 어셈블리어는 고급 프로그래밍 언어보다 작성하기 어렵고 오류가 발생하기 쉬울 수 있습니다. 그러나 성능과 효율성이 중요한 작업에서 어셈블리어는 강력한 도구로 활용될 수 있습니다.
  • 어셈블리어는 임베디드 시스템에서도 사용됩니다. 임베디드 시스템은 제한된 자원을 가진 작은 장치나 시스템으로, 성능과 메모리 사용량을 최적화해야 합니다. 이런 환경에서는 어셈블리어를 사용하여 작성된 코드가 더 효율적이고 경량화된 프로그램을 구현할 수 있습니다.

Assembly 언어의 한계점

o 어셈블리어는 기계어와 마찬가지로 저수준 프로그래밍 언어로 분류됩니다. 이는 컴퓨터의 하드웨어와 밀접하게 관련되어 있으며, 메모리, 레지스터, 연산장치 등의 하드웨어 구성 요소에 직접 접근할 수 있습니다. 그러나 어셈블리어는 사람이 이해하고 작성하기 쉽도록 고급 프로그래밍 언어와는 다른 수준의 추상화를 제공합니다.

 

o 일반적으로 어셈블리어는 고급 프로그래밍 언어보다 더 직관적으로 하드웨어를 조작할 수 있습니다. 그러나 어셈블리어는 상대적으로 낮은 수준의 추상화를 제공하므로 작성하기 어렵고 오류를 범하기 쉽습니다. 또한, 아키텍처마다 다른 어셈블리어를 사용하기 때문에 특정 아키텍처에 대한 이해와 경험이 필요합니다.

반응형