어셈블리 언어 정의

어셈블리 언어란 무엇입니까?

어셈블리 언어는 컴퓨터 하드웨어와 직접 통신하기 위한 일종의 저수준 프로그래밍 언어입니다.2진수와 16진수로 구성된 기계어와 달리 어셈블리 언어는 사람이 읽을 수 있도록 설계되었습니다.

어셈블리 언어와 같은 저수준 프로그래밍 언어는 컴퓨터의 기본 하드웨어와 최신 소프트웨어 프로그램이 작성되는 Python 또는 JavaScript와 같은 고급 프로그래밍 언어 사이에 필요한 다리입니다.

주요 내용

  • 어셈블리 언어는 고급 언어를 기계어로 번역하는 프로그래밍 언어 유형입니다.
  • 소프트웨어 프로그램과 기본 하드웨어 플랫폼 사이에 필요한 다리입니다.
  • 어셈블리 언어는 코드를 사용 가능한 기계 명령어로 변환하기 위해 언어 구문, 레이블, 연산자 및 지시문에 의존합니다.
  • 어셈블리 언어는 각각 특정 용도와 이점이 있는 단일 패스 또는 다중 패스 어셈블러를 통과할 수 있습니다.
  • 오늘날 어셈블 언어는 성능 요구 사항이 특히 높은 경우와 같은 일부 틈새 응용 프로그램에서 여전히 사용되지만 직접 작성되는 경우는 거의 없습니다.

어셈블리 언어 작동 방식

기본적으로 컴퓨터에서 실행되는 가장 기본적인 명령어는 1과 0으로 구성된 이진 코드입니다.이러한 코드는 컴퓨터의 물리적 회로를 통해 이동하는 전기의 "켜짐" 및 "꺼짐" 상태로 직접 변환됩니다.본질적으로 이러한 간단한 코드는 프로그래밍 언어의 가장 기본적인 다양성인 "기계어"의 기초를 형성합니다.

물론 1과 0을 명시적으로 프로그래밍하여 현대 소프트웨어 프로그램을 구성할 수 있는 사람은 아무도 없습니다.대신 인간 프로그래머는 인간에게 더 직관적인 형식으로 명령을 명확하게 표현할 수 있는 다양한 추상화 계층에 의존해야 합니다.

특히, 현대 프로그래머는 전체 영어 단어 및 문장과 같은 직관적 구문과 "and", "or" 및 "else"와 같은 논리 연산자를 활용하는 소위 "고급 언어"로 명령을 실행합니다. 일상적인 사용에 익숙합니다.

그러나 궁극적으로 이러한 고급 명령은 기계어로 번역되어야 합니다.프로그래머는 수동으로 수행하는 대신 이러한 고급 언어와 저수준 언어를 자동으로 번역하는 것을 목적으로 하는 어셈블리 언어에 의존합니다.최초의 어셈블리 언어는 1940년대에 개발되었으며 현대의 프로그래머와 현대의 자연어 처리기는 어셈블리 언어를 다루는 데 시간을 거의 소비하지 않지만 그럼에도 불구하고 컴퓨터의 전반적인 기능에 필수적인 요소로 남아 있습니다.

컴퓨팅 초기에는 시스템 프로그래밍과 응용 프로그램 프로그래밍이 모두 어셈블리 언어로 진행되었습니다.어셈블리 언어가 없었다면 오늘날 우리가 사용하는 많은 현대 컴퓨터와 고급 언어가 불가능했을 것입니다.

어셈블리 언어의 구성 요소

통사론

모든 프로그램 언어로 코드를 작성할 때 컴파일러가 오류 없이 코드를 실행할 수 있도록 준수해야 하는 관찰 가능한 특정 규칙이 있습니다.이러한 규칙은 구문으로 정의되며 허용 가능한 최대 문자 수, 코드 행이 시작해야 하는 문자 또는 특정 기호 "세미콜론"의 의미와 같은 기준을 포함합니다.

상표

레이블은 명령이나 데이터가 저장된 주소를 나타내는 기호입니다.그 목적은 명령문에서 참조될 때 대상 역할을 하는 것입니다.레이블은 어셈블리 언어에서 주소를 사용할 수 있는 모든 곳에서 사용할 수 있습니다.기호 레이블은 식별자 다음에 콜론으로 구성되는 반면 숫자 레이블은 단일 디지털 뒤에 콜론이 오는 것으로 구성됩니다.

