본문 바로가기

CS/혼자 공부하는 컴퓨터구조와 운영체제

03 - 2 명령어 2

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

명려어가 수행할 연산을 연산 코드, 연산에 사용할 데이터나 주소 를 오퍼랜드라고 한다.

연산 코드는 연산자, 오퍼랜드는 피연산자라고도 부른다.

연산 코드가 담기는 영역을 연산 코드 필드, 오퍼랜드가 담기는 영역을 오퍼랜드 필드라고 한다.

기계어와 어셈블리어는 명령어라서 연산 코드와 오퍼랜드로 구성된다.

오퍼랜드

연산에 사용할 데이터나 데이터의 주소 값이다.

대부분의 경우에는 메모리 주소 혹은 레지스터 이름을 담기에 주소 필드라고도 부른다.

오퍼랜드는 하나의 명령어 안에 존재하지 않거나 다수 존재할 수 있다.

가령 오퍼랜드가 없이 연산 코드만 있다면 >> ( 0 - 주소 명령어 )

오퍼랜드가 하나 이면 >> ( 1 - 주소 명령어 ) 가 되는 것이다.

연산 코드

연산 코드는 말 그대로 연산을 의미한다. 이 중 가장 기본적인 연산 코드 유형이 있다.

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

데이터 전송 :

  1. MOVE : 데이터 옮기기
  2. STORE : 메모리에 저장하기
  3. LOAD(FETCH) : 메모리에서 CPU로 데이터를 가져오기
  4. PUSH : 스택에 데이터 저장하기
  5. POP : 스택의 최상단 데이터 가져오기

산술/논리 연산 :

  1. ADD/SUBTRACT/MULTIPLY/DIVIDE : 사칙연산 수행
  2. INCREMENT / DECREMENT : 오퍼랜드에 +- 1하기
  3. AND / OR / NOT : 논리 연산 수행
  4. COMPARE : 숫자 혹은 TRUE/FALSE 값 비교 수

제어 흐름 변경 :

  1. JUMP : 특정 주소로 실행 순서 옮기기
  2. CONDITIONAL JUMP : 조건에 부합할 때 특정 주소로 실행 순서 옮기기
  3. HALT : 프로그램의 실행 멈추기
  4. CALL : 되돌아올 주소를 저장한 채 특정 주소로 실행 순서 옮기기
  5. RETURN : CALL 할 때 저장한 주소로 돌아가기

입출력 제어 :

  1. READ(INPUT) : 특정 입출력 장치로부터 데이터 읽기
  2. WRITE(OUTPUT) : 입출력 장치로 데이터를 쓰기
  3. START IO : 입출력 장치를 시작하기
  4. TEST IO : 입출력 장치 상태 확인하기

주소 지정 방식

오퍼랜드가 메모리나 레지스터의 주소를 담는 경우가 대부분이라고 했다. 왜 일까?

이는, 명령어의 크기 때문이다. 한 개의 명령어가 N 비트이고 연산 코드가 M 비트를 차지한다면 여기서 오퍼랜드 필드의 크기는 N - M 비트가 된다. 이를 3 - 주소 명령어로만 봐도 각 오버랜드 필드의 크기는 ( N - M ) / 3 으로 매우 작아진다.

그래서 오퍼랜드 필드에 주소를 지정하여 표현할 데이터의 크기를 늘릴 수 있다.

이때, 필드에 주소를 지정하면 해당 주소 값을 유효 주소라고한다.

주소 지정 방식은 이러한 주소들을 지정하는 다양한 방식있다. 즉, 명령어에서 연산에 사용할 데이터의 위치(주소)를 찾는 것이다. 여기서는 가장 기본적인 주소 지정 방식을 알아본다.

주소 지정 방식의 가장 기본적인 5가지 방식

  1. 즉시 주소 지정 방식 : 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시한다. 메모리나 레지스터에서 데이터를 찾는게 아니기 때문에 빠르지만 데이터의 크기가 작아진다.
  2. 직접 주소 지정 방식 : 오퍼랜드 필드에 연산에 사용할 데이터의 메모리 주소 값을 지정하는 방식이다. 사용할 데이터의 크기는 메모리 의 주소당 크기만큼 커지겠지만, 유효 주소를 표현할 수 있는 범위가 연산 코드의 크기 만큼 줄어드는 것은 똑같다.
  3. 간접 주소 지정 방식 : 유효 주소의 주소를 오퍼랜드 필드에 명시한다. 당연히 직접 주소 지정 방식보다 표현할 수 있는 크기가 커진다. 다만, 메모리에 2번 접근하기 때문에 위의 방식보다 상대적으로 느리다.
  4. 레지스터 주소 지정 방식 : 참고로 레지스터는 CPU 내부에 있기 때문에 연산을 담당하는 ALU나 제어 장치와 같이 붙어 있어 메모리로 접근하는 것 보다 더 빠르다. 이 방식은 직접 방식과 비슷하게 연산에 사용할 데이터를 저장하고 있는 레지스터의 주소를 오퍼랜드 필드로 가져온다.
  5. 레지스터 간접 주소 지정 방식 : 연산에 사용할 데이터를 메모리에 저장하고 그 해당 메모리의 주소를 가지고 있는 레지스터를 오퍼랜드 필드에 명시한다. 따라서, 간접 주소 지정 방식처럼 메모리에 2 번 접근하는게 아니기 때문에 간접 보다 더 빠르다.

'CS > 혼자 공부하는 컴퓨터구조와 운영체제' 카테고리의 다른 글

05 - CPU의 성능 향상 기법  (0) 2024.06.01
04 - CPU의 작동 원리  (1) 2024.05.30
03 - 1 명령어  (0) 2024.02.14
02 - 데이터  (0) 2024.02.08
01 - 컴퓨터 구조 시작하기  (0) 2024.02.08