테키테크 TEKITECH

[컴퓨터구조] Ch03. 프로그래밍 언어와 컴퓨터 명령어 본문

그리고/스터디

[컴퓨터구조] Ch03. 프로그래밍 언어와 컴퓨터 명령어

TEKI 2023. 2. 5. 21:07
  1. 고급 언어와 저급 언어
  2. 컴파일 언어와 인터프리터 언어
  3. 연산 코드와 오퍼랜드
  4. 명령어의 주소 지정 방식

 

1.  고급 언어와 저급 언어

고급 언어(High-Level Programming Language) : 사람이 이해하고 작성하기 쉽게 만들어진 언어
저급 언어(Low-Level Programming Language) : 컴퓨터가 직접 이해하고 실행할 수 있는 언어

"고급 언어로 작성된 소스 코드가 실행되려면 저급 언어, 즉 명령어로 변환되어야 한다."

◈  Low-Level Programming Language - 기계어와 어셈블리어

기계어 : 명령어 비트(0과 1)로 이루어진 언어
어셈블리어 : 기계어를 읽기 편한 형태로 번역한 언어

 

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

컴파일 언어 : 컴파일 방식 즉, 컴파일러에 의해 소스 코드가 통째로 저급 언어로 변환되어 실행되는 프로그래밍 언어
인터프리터 언어 : 인터프리트 방식 즉, 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 프로그래밍 언어

" 컴파일 언어는 일반적으로 인터프리터 언어에 비해 빠르다. "
" 인터프리터 언어는 소스 코드 내에 오류가 있어도 그 직전 코드까지는 올바르게 수행한다. "
" 하나의 언어가 반드시 컴파일 방식 또는 인터프리트 방식 둘 중 하나로만 작동하는 것은 아니다. "

 

3. 연산 코드와 오퍼랜드

연산 코드는 '명령어가 수행할 연산'을 의미하고, 오퍼랜드는 '연산에 사용할 데이터'를 의미한다.
예를 들어 '100과 120을 더해라'라는 명령어에서 '더해라'는 연산 코드, '100'와 '120'은 오퍼랜드이다.

 

◈  대표적인 연산 코드의 종류 1. 데이터 전송

  • MOVE : 데이터를 옮겨라
  • STORE : 메모리에 저장하라
  • LOAD(FETCH) : 메모리에서 CPU로 데이터를 가져와라
  • PUSH : 스택에 데이터를 저장하라
  • POP : 스택의 최상단 데이터를 가져와라

◈  대표적인 연산 코드의 종류 2. 산술/논리 연산

  • ADD / SUBTRACT / MULTIPLY / DIVIDE : 덧셈/뺄셈/곱셈/나눗셈을 수행하라
  • INCREMENT / DECREMENT : 오퍼랜드에 1을 더하라/빼라
  • AND / OR / NOT
  • COMPARE : 두 개의 숫자 또는 TRUE/FALSE 값을 비교하라

◈  대표적인 연산 코드의 종류 3. 제어 흐름 변경

  • JUMP : 특정 주소로 실행 순서를 옮겨라
  • CONDITIONAL JUMP : 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라
  • HALT : 프로그램의 실행을 멈춰라
  • CALL : 되돌아올 주소를 저장한 채 특정 주소로 실행 순서를 옮겨라
  • RETURN : CALL을 호출할 때 저장했던 주소로 돌아가라

◈  대표적인 연산 코드의 종류 4. 입출력 제어

  • READ(INPUT) : 특정 입출력 장치로부터 데이터를 읽어라
  • WRITE(OUTPUT) : 특정 입출력 장치로 데이터를 써라
  • START IO : 입출력 장치를 시작하라
  • TEST IO : 입출력 장치의 상태를 확인하라

 

4. 명령어의 주소 지정 방식

n 비트 길이의 명령어에서 연산 코드 필드가 m 비트라면 오퍼랜드 필드에는 최대 (n - m) 비트만큼만 할당할 수 있다.
만약 오퍼랜드 필드 안에 메모리 주소가 담긴다면, 표현할 수 있는 데이터의 크기는 더 커질 수 있다.
또는 오퍼랜드 필드에 메모리 주소가 아닌 레지스터 이름을 명시하더라도 마찬가지이다.

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

 

◈  대표적인 주소 지정 방식 1. 즉시 주소 지정 방식

  • 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 가장 간단한 형태의 주소 지정 방식
  • 표현할 수 있는 데이터의 크기가 작아짐
  • 연산에 사용할 데이터를 메모리나 레지스터로부터 찾는 과정이 없기 때문에 다른 주소 지정 방식들보다 빠름
  • 오퍼랜드 필드에 명시하는 값: 연산에 사용할 데이터

◈  대표적인 주소 지정 방식 2. 직접 주소 지정 방식

  • 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식
  • 오퍼랜드 필드에서 표현할 수 있는 데이터의 크기가 즉시 주소 지정 방식보다 커짐
  • 유효 주소를 표현할 수 있는 범위가 연산 코드의 비트 수만큼 감소
  • 오퍼랜드 필드에 명시하는 값: 유효 주소(메모리 주소)

◈  대표적인 주소 지정 방식 3. 간접 주소 지정 방식

  • 유효 주소의 주소를 오퍼랜드 필드에 명시하는 방식
  • 직접 주소 지정 방식보다 표현할 수 있는 유효 주소의 범위가 더 넓어짐
  • 두 번의 메모리 접근이 필요하여 즉시 주소 지정 방식이나 직접 주소 지정 방식보다 느림
  • 오퍼랜드 필드에 명시하는 값: 유효 주소의 주소

◈  대표적인 주소 지정 방식 4. 레지스터 주소 지정 방식

  • 직접 주소 지정 방식과 유사하게 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시하는 방식
  • 메모리(CPU 외부에 있음)보다 레지스터(CPU 내부에 있음)에 접근하는 것이 빠르므로 직접 주소 지정 방식보다 빠름
  • 표현할 수 있는 레지스터 크기에 제한이 생길 수 있다
  • 오퍼랜드 필드에 명시하는 값: 유효 주소(레지스터 이름)

◈  대표적인 주소 지정 방식 5. 레지스터 간접 주소 지정 방식

  • 연산에 사용할 데이터를 메모리에 저장하고, 그 주소(유효 주소)를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법
  • 유효 주소를 찾는 과정이 간접 주소 지정 방식과 유사하지만, 메모리에 접근하는 횟수가 한 번으로 줄어 더 빠름
  • 오퍼랜드 필드에 명시하는 값: 유효 주소를 저장한 레지스터

 

반응형
Comments