cs_220602_[026] 고수준 언어에서 프로그램 실행까지

설탕유령·2022년 6월 1일
0

1950년말 특정 프로세서 아키텍처에 독립적인 고 수준 프로그래밍 언어가 개발됨

  • 고수준 언어를 쓰면 사람이 표현하는 방식에 가까운 용어로 계산 과정을 작성 가능
  • 고수준 언어로 작성된 코드는 번역기 프로그램을 통해 대상 프로세서의 어셈블리 언어로 된 명령어로 변환 됨
  • 변한 된 명령어는 어셈블러에 의해 비트로 변환되어 메모리에 로드되고 실행 됨
  • 번역기 프로그램은 보통 컴파일러(Compiler)라고 불림

일반적인 고수준 언어에서는 두 수 X와 Y를 더하고 결과를 Z에 저장하는 계산이 다음과 같음
Z = X + Y

  • 이는 'X와 Y라는 메모리 위치에서 갑승ㄹ 가져와, 두 값을 더하고, Z라는 메모리 위치에 결과를 저장하라' 라는 뜻
  • 연산자 '='는 '같다'가 아니라 '대체하다' 또는 '저장하다'라는 뜻으로 쓰임

명령어는 컴파일러에 따라서 다른 명령어로 변환 됨

  • 각 어셈블러는 각자의 어셈블리 언어 명령어를 실제 명령어의 비트 패턴으로 변환함
  • 또한 변수 X,Y,Z를 저장할 메모리 위치를 확보

컴파일러는 내부적으로 하나의 '프런트엔드(전단부)'와 몇 개의 '백엔드(후단부)'로 나뉠 가능성이 있음

  • 프런트엔드는 고수준 프로그래밍 언어로 작성된 프로그램을 처리해 어떤 중간 형태로 만듬
  • 각 백엔드는 공통된 중간 표현을 특정 아키텍처에 맞는 어셈블리 언어로 변환
  • 이 구조는 독립적인 여러 개의 컴파일러를 이용하는 것보다 단순함

고수준 언어는 어셈블리 언어에 비해 큰 이점을 가짐

  • 사람들이 생각하는 방식에 더 가까워 배우고 사용하기 쉬움
  • 고수준 언어에서는 프로그램을 효율적으로 짜기 위해 특정 프로세서의 명령어 레퍼토리를 알아야 할 필요가 없음

고수준 언어로 작성된 프로그램은 특정 아키텍처에 종속되지 않음

  • 같은 프로그램이 여러 아키텍처상에서 실행 될 수 있음
  • 보통은 코드를 변경할 필요 없으며 한번 작성시 다양한 컴퓨터에서 실행 할 수 있음

컴파일 단계는 몇 가지 명백한 에러를 미리 점검하게 해줌

  • 철자 오류, 괄호 불일치와 같은 구문 오류
  • 정의되지 않은 변수에 대한 연산 등
  • 어셈블러는 명령어의 실행 순서까지는 상관하지 않아서 에러를 검출 하기 어려움
profile
달콤살벌

0개의 댓글