연산자

명령이라고도 하는 연산자는 레이블 필드 뒤에 나오는 논리 표현식입니다.또한 최소한 하나의 공백 문자가 앞에 와야 합니다.연산자는 opcode 또는 지시문일 수 있습니다.연산 코드는 기계 명령어에 직접 해당하며 연산 코드에는 명령어와 관련된 레지스터 이름이 포함됩니다.또는 지시문 연산 코드는 어셈블러가 알고 있는 명령어입니다.

지령

지시문은 어셈블리 프로세스 동안 수행해야 하는 작업을 알려주는 어셈블러에 대한 지침입니다.지시문은 변수에 대한 메모리를 선언하거나 예약하는 것이 중요합니다. 이러한 변수는 나중에 프로세스에서 호출하여 보다 동적인 기능을 수행할 수 있습니다.지시문은 프로그램을 다른 섹션으로 나누는 데에도 사용됩니다.

매크로

어셈블리 언어 매크로는 일련의 명령문 또는 패턴을 나타내는 템플릿 슈 형식입니다.이 어셈블리 언어 문 시퀀스는 여러 다른 프로그램에 공통적일 수 있습니다.매크로 기능은 매크로 정의를 해석하는 데 사용되는 반면 매크로 호출은 매크로 명령문 세트 대신 "일반" 어셈블리 코드가 들어갈 소스 코드에 삽입됩니다.

니모닉

니모닉은 작업의 약어입니다.니모닉은 더 크고 완전한 코드 세트를 나타내는 단축된 "opcode"를 지정하기 위해 각 어셈블 프로그램 명령에 대한 작업 코드에 입력됩니다.예를 들어, "2로 곱하기" 니모닉에는 니모닉을 수행하는 전체 코드 세트가 있습니다.

고주파 거래

오늘날 어셈블리 언어는 현대 소프트웨어가 기본 하드웨어 플랫폼과 어떻게 관련되어 있는지 이해하는 데 도움이 되도록 컴퓨터 과학 학생들이 연구하는 주제로 남아 있습니다.성능에 대한 요구가 특히 높거나 해당 하드웨어가 현재 고급 언어와 호환되지 않는 경우와 같이 프로그래머는 어셈블리 언어로 계속 작성해야 하는 경우가 있습니다.

금융과 관련된 한 가지 예는 일부 금융 회사에서 사용하는 HFT(고주파 거래) 플랫폼입니다.이 시장에서 HFT 거래 전략이 수익성을 입증하려면 거래의 속도와 정확성이 가장 중요합니다.따라서 일부 HFT 회사는 경쟁사보다 우위를 점하기 위해 거래 소프트웨어를 어셈블리 언어로 직접 작성하여 고급 언어의 명령이 기계어로 번역될 때까지 기다릴 필요가 없도록 했습니다.

많은 사람들은 어셈블리 언어가 가장 가파른 학습 곡선을 가지고 있으며 가장 배우기 어려운 컴퓨팅 언어라고 믿습니다.

장점과 단점

어셈블리 언어는 일반적으로 고급 언어보다 빠르게 실행할 수 있습니다.어셈블리 언어 코드의 삭제 구성 요소를 삽입하는 것은 상대적으로 쉽고 어셈블리 언어는 다른 유형의 언어와 비교할 때 일반적으로 작업을 완료하는 데 더 적은 명령이 필요합니다.

어셈블리 언어를 사용하면 하드웨어를 직접 조작할 수 있으므로 컴퓨터를 더 잘 제어하려는 프로그래머도 어셈블리 언어를 자주 사용합니다.속도와 중요성 때문에 일부 프로그램은 코드가 일반적으로 더 작게 유지될 수 있으므로 어셈블리 언어를 사용하여 특별히 작성됩니다.

어셈블리 언어에는 몇 가지 단점이 있는 경향이 있습니다.어셈블리 언어를 사용하여 작성된 긴 프로그램은 일반적으로 더 무거운 컴퓨팅 성능을 필요로 하며 작은 컴퓨터에서는 실행할 수 없습니다.어떤 사람들은 어셈블리 언어의 구문을 기억하기가 더 어렵다고 생각할 수 있으며 어셈블리 언어가 더 복잡하기 때문에 어셈블리 언어를 사용하여 코딩하는 데 시간이 더 걸릴 수 있습니다.또한 어셈블리 언어는 일반적으로 서로 다른 컴퓨터 제조업체 간에 이식할 수 없습니다. 회사를 전환할 때 직원 혜택이 손실되는 것과 유사하게 언어를 다른 컴퓨터로 원활하게 번역할 수 없습니다.

