본문 바로가기
CS/컴퓨터 구조

컴퓨터 구조 - 명령어 [혼공컴구]

by 블로블로글 2023. 11. 17.

1. 명령어의 구조

  1-1. 연산 코드 (연산자)

    - 연산 코드 필드에 존재

    - 명령어가 수행할 연산

    - 크게 데이터 전송, 산술/논리 연산, 제어 흐름 변경, 입출력 제어 유형의 4가지로 나뉨

  1-2. 오퍼랜드 (피연산자)

    - 오퍼랜드 필드에 존재

    - 연산에 사용할 데이터 또는 연산에 사용할 데이터가 저장된 위치

    - 보통 연산에 사용할 메모리의 주소나 레지스터 이름이 담김

      - 명령어의 길이를 줄이기 위해 주소나 레지스터를 저장함

      - 따라서 주소 필드라고도 불림

    - 명령어 안에 하나도 없을 수도 있고, 한개 이상이 담길 수도 있음

      - 오퍼랜드의 수에 따라 0-주소 명령어, 1-주소 명령어 등으로 명명함.

 

 

 

 

 

 

 

 

 

mov ax, [operand1]
add ax, [operand2]
mov [result], ax
mov dx, result
pop rgb
ret

    - mov, add, pop, ret은 opcode

    - ax dx등은 operand

 

  1-3. 주소 지정 방식

    - 유효 주소

      - 연산 코드에 사용할 데이터가 저장된 위치

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

      - 즉, 유효 주소를 찾는 방법

    1-3-1. 즉시 주소 지정 방식

      - 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시하는 방식

      - 사용할 데이터를 레지스터나 메모리에서 찾을 필요가 없어 빠름

      - 표현할 수 있는 오퍼랜드 필드의 길이가 연산 코드의 길이 만큼 짧아져 표현할 수 있는 데이터의 크기가 작아짐

    1-3-2. 직접 주소 지정 방식

      - 유효 주소를 직접적으로 명시하는 방식

      - 즉지 주소 지정 방식보다 표현할 수 있는 데이터의 크기가 커짐

      - 여전히 표현할 수 있는 유효 주소에 제한이 있음

    1-3-3. 간접 주소 지정 방식

      - 유효 주소의 주소를 오퍼랜드 필드에 명시

      - 두 번의 메모리 접근을 가지기 앞의 방식들보다 때문에 느림

    1-3-4. 레지스터 지정 방식

      - 직접 주소 지정 방식과 비슷함 대신 레지스터를 오퍼랜드 필드에 직접 명시

      - CPU 내부 저장소인 레지스터를 사용해서 속도가 빠름

      - 표현할 수 있는 레지스터 크기에 제한이 생김

    1-3-5. 레지스터 간접 주소 지정 방식

      - 데이터를 메모리에 저장하고, 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시하는 방법

      - 레지스터에 접근하는 방식이기 때문에 간접 주소 지정 방식보다 빠름

    1-3-6. 스택 주소 지정 방식

      - 스택과 스택 포인터를 이용한 주소 지정 방식

      - 스택 포인터를 통해 데이터가 스택의 어디까지 채워져 있는지 확인

      - 스택 영역은 메모리 안의 주소 공간에 암묵적으로 합의된 곳에 존재.

    1-3-6. 변위 주소 지정 방식

      - 오퍼랜드 필드의 값 (변위)과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 방식

      1. 상대 주소 지정 방식

        - 오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻음

        - 실행하려는 명령어로 부터 프로그램 카운터의 값 만큼 떨어진 곳의 명령어를 실행

      2. 베이스 레지스터 주소 지정 방식

        - 오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소 얻음

        - 베이스 레지스터 : 기준 주소

        - 오퍼랜드 : 기준 주소로부터 떨어진 거리