학습목표
1. 고급 언어와 저급 언어의 차이
2. 컴파일 언어와 스크립트 언어의 차이
3. 명령어를 구성하는 연산 코드와 오퍼랜드
4. 명령어의 주소 지정 방식

소스 코드와 명령어

고급 언어와 저급 언어

고급 언어(high-level programming language)
: 사람이 이해하고 작성하기 쉽도록 만들어진 언어
예) C, C++, Java, Javascript 등 대부분의 프로그래밍 언어

저급 언어(low-level programming language)
: 컴퓨터가 이해하고 실행할 수 있는 언어

저급 언어의 종류

  • 기계어machine code: 0과 1의 명령어 비트로 이루어진 언어
이진수로 표현된 기계어십육진수로 표현된 기계어
  • 어셈블리어assembly language: 기계어를 읽기 편한 형태로 번역한 언어

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

컴파일 언어

코드 전체가 저급 언어로 변환되는 과정(컴파일)을 거친다.
컴파일러(컴파일을 수행해 주는 도구)는 소스 코드 전체를 훑어보며 저급 언어로 컴파일 하고 소스 코드 내에 오류가 하나라도 있으면 컴파일에 실패.

컴파일이 수행되어 저급 언어로 변환된 코드를 목적 코드(object code)라고 한다.

인터프리터 언어

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

NOTE. 컴파일 언어, 인터프리터 언어 칼로 자르듯 구분 될까?
스크립트 언어인 파이썬도 컴파일을 하고, 자바도 컴파일과 인터프리트를 동시에 수행한다. 즉, 하나의 언어가 반드시 둘 중 하나의 방식으로만 작동한다고 생각하는 잘못된 개념이며, 고급언어가 저급 언어로 변환되는 대표적인 방법에는 컴파일과 스크립트 방식이 있다고 이해하자.

목적파일 vs 실행파일

텍스트로 이루어진 파일 = 텍스트 파일
목적코드로 이루어진 파일 = 목적 파일
실행 코드로 이루어진 파일 = 실행파일 (예, .exe 확장를 가진 파일)

목적 코드가 실행 파일이 되기 위해서는 링킹이라는 작업을 거쳐야 한다.

명령어의 구조

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

명령어
연산 코드 오퍼 랜드

연산 코드와 오퍼랜드

  • 연산코드(연산자): 명령어가 수행할 연산

  • 오퍼랜드(피연산자): 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치

연산 코드 필드 연산 코드가 담기는 영역
오퍼랜드 필드 오퍼랜드가 담기는 영역

오퍼 랜드

  • 숫자, 문자 등을 나타내는 데이터 또는 메모리나 레지스터 주소가 담긴다.
  • 주소 필드라고도 부른다
명칭오퍼랜드 갯수
0-주소 명령어오퍼랜드가 하나도 없는 경우
1-주소 명령어오퍼랜드가 하나인 경우
2-주소 명령어오퍼랜드가 두 개인 경우
3-주소 명령어오퍼랜드가 세 개인 경우

연산 코드

연산 코드 유형

  1. 데이터 전송
연산코드(연산자)설명
MOVE데이터를 옮겨라
STORE메모리에 저장하라
LOAD(FETCH)메모리에서 CPU로 데이터를 가져와라
PUSH스택에 데이터를 저장하라
POP스태의 최상단 데이터를 가져와라
  1. 산술/논리 연산
연산자설명
ADD / SUBSTRACT / MULTIPLY / DIVIDE덧셈 / 뺄셈 / 곱셈 / 나눗셈을 수행하라
INCREMNET / DECREMENT오퍼랜드에 1을 더하라 / 오퍼랜드에 1을 빼라
AND / OR / NOTAND / OR / NOT 연산을 수행하라
COMPARE두 개의 숫자 또는 TRUE / FALSE 값을 비교하라
  1. 제어 흐름 변경
연산자설명
JUMP특정 주소로 실행 순서를 옮겨라
CONDITIONAL JUMP조건에 부합할 때 특정 주소로 실행 순서를 옮겨라
HALT프로그램의 실행을 멈춰라
CALL되돌아올 주소를 저장한 채 특정 주소로 실행 순서를 옮겨라
RETURNCALL을 호출할 때 저장했던 주소로 돌아가라
  1. 입출력 제어
연산자설명
READ(INPUT)특정 입출력 장치로부터 데이터를 읽어라
WRITE(OUTPUT)특정 입출력 장치로 데이터를 써라
START IO입출력 장치를 시작하라
TEST IO입출력 장치의 상태를 확인하라

주소 지정 방식

: 오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법

유효 주소(effective address): 연산의 대상이 되는 데이터가 저장된 위치

즉시 주소 지정 방식

  • 연산에 필요한 데이터를 오퍼랜드 필드에 직접 명시
  • 가장 간단한 형태
  • 표현할 수 있는 데이터의 크기는 작지만, 메모리나 레지스터로부터 찾는 과정이 없기 때문에 빠르다

직접 주소 지정 방식

  • 유효 주소를 직접적으로 명시
  • 즉시 주소 지정 방식 보다 더 크지만 연산 코드의 길이만큼 필드의 길이가 짧아 제한이 있다

간접 주소 지정 방식

  • 유효 주소의 주소를 오퍼랜드 필드에 명시
  • 두 번의 메모리 접근이 필요하기 때문에 다소 느린 편

레지스터 지정 방식

  • 연산에 사용할 데이터를 저장한 레지스터 이름을 오퍼랜드 필드에 직접 명시
  • 메모리에 접근하는 것보다 CPU 내부의 레지스터에 접근하는게 더 빠르다
  • 하지만 표현 가능한 레지스터의 크기에 제한이 있다

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

  • 메모리에 데이터를 저장하고 그 주소(유효 주소)를 저장한 레지스터를 오퍼랜드 필드에 명시
  • 간접 주소 지정 방식과 비슷하나 메모리에 접근 횟수가 한번으로 줄어든다
  • 간접 주소 지정 방식보다 빠르다

0개의 댓글