CS (Computer Science)

[개발 공부 116일차] 컴퓨터 구조 | 명령어 구조와 주소 지정

MOLLY_ 2024. 10. 11. 23:58
728x90

< 목차 >

0. TL;DR

1. 명령어

2. 연산코드

3. 주소 지정

 

 

0. TL;DR

  1. 명령어: 무엇을 대상(오퍼랜드)으로 무엇을 수행(연산코드)하는 것
  2. 주소 지정: 유효 주소*를 찾는 방법
    1. 즉시 주소 지정
    2. 직접 주소 지정
    3. 간접 주소 지정
    4. 레지스터 주소 지정
    5. 레지스터 간접 주소 지정

 

 

1. 명령어

: 무엇을 대상(오퍼랜드)으로 무엇을 수행(연산코드)하는 것

이처럼 명령어는 명령의 대상과 동작으로 이루어진다.

 

명령어는 컴퓨터를 동작시키는 실질적인 정보다.

 

  • 오퍼랜드(operand): 명령어를 수행할 대상
    • 대상(데이터)이 직접 명시되기도 하고, 대상의 위치*가 명시되기도 함
  • 연산코드(op-code): 오퍼랜드로 수행할 동작

 

👾 [중요] 대상의 위치

: 레지스터(CPU에 있는 작은 임시 저장 장치)의 이름, 메모리 주소

 

 

실제 컴퓨터로 동작시키는 명령어의 형태를 표로 간략하게 한 번 봐보자.

더해라 100과 100을
빼라 메모리 32번지 안의 값과 (위치) 메모리 33번지 속의 값을
저장해라 무엇을 메모리 128번지에
출력해라 무엇을 모니터에

맨 왼쪽 ‘~해라’가 연산코드에 해당하고, 나머지가 오퍼랜드에 해당한다.

 

오퍼랜드의 개수는 유동적일 수 있음

 

 

위 사진 2개는 명령어를 계산하는 단계다. 참고 정도만 해도 된다.

 

 

2. 연산코드

 

위 명령어들이 어셈블리어로 작성될 땐, 보통 약어로 작성되는 듯하다.

 

어셈블리어 명령어와 비교하면 다음과 같다.

 

[출처] 어셈블리어(Assembly) 기초 (https://aistories.tistory.com/12)

 

[출처] [Dreamhack - System Hacking] STAGE 4 : Exploit Tech: Shellcode (https://velog.io/@l009y/Dreamhack-System-Hacking-STAGE-4-Exploit-Tech-Shellcode)

 

 

3. 주소 지정

: 유효 주소*를 찾는 방법

CPU마다 차이가 있을 수 있다.

 

👾 유효 주소

: 연산의 대상(연산코드)이 되는 데이터가 저장된 위치

 

 

주소 지정하는 여러 방법에 대해 알아보기 전에 한 가지 의문점이 생길 수 있다.

 

 

왜 데이터를 ‘직접 명시하지 않고 위치를 명시’하는 걸까?

명령어의 길이가 한정되어 있기 때문이다.

 

위와 같이 짧은 길이에는 직접 데이터를 명시하는 것보다 위치(주소)를 명시하는 게 더 효율적이다.

 

그림으로 보면 이 사진과 같다

 

 

(1) 즉시 주소 지정

: 오퍼랜드 필드에 연산에 사용할 데이터를 직접 명시

 

  • 가장 빠른 주소 지정 방법
  • 데이터 크기에 제한될 수 있음

 

즉시 주소 지정법이 이론적으로는 가장 빠르다고 알려져 있으나 주소 지정법이라고 하기도 뭐한 방법이긴 하다.

현업에서 많이 사용되지 않는 방법이라고 한다.

 

 

(2) 직접 주소 지정

: 오퍼랜드 필드에 유효 주소(연산에 사용될 데이터가 저장된 메모리 주소) 명시

 

 

[중요] CPU가 메모리에 접근하는 속도는 훨씬 더 느리기 때문에

레지스터에 접근해서 처리할 수 있는 건 레지스터로 처리하는 게 빠른 성능을 보장할 수 있다고 한다.

 

오퍼랜드 필드로 표현 가능한 메모리 주소 크기에 제한된다.

그래서 등장한 게 간접 주소 지정법이다.

 

 

(3) 간접 주소 지정

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

유효 주소 크기에 제한은 없으나 속도가 비교적 느리다.

 

 

유효 주소의 주소는,

(1) 유효 주소 → (2) 데이터

이렇게 2번 접근해야 하기 때문에 속도가 느리다는 특징이 있다.

 

 

 

(4) 레지스터 주소 지정

: 오퍼랜드 필드에 연산에 사용할 데이터를 저장한 레지스터를 직접 명시

 

레지스터 접근은 메모리보다 빠르다!

 

 

(5) 레지스터 간접 주소 지정

: 연산에 사용할 데이터를 메모리에 저장한 뒤, 오퍼랜드 필드에 해당 메모리의 유효 주소를 저장한 레지스터를 명시

 

메모리 접근은 1번만 한다.

 

 

728x90