장점
  • 실행은 다른 언어에 비해 더 간단할 수 있습니다.

  • 실행은 일반적으로 다른 언어에 비해 빠릅니다.

  • 하드웨어를 직접 제어할 수 있습니다.

  • 코드는 다른 언어에 비해 작게 유지될 수 있습니다.

단점
  • 프로그래밍은 고급 언어에 비해 선택하기가 더 어려울 수 있습니다.

  • 어셈블리 언어의 구문이 어렵습니다.

  • 기계 간 이동 불가

어셈블러의 유형

어셈블리 언어는 어셈블러를 사용하여 기계어로 번역되어야 합니다.어셈블러에는 두 가지 기본 유형이 있습니다.

단일 패스 어셈블러는 프로그램을 한 번 스캔하고 동등한 이진 프로그램을 만듭니다.이 유형의 어셈블러는 니모닉 코드 테이블에서 코드를 찾아 어셈블리 언어 코드의 유효성을 검사합니다.단일 패스 어셈블러는 종종 다중 패스 어셈블러보다 빠르며 일반적으로 중간 코드를 구성할 필요가 없습니다.

다중 패스 어셈블러는 어셈블러가 둘 이상의 패스를 사용함을 의미합니다.다중 패스 어셈블러는 첫 번째 단계에서 모든 기호와 각 값이 포함된 테이블을 만든 다음 이후 단계에서 테이블을 사용하여 새 코드를 생성합니다.각 개별 패스는 일반적으로 다른 특정 작업을 처리합니다.일반적으로 느리지만 모듈식 구조의 다중 패스 어셈블러는 종종 다른 기계에 재사용될 수 있습니다.

어셈블리 언어 코드의 예

다음은 NASM(Netwide Assembler) 어셈블리 언어 코드의 예입니다.

어셈블리 언어 코드의 예.

로욜라 메리마운트 대학교

이 예에서 코드 끝에 있는 SYSCALL 명령은 운영 체제 서비스가 저장된 메모리 부분을 트리거합니다.그런 다음 코드 RAX를 사용하여 작성할 코드를 호출한 다음 RDI를 종료합니다.SYSCALL 함수는 운영 체제를 호출하고 코드가 완료되고 종료할 시간을 시스템에 표시하기 위해 두 번 사용됩니다.

어셈블리 언어의 예는 무엇입니까?

가장 일반적으로 사용되는 어셈블리 언어는 ARM, MIPS 및 x86입니다.

C++는 어셈블리 언어입니까?

C++는 어셈블리 코드로 구성되지 않습니다.C++ 컴퓨팅 언어는 컴파일러가 실행 가능한 기계어로 번역하는 C++ 코드로 구성됩니다.

파이썬은 어셈블리 언어입니까?

Python은 어셈블리 언어보다 고급입니다.어셈블리 언어는 저수준 언어로 간주되지만 C, Java 또는 Python과 같은 고급 언어는 숫자, 기호 및 약어 대신 0과 1을 사용합니다.

오늘날 어셈블리 언어는 어떻게 사용됩니까?

고급 언어에 비해 낮은 수준의 언어로 간주되지만 어셈블리 언어는 여전히 사용됩니다.어셈블리 언어는 하드웨어를 직접 조작하거나, 특수 프로세서 명령에 액세스하거나, 중요한 성능 문제를 평가하는 데 사용됩니다.이러한 언어는 또한 빈도가 높은 거래와 같이 시간에 민감한 활동을 위해 고급 언어에 비해 속도 이점을 활용하는 데 사용됩니다.

결론

어셈블리 언어는 코딩 언어를 사용하여 입력된 명령과 기계가 코드 명령을 해석하는 방법 사이의 강력한 관계에 의존하는 저수준 코드입니다.코드는 입력을 기계가 인식할 수 있는 명령으로 변환하는 어셈블러를 사용하여 실행 가능한 작업으로 변환됩니다.컴퓨팅 초기에는 널리 퍼져 있었지만 많은 대규모 시스템에서 고급 언어를 사용합니다.