Machineboy空

명령어의 구조(연산코드, 오퍼랜드)와 주소 지정 방식 본문

Computer/CS

명령어의 구조(연산코드, 오퍼랜드)와 주소 지정 방식

안녕도라 2024. 1. 3. 15:32

저급 언어(명령어)는 어떻게 생겼고 어떻게 동작할까?

사람들의 일반적 명령어 컴퓨터의 명령어
컴퓨터의 명령어 구조

명령어의 구조

연산코드(operation code) + 오퍼랜드(operand)

 

연산 코드 (operation code) 오퍼랜드(operand)
수행할 연산 수행할 대상
*연산 코드의 종류와 생김새는 CPU마다 다르지만 공통적인 4가지
연산에 사용될 데이터 혹은
연산에 사용될 데이터가 저장된 위치 ( = 주소 필드 )

*훨씬 더 자주 담기는 것은 주소 필드
공통적 연산 코드 종류
 

*오퍼랜드는  없을 수도 여러 개일 수도 있다.

* call: 함수를 호출하는 명령어

 

* stack: 한 쪽 끝이 막혀있는 저장 공간,  자료 구조
* queue: 양 쪽 끝이 열려있는 저장 공간, 자료 구조



주소 필드
왜 데이터 값이 아닌 저장된 위치를 사용하는 걸까?




명령어 내에서 저장할 수 있는 데이터의 크기가 제한되기 때문

(오퍼랜드가 2개라면 하나의 오퍼랜드는 6 bit, 표현할 수 있는 정보의 종류는 64, 오퍼랜드가 4개라면 종류는 16)

하지만 저장된 주소를 적어준다면?
(= 메모리 주소, 혹은 레지스터를 명시한다면?)

표현할 수 있는 정보의 크기를 제한받지 않을 수 있다!

*유효 주소(effective address)

연산에  사용할  데이터가  저장된 위치
예시) 위 그림에서 10번지
*명령어 주소 지정 방식 (addressing modes)
CPU입장에서 주소를 찾아내서 데이터를 가져올 수 있어야 함.

연산에 사용할 데이터가 저장된  위치를 찾는 방법
즉, 유효 주소를 찾는 방법

명령어 주소 지정 방식의 종류

 

  • 즉시 주소 지정 방식 (immediate addressing mode)
    • 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
    • 가장 간단한  형태의 주소 지정 방식
    • 연산에  사용할 데이터의 크기가 작아지고, 제한될 수 있지만 빠르다
  • 직접 주소 지정 방식 (direct addressing mode)
    • 오퍼랜드 필드에 유효 주소 직접적으로 명시
    • 유효 주소를 표현할 수 있는 크기가 연산 코드만큼 줄어듦
  • 간접 주소 지정 방식 (indirect addressing mode)
    • 오퍼랜드 필드에 유효 주소의 주소를 명시
    • 앞선 주소 지정 방식들에 비해 속도가 느림 
    • *CPU가 메모리를 뒤적이는 속도는 굉장히 느리다. 메모리 접근을 최소화하는 것이 무조건 속도면에서는 좋다
  • 레지스터 주소 지정 방식 (register addressing mode)
    • *앞선 방식들은 메모리에 명시하는 방식. 이건 레지스터에 지정하는 방식
    • 연산에 사용할 데이터가 저장된 레지스터 명시
    • 메모리에 접근하는 속도보다 레지스터에 접근하는 것이 빠르다
  • 레지스터 간접 주소 지정 방식 (register indirect addressing mode)
    • 연산에 사용할 데이터를 메모리에 저장
    • 그 주소를 저장한 레지스터를 오퍼랜드 필드에 명시
메모리 지정
즉시 주소 지정 방식 직접 주소 지정 방식 간접 주소 지정 방식

 

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