# 6. 컴퓨터 구조 6일차(230919)

brand_mins·2023년 9월 19일

Computer Architecture

목록 보기
6/7

1. 명령어의 구조

(1) 연산 코드와 오퍼랜드

  • 명령어는 연산코드와 오퍼랜드로 구성.
  • 연산코드는 명령어를 수행할 연산.
  • 연산에 사용할 데이터를 오퍼랜드.
더해라(빨강) = 오퍼랜드(5+3)
  • 연산코드가 담긴 영역을 연산코드 필드
  • 오퍼랜드가 담긴 영역을 오퍼랜드 필드
연산코드	오퍼랜드
push	rbp
mov		rbp, rsp
mov		DWORD PTR [rbp-4], 1
mov 	DWORD PTR [rbp-4], 2
mov 	edx, DWORD PTR[rbp-4]
mov 	eax, DWORD PTR[rbp-8]
add 	eax, edx
mov		DWORD PTR [rbp-12], eax
mov 	eax, 0
pop		rbp
ret

1) 오퍼랜드

  • 오퍼랜드 필드에는 숫자와 문자 등을 나타내는 데이터 또는 메모리나 레지스터 주소가 올 수 있다.
  • 하지만 오퍼랜드 필드는 메모리 주소나 레지스터 이름이 담긴다.
  • 그래서, 오퍼랜드 필드를 주소필드라고 부름.
  • 오퍼랜드는 없을 수 있고 하나만 있거나 두 세개 이상 있을수도 있다.
+ 보충 필기 +
오퍼랜드가 하나도 없는 명령어 : 0-주소 명령어
연산코드

오퍼랜드가 하나인 명령어: 1-주소 명령어
연산코드 오퍼랜드

오퍼랜드가 두개인 명령어: 2-주소 명령어
연산코드 오퍼랜드 오퍼랜드

오퍼랜드가 세개인 명령어: 3-주소 명령어
연산코드 오퍼랜드 오퍼랜드 오퍼랜드

2) 연산코드

  • 명령어를 수행할 연산을 의미함.
  • 기본적인 연산코드 유형은 다음과 같다
    • 데이터 전송
    • 산술/논리 연산
    • 제어/흐름 변경
    • 입출력 제어
  • CPU마다 종류의 생김새는 다르지만 공통적으로 이해하는 대표적인 연산코드 종류정도로 이해하기
+ 보충 메모 +
데이터 전송
MOVE: 데이터를 옮겨라
STORE: 메모리에 저장하라
LOAD(FETCH): 메모리에서 CPU로 데이터를 가져오라
PUSH: 스택에 데이터를 저장하라
POP: 스택의 최상단 데이터를 가져와라

산술/논리연산
ADD/SUBTRACT/MULTIPLY/DIVDIE: 덧셈/뺄셈/곱셈/나눗셈을 수행하라
INCREMENT/DECREMENT: 오퍼랜드에 1을 더하라/ 1을 빼라
AND/OR/NOT: AND, OR, NOT 연산을 수행하라
COMPARE: 두개의 숫자 또는 true / false값을 연산하라

제어 흐름 변경
JUMP: 특정 주소를 실행 순서로 옮겨라
CONDITIONAL JUMP: 조건에 부합할 때 특정 주소로 실행 순서를 옮겨라
HALT: 프로그램 실행을 멈춰라
CALL: 되돌아올 주소를 저장한 채 특정 주소로 실행 순서를 옮겨라
RETURN: CALL을 호출할때 저장했던 주소로 돌아가라

입출력 제어
READ: 특정 입출력 장치로부터 데이터를 읽어라
WRITE: 특정 입출력 장치로부터 데이터를 써라
START IO: 입출력 장치를 시작하라
TEST IO: 입출력 장치의 상태를 확인하라

(2) 주소지정방식

Q. 오퍼랜드 필드에 왜 메모리나 레지스터 주소를 담는건가요?
A. 연산코드 필드가 m비트라고 가정. 오퍼랜드 필드에 가장 많은 공간을 할당할 수 있는 1-주소 명령어라 할지라도 연산코드만큼의 길이를 뺀 n-m비트
즉, 오퍼랜드가 많으면 많을수록 필드의 크기는 작아진다.

  • 연산 대상이 되는 데이터가 저장된 위치를 유효 주소.
  • 오퍼랜드 필드에 데이터가 저장된 위치를 명시할때 연산에 사용할 데이터 위치를 찾는 방법: 주소 지정방식

1) 즉시 주소 지정 방식

  • 연산에 사용할 데이터를 오퍼랜드 필드에 직접 명시
  • 데이터의 크기가 작아지지만 연산에 사용할 데이터를 메모리나 레지스터로부터 찾는 과정이 없다.

2) 직접 주소 지정 방식

  • 오퍼랜드 필드에 유효 주소를 직접적으로 명시하는 방식
  • 데이터 크기는 즉시 주소 지정방식보다 커졌지만 유효 주소를 표현할 수 있는 범위는 비트만큼 줄어듬.

3) 간접 주소 지정 방식

  • 유효 주소의 주소를 오퍼랜드 필드에 명시하는 방식
  • 표현할 수 있는 유효 주소의 범위는 넓어짐.
  • 하지만, 메모리 접근 필요

4) 레지스터 주소 지정 방식

  • 연산에 사용할 데이터를 저장한 레지스터를 오퍼랜드 필드에 직접 명시
  • 빠르게 데이터 접근 가능
  • 하지만, 표현할 수 있는 레지스터 크기 제한이 생김

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

  • 연산에 사용할 데이터를 메모리에 저장하고 유효 주소를 저장하는 레지스터를 오퍼랜드 필드에 명시
  • 메모리에 접근하는 횟수가 한번으로 줄어든다.
  • 메모리에 접근하는 것이 간접주소방식보다 레지스터 간접 주소지정방식이 더 빠르다.

(3) 스택과 큐

1) 스택

  • 스택은 한쪽 끝이 막혀 있는 통과 같은 공간.
  • 즉, 데이터를 차곡차곡 저장하고 저장한 자료를 빼낼때 마지막으로 저장한 데이터부터(후입선출) 빼낸다.
  • 우리는 이것을 LIFO라고 하고 자료구조라고 부른다.
    예: 1-2-3-4-5 : 넣는 순서 / 5-4-3-2-1: 빼는 순서
  • 이때 스택에 새로운 데이터를 저장하는 명렁어가 PUSH
  • 저장할 데이터를 꺼내는 것은 POP

2) 큐

  • 양쪽이 뚫려 있는 통과 같은 저장 공간
  • 즉, 한쪽으로 데이터를 저장하고 다른 한쪽은 먼저 저장된 순서대로 데이터를 빼낸다.(선입선출).
  • 우리는 이것을 FIFO.
profile
IT 개발자가 되기 위한 기록

0개의 댓글