육식하는야채의 개발일지
article thumbnail
Published 2023. 12. 18. 18:55
명령어 CS

고급 언어와 저급 언어

고급 언어 = 사람을 위한 언어

ex) 파이썬, c언어, JAVA, swift 등등

 

저급 언어 = 기계를 위한 언어

컴퓨터가 직접 이해하고 실행할 수 있는 언어이며 

ex) 기계어, 어셈블리어

 

 

 


컴파일 언어와 인터프리터 언어

 

고급 언어로 작성한 소스 코드는 저급 언어로 변환되어 실행된다. 저급 언어로 변환하는 과정을 컴파일이라고 한다.

저급 언어로 변환된는 방식에는 크게 두 가지 방식이 있다.

컴파일 방식과, 인터프리터 방식이 있다.

각각의 방식을 사용하는 언어가 컴파일 언어와 인터프리터 언어이다.

 

컴파일 언어는 컴파일이 실행 될 때 한번에 소스 코드 전체를 보며 문법적인 오류, 실행 가능한 코드인지, 불필요한 코드는 없는지를 따지며 하나라도 오류가 있을 시에 컴파일에 실패한다.

만약 오류가 없어 컴파일에 성공하면 저급 언어로 변환 되는데 이렇게 변환된 코드를 목적코드라고 한다.

 

인터프리터 언어는 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어이다.

만약 N번째 줄에 문법오류가 있다면 그 줄 전까지는 실행된다. 하지만 컴파일 언어보다는 속도가 느리다.

 

 

 

 

컴파일 언어(C) 인터프리터 언어(Python)
코드 실행 전에 컴파일 타임에 소스 코드 전체를 한번에 기계어로 변환 후 실행

실행 파일 생성

컴파일 단계와 실행 단계가 분리

컴파일은 한번만 수행

컴파일과 실행단계가 분리되어 있어, 실행시에는 실행만 하면 되므로 코드 실행 속도가 빠름
코드가 실행 단계인 런타임에 코드를 한 줄 씩 중간 코드인 바이트 코드로 변환 후 실행

실행 파일 생성 X

인터프리트 단계와 실행단계 분리 X
인터프리터는 한 줄씩 바이트코드로 변환 후 즉시 실행

코드 실행시마다 인터프리트 과정 반복 수행

인터프리트 단계와 실행 단계가 분리되어 있지 않아 반복 수행하므로 실행속도 느림

 

 


연산 코드와 오퍼랜드

 

컴퓨터의 명령어는 연산코드와 오퍼랜드로 구성되어 있다.

 

 

연산코드에는 명령어가 수행할 연산 = 더하라, 뺴라, 곱해라....

오퍼랜드에는 연산에 사용할 데이터, 연산에 사용할 데이터가 저장된 위치 = 120, 120이 저장된 메모리 주소....

 

 

연산코드

연산코드는 명령어가 수행할 연산을 의미한다.

코드의 종류는 많지만 기본적인 연산 코드 유형은 4가지이다.

 

  1. 데이터전송
  2. 산술.논리 연산
  3. 제어 흐름 변경
  4. 입출력 제어

 

 

오퍼랜드

오퍼랜드는 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치를 의미한다.

오퍼랜드에는 데이터가 직접 올 수도 있지만 대부분은 데이터가 저장된 위치, 즉 메모리 주소나 레지스터 이름이 담긴다.

때문에 오퍼랜드 필드를 주소 필드라고 부리기도 한다.

오퍼랜드는 명령어 안에 하나도 없을 수도 있고 한 개만 있을 수도 있고 여러개가 있을 수 있다.

 

 

 

오퍼랜드에 데이터를 직접 넣지 않고 주로 메모리 주소나 레지스터 이름을 담는 이유

 

 

 

 

 

명령어의 길이가 한정되어 있어 직접 넣을 수 있는데이터는 연산코드 길이를 뺀 만큼만 할당되기 때문에 큰 데이터를 넣기 위해서는 데이터가 위치한 메모리주소나 레지스터 이름을 넣는다.

만약 3-주소 명령어면 오퍼랜드의 길이가 짧아 담을 수 있는 데이터의 크기가 더 줄어들게 된다.

 

 

 

 

 

메모리주소나 레지스터 이름을 담으면 하나의 명령어 길이만큼을 온전히 데이터를 위해 할당할 수 있기 때문에 저장할 수 있는 데이터의 크기가 커진다. 이때 데이터가 저장된 위치를 유효 주소라고 한다.

 

 

 

주소 지정 방식

 

즉시 주소 지정 방식

 

 

 

연산에 필요한 데이터를 오퍼랜드 필드에 직접 명시하는 방식이다.

데이터의 크기가 작아지는 단점이 있지만 속도가 가장 빠르다.

 

 

직접 주소 지정 방식

 

오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식이다.  즉시 주소 지정 방식보다는 표시할 수 있는 데이터의 크기가 늘었지만 유효 주소를 표현할 수 있는 범위가 연산 코드의 비트 수만큼 줄어들었다는 단점이 있다.

즉, 표현할 수 있는 유효 주소에 제한이 생길 수 있다.

 

 

 

간접 주소 지정 방식

우효 주소의 주소를 오퍼랜드 필드에 명시하는 방식이다. 직접 주소 지정 방식보다 표현할 수 있는 유효 주소의 범위가 더 넓어지는 장점이 있지만 두 번의 메모리 접근이 필요하기 때문에 일반적으로 느리다는 단점이 있다.

 

 

오퍼랜드 필드에 주소 200을 명시하고 메모리 주소 200에는 다시 실제 데이터가 있는 주소 300을 가리킨다.

 

 

 

레지스터 주소 지정 방식

직접 주소 지정 방식과 비슷하게 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시하는 방식이다.

메모리는  CPU 외부에 있기 때문에 내부에 있는 레지스터에 접근하는 것이 더 빠르기 때문에 이런 방식을 사용한다.

다만 직접 주소 지정 방식처럼 오퍼랜드의 크기가 연산코드에 의해 줄어드므로 표현 할 수 있는 유효 주소의 크기가 줄어드는 단점이 있다.

 

 

 

 

레지스터 간접 주소 지정 방식

연산에 사용할 데이터를 메모리에 저장하고 그 주소(유효 주소)를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법이다.

메모리에 접근을 두 번 하는 간접 주소 지정 방식보다 메모리에 접근하는 횟수가 한 번으로 줄어들기 때문에 속도가 

간접 주소 지정 방식보다 빠르다는 장점이 있다.

 

'CS' 카테고리의 다른 글

CPU의 작동 원리  (0) 2024.03.12
데이터  (1) 2023.12.07
컴퓨터의 기본구조  (1) 2023.12.04
profile

육식하는야채의 개발일지

@육식하는야채

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!