728x90

고급언어

컴퓨터 과학과 소프트웨어 공학에 사용되는 용어로, 사람이 쉽게 이해하고 사용할 수 있는 비교적 복잡한 문법과 구조를 갖춘 컴퓨터 프로그래밍 언어를 말합니다. 고급언어의 프로그래밍 과정을 단순화하고 개발자들이 프로그램을 더 쉽게 작성하고 유지보수 할 수 있도록 도와줍니다. 이러한 언어들은 사람들이 읽고 쓰기 쉽게 설계되어 있습니다. 코드의 가독성이 높고 추상화 수준이 높습니다. 고급언어의 대표적인 예시로는 Python, Java, C++ 등이 있습니다. 이러한 언어들은 저급언어보다 추상화 수준이 높아 개발자가 하드웨어 세부사항에 직접 신경 쓰지 않고도 프로그램을 작성할 수 있게 합니다.

 

저급언어

저급언어는 컴퓨터와 더 가까운 수준의 언어로, 기계어나 어셈블리어 같은 형태를 갖추고 있으며 언어들은 하드웨어와 직접적으로 상호작용하는 데에 유리하지만, 개발과 유지보수가 어렵고 오류 발생 가능성이 높기 때문에 일반적인 애플리케이션 개발을 할 때는 고급 언어를 사용합니다.

 

기계어

기계어는 컴퓨터가 직접 이해하고 실행할 수 있는 가장 낮은 수준의 언어이며 이 언어는 0과 1로 이루어진 이진 코드로 표현됩니다.

아키텍처 기계어 명령어를 이진코드로 표현

어셈블리어

기계어와 밀접한 관련이 있는 저급언어로, 기계어 명령들을 사람이 이해하기 쉬운 기호로 대체한 언어입니다.

 

아키텍처에서 어셈블리어 명령어 표현

MOV는 값을 복사하는 명령어를 말하면 AL은 누산기 레지스터를 가리키며 6h는 16진수로 61를 나타냅니다.

어셈블리어는 기계어에 비해 이해하기 쉽고 상대적으로 간단하게 작성할 수 있으므로 하드웨어 제어나 성능이 중용한 프로그래밍, 임베디드, 드라이버 개발 등에 활용됩니다.

 

컴파일 언어

컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어입니다.

 

작동방식

  • 소스 코드 작성 : 프로그래머가 고급언어로 소스 코드를 작성합니다. 이 소스코드는 사람이 읽고 이해하기 쉽도록 설계되어 있습니다.
  • 컴파일 : 소스 코드를 컴파일러에 입력하면 컴파일러가 해당 언어의 문법 규칙을 따라 기계어로 번역합니다. 이 과정에서 오류가 있는지 확인하고 오류가 있으면 프로그래머에게 알려줍니다.
  • 목적 코드 생성 : 컴파일러가 소스 코드를 기계어로 번역하면 모적 코드라고 불리는 실행 파일이 생성됩니다.
  • 링킹 : 목적 코드에는 여러 개의 파일이 포함될 수 있습니다. 이러한 목적 코드들을 라이브러리와 함께 링커를 사용하여 하나의 실행 파일로 결합합니다.
  • 실행 : 링킹된 실행 파일을 실행하면, 컴파일된 기계어 코드가 컴퓨터의 CPU에 직접 실행되어 원하는 작업이 수행됩니다. 

인터프리터 언어

소스 코드를 직접 실행하는 방식으로 작동하는 언어를 말하며 한 줄씩 실행되는 고급언어입니다.

 

작동방식

  • 소스코드 작성 : 프로그래머가 고급언어로 소스 코드를 작성합니다.
  • 구문 분석 : 소스 코드를 읽고 구문 분석을 통해 코드를 토큰으로 나눕니다.
  • 실행 : 인터프리터는 토큰화된 코드를 한 줄씩 읽어 들여 실행합니다. 각 줄은 순차적으로 처리되며 이때 변수의 값이 변경되고 계산이 수행됩니다.
  • 오류 처리 : 문법 오류나 런타임 오류를 감지하고 처리합니다. 오류가 발생하면 인터프리터는 해당 오류를 보고하고 프로그램 실행을 중단할 수 있습니다.
  • 상태 관리 : 인터프리터는 프로그램의 상태를 관리하며, 변수의 값, 함수의 호출 스택, 객체의 상태를 추적합니다.
  • 반복 : 소스 코드의 끝까지 도달하거나 중단 명령을 만날 때까지 인터프리터는 코드를 계속해서 실행합니다. 

주소지정방식

컴퓨터 프로세서가 메모리 내의 데이터나 명령어에 접근하는 방법을 결정하는 데 사용되는 규칙의 집합입니다. 프로세서는 명령어를 실행하거나 데이터를 일고 쓸 때  해당 데이터 또는 명령어가 어떤 메모리에 위치에 있는지 결정해야 합니다.

  • 직접 주소 지정 : 명령어에서 직접 주소를 명시하여 해당 주소에 있는 데이터나 명령어를 사용합니다. 가장 간단한 주소 지정 방식으로, 명령어 자체에 상수 값이나 메모리 주소를 지정합니다.
  • 간접 주소 지정 : 주소의 위치를 나타내는 포인터를 사용하여 해당 포인터가 가리키는 주소에 있는 데이터나 명령어를 사용하며 주소가 직접 주어지는 것이 아니라, 주소가 저장된 위치를 참조하여 접근합니다.
  • 레지스터 주소 지정 : 데이터나 명령어가 레지스터네 저장되어 있는 경우에 해당 레지스터를 사용하여 데이터나 명령어에 접근합니다. 레지스터는 CPU 내부에 존재하며 빠른 액세스가 가능합니다.
  • 상대 주소 지정 : 현재 위치에서 상대적으로 주소를 지정하는 방식입니다. 주로 분기 명령어에서 사용되며, 현재 위치에 상대적으로 이동할 주소를 명시합니다.
  • 레지스터 간접 주소지정 : 레지스터가 가리키는 주소에 있는 데이터나 명령어에 접근하는 방식입니다. 레지스터에 저장된 주소를 통해 간접적으로 메모리에 접근합니다.

프로세서의 아키텍처와 명령어 세트에 따라 지원되는 주소지정 방식이 달라지므로, 프로그래머가 이러한 주소지정 방식을 이해하고 사용하여 프로그램을 작성해야 합니다. 주소지정 방식은 컴퓨터 아키텍처와 프로그래밍 언어의 설계에 중요한 영향을 미치는 요소 중 하나입니다.

 

 

 

 

 

728x90

'컴퓨터구조' 카테고리의 다른 글

스택, 큐  (0) 2024.02.13
컴퓨터 구조(0,1숫자 문자표현)  (0) 2023.08.16
컴퓨터 구조 1장  (0) 2023.08.16