명령어

팀가이스트·2024년 2월 15일

1.고급 언어와 저급 언어

컴퓨터는 C,C++,Java 같은 프로그래밍 언어를 이해할 수 있을까?
우리가 프로그램을 만들 때 사용하는 프로그래밍 언어는 컴퓨터가 이해하는 언어가 아닌 사람이 이해하고 작성하기 쉽게 만들어진 언어이다.

이런 사람을 위한 언어를 고급 언어라고 한다.
반대로 컴퓨터가 직접 이해하고 실행할 수 있는 언어를 저급 언어라고 한다.

컴퓨터가 실행할 수 있는 언어는 저급 언어 뿐이기에 고급 언어를 실행시키려면 저급 언어로 변환되어야 한다.

이런 저급 언어도 두 가지로 나뉘어 지는데 기계어어셈블리어이다.

기계어는 0과 1의 명령어 비트로 이루어져 있다고 했는데 0과 1로 표현된 명령어를 읽기 편한 상태로 번역한 것이 어셈블리어이다.

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

2.1 컴파일 언어

고급 언어는 어떻게 저급 언어로 변환될까?
크게 두 가지 방식이 있는데 컴파일 방식인터프리트방식이 그것이다.

컴파일 언어는 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어이다.
대표적으로 C가 있다.
소소 코드는 전체가 저급 언어로 변환되는 과정을 거치는데 이를 "컴파일"이라고 한다. 컴파일을 도와주는 도구를 컴파일러 라고 한다.

컴파일에 성공하면 저급 언어로 변환된 목적 코드를 얻을 수 있다.

2.2 인터프리터 언어

인터프리터 언어는 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급언어이다. 대표적인 인터프리터 언어로 Python이 있다.
인터프리터 언어는 소스코드를 한 줄씩 차례로 실행하여 저급 언어로 변환시키고 이 과정을 도와주는 도구를 인터프리터라고 한다.

3. 명령어의 구조

3.1 연산 코드와 오퍼랜드

컴퓨터의 명령어도 '무엇을 대상으로, 어떤 작동을 수행해라'는 구조로 되어 있다.

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

연산코드 - 명령어가 수행할 연산
오퍼랜드 - 연산에 사용할 데이터가 저장된 위치

3.2 오퍼랜드

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

오퍼랜드 필드에는 숫자나 문자와 같이 연산에 사용할 데이터를 직접 명시하기보다는 연산에 사용할 데이터가 저장된 위치, 즉 메모리 주소나 레지스터 이름이 담긴다.

여기서 오퍼랜드가 하나도 없는 명령어를 0-주소 명령어, 오퍼랜드가 하나인 명령어를 1-주소 명령어, 두 개인 명령어를 2-주소 명령어, 세 개인 명령어를 3-주소 명령어라고 한다.

3.3 연산 코드

기본적인 연산 코드 유형은 크게 네 가지로 나뉜다.

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

3.4 주소 지정 방식

명령어의 크기가 16비트, 연산 코드 필드가 4비트인 2-주소 명령어에서는 오퍼랜드 필드당 6비트 정도밖에 남지 않는다. 즉 하나의 오퍼랜드 필드로 표현할 수 있는 정보의 가짓수는 26개밖에 되지 않는다.

반면 위와 같이 메모리에 데이터를 저장하고 오퍼랜드 필드 안에는 메모리 주소만 저장한다면 정보의 가짓수가 216으로 확 늘어난다.

메모리 주소가 아닌 레지스터 이름을 명시할 때도 마찬가지이다.

연산 코드에 사용할 데이터가 저장된 위치, 연산의 대상이 되는 데이터가 저장된 위치를 유효 주소라고 한다.
오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법을 주소 지정 방식이라고 한다.

3.5 즉시 주소 지정 방식

즉시 주소 지정방식은 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방법이다.

  • 메모리나 레지스터를 거치지 않아도되기 때문에 다른 주소 지정 방식보다 빠르다.
  • 표현할 수 있는 데이터 크기가 한정되어 있다.

3.6 직접 주소 지정 방식

오퍼랜드 필드에 유효 주소 직접적으로 명시하는 방법이다.

  • 유효 주소를 표현할 수 있는 크기가 연산 코드만큼 줄어든다.
  • 연산 코드의 크기에 영향을 받는다. 표현할 수 있는 유효 주소에 제한이 생기는 것이다.

3.7 간접 주소 지정 방식

간접 주소 지정 방식은 유효 주소의 주소를 오퍼랜드 필드에 명시한다.

  • 직접 주소 지정 방식보다 표현할 수 있는 유효 주소의 범위가 더 넓다.
  • 두 번의 메모리 접근이 필요하기 때문에 느리다.

3.8 레지스터 주소 지정 방식


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

  • CPU 외부에 있는 메모리에 접근하는 것보다 CPU 내부에 있는 레지스터에 접근하는 것이 더 빠르다.

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

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

  • 메모리에 접근하는 횟수가 한 번으로 줄어든다.

0개의 댓글