본문 바로가기

Computer Science/컴퓨터구조

[컴퓨터 구조] 명령어 형식

이 글은 www.youtube.com/watch?v=C853I1DGvbU&list=PLc8fQ-m7b1hD4jqccMlfQpWgDVdalXFbH&index=36 보고 공부한 글입니다.

 

 

명령어 형식

 

단일 누산기 구조

ADD2가지 항을 필요로 하는데 X가 있다면 또 하나는 무엇이냐? 바로 AC(accumulater)에 있는 값을 사용한다.
AC를 사용하는 것을 단일 누산기 구조라고 한다.

 

 

 

범용 레지스터 구조

피연산자가3, 2개인 형태이다.

 

 

스택 구조

pushpop연산 한다.

 

 

EX) X = (A+B) * (C+D) 연산이 있다고 보자. 이것을 3주소 명령어로 바꿔보면

A+BR1C+DR2에 넣어서  R1, R2를 곱한다.

 

1주소 명령어로 바꿔보면
A
AC에 넣는다. B를 더한다. 결과를 메모리에 저장
C
AC에 넣는다. D를 더한다. 결과를 메모리와 곱해서 메모리에 저장

 

무주소 명령어 스택을 사용

 

RISC모든 데이터를 레지스터에 넣고 레지스터끼리 로만 계산하는 것
load, store
할 때만 메모리에 접근하고 그 외는 접근하지 않는다.

 

 

어드레싱 모드

직접주소모드, 간접주소모드

 

다양한 어드레싱 모드의 사용 이유

Pointer, counter indexing 기능 제공
프로그램 재배치 편의 제공 -> 프로그래밍 융통성 제공
명령어 주소 필드 최소화

 

 

명령어 형식 with mode field

크게 4가지 모드가 있다.

 

 

implied 모드

피연산자가 정해져 있다.
피연산자가 묵시적으로 정의
AC,
또는 스택에 피연산자 위치

 

 

immediate 모드

피연산자가 명령어 자체에 있음
주소가 있는 것이 아니라 연산자 값이 있다.
상수를 레지스터에 초기값으로 주는 경우 사용

 

 

레지스터 (직접)모드

cpu레지스터에 피연산자 존재

 

 

레지스터 간접모드

명령어가 피연산자의 주소를 가지고 있는 레지스터를 지정
직접 주소보다 적은 어드레스 비용 사용

 

 

자동증가/자동감소 모드

메모리 접근 후, 레지스터 값이 자동으로 증가/감소

 

 

 

 

간접 주소 모드는 3가지로 분류 할 수 있다.

OS에서 많이 사용하는 방식

 

인덱스 어드레싱 모드에서 배열번호는 실제로 ADDR에 들어가 있다.
배열의 첫번째 시작주소는 XR(인덱스 레지스터)에 들어 있다.

ex) 3번째 인덱스를 알고 싶으면 XR = 3E0  + ADDR = 3E2 가 된다.

 

하나의 프로그램이 돌아갈 때 프로세스 메모리는 코드 세그먼트, 데이터세그먼트, 스택세그먼트가 필요하다.
code segment
의 주소를 BR이 가지고 있다.
모든 프로그램은 0번지부터 시작하고도 되어있다.

 

ex) 10번지에 값을 알고 싶다면 ADDR = 10을 넣는다.

 

 

 

어드레싱 모드의 실제 예

200번지에 Mode에 따라 실제 유효주소가 달라진다.

 

직접주소 – 800이 될것이다.

 

즉시모드 – 500이 들어있는 주소가 곧 유효주소이다. = 201번지가 유효주소이다.

 

간접주소 - 500번지에 갔더니 800번지가 진짜주소라고 한다. 800번지에 있는 값은 300, 300AC에 들어간다.

 

상대주소 – 500 + 프로그램 카운터에 있는 값 을 더하는 것

200번지 명령을 수행하고 있으니 PC200일 것이다. T3가 실행되고 있는 중이다. T1에서 PC = PC + 1했으니 201이 됐을 것이다. 하지만 하나의 명령이 2개의 주소를 쓰고 있으니 202가 됐을 것이다.
, 500 + 202= 702

 

인덱스주소 – XR =100 + ADDR = 500 => 600이 된다.

 

레지스터 주소 레지스터는 주소가 없다. 레지스터의 값이 곧 주소가 된다.

 

레지스터 간접주소 레지스터에 값이 간접주소가 된다.

 

자동 증가 주소 – R1이 자동증가 된다.

 

자동 감소 주소 일단 먼저 하나 줄인다. 거기서 가져온다.

 

728x90