[컴퓨터구조]명령어와 번지지정 방식 / 프로세서와 연산장치 정리

류명운

·

2015. 10. 10. 15:08

반응형

6장 명령어 번지지정

 

* Processor: CPU, 입출력 프로세서

 

명령어의 구성

 : 명령코드(operation code)와 번지부(address 또는 operand)로 구성

 1) 명령코드: 어떤 연산이나 데이터의 변동 등의 행위를 지시

 2) 번지부: 그 행위의 대상인 데이터를 지적하는 번지부

 : 명령어는 제어장치로 이동되어 동작 신호 또는 데이터 지적 신호로 변경

 : mode직접 번지 및 간접 번지를 나타내며 1비트를 가짐

 : 모든 명령어는 실행할 때 주기억장치에서 수행됨(RAM)

 일반적인 명령어 형식(instruction format)

 -> 명령코드(Op code)/모드(mode)/번지부(operand)

 

명령어 코드(Op code)

 : 입출력이나 연산과 같은 특정 동작을 지시하게 정해 놓은 신호

 : 컴퓨터에게 특정한 동작을 수행할 수 있게 하는 비트들의 집합

 : 연산자로고도 하며 프로그램 내장 방식의 컴퓨터를 기준으로 4가지 기능으로 분류가능

명령어 코드 기능 

  1) 입출력 기능

  2) 제어 기능 

  3) 함수 연산 기능

  4) 전달 기능 


ex) 명령어 코드의 한 명령이 한 메모리 워드(2byte)에 저장된다면 컴퓨터에서 사용되는 동작 코드의 최대 수

 

 * 명령코드는 6bit이므로 2^6에 의해 64개의 명령 코드를 가질 수 있음

 * 프로세서 레지스터는 2bit이므로 프로세서 2^2에 의해 4개의 레지스터를 사용할 수 있음

 * 번지부는 16bit이므로 MAR, PC는 16비트 MBR, AC는 24비트를 가짐


명령어 형식(특징 및 장단점)

 

 특징

 장단점

 0번지

 스택을 사용하는 컴퓨터에서 사용(PUSH,POP)

 레지스터에 있는 데이터를 직접 사용하기 떄문에 처리속도가 빠름

 1번지

 이항연산 수행가능/ 누산기를 기준으로 연산

 

 2번지

 번지1 = 번지1 (연산) 번지2

 번지 명령어 형식에 비하여 명령어 자체의 길이는 짧지만 기계어로 표현하면 명령어의 수는 증가

 3번지

 붠지1 = 번지2 (연산) 번지3

 세 개의 주소를 지정하기 위하여 상대적으로 명령어가 길어져야 하기 때문에 이전에는 잘 사용되지 않으나 최근 개발되고 있는 RISC 프로세서에서 사용

 하나의 명령어에 세 개의 오퍼랜드 필드를 모두 포함시켜 명령어의 길이가 길어짐

 고급 언어로 작성된 프로그램을 기계어로 변환시키면 가장 짧음


0번지 명령

 : 명령 코드만 존재하고 번지부가 없는 형식을 의미함

 : 일반적인 명령에서 처리될 데이터가 기억된 곳을 지적하여야 그곳에 기억된 데이터를 꺼내어 연산할 수 있음

 : 스택(LIFO) 구조의 컴퓨터에서 사용(PUSH, POP)

 : 레지스터에 있는 직접 데이터를 사용하기 때문에 처리속도가 빠름


1번지 명령

 : 명령어의 번지부가 하나만 있는 명령어

 : 이항연산 수행가능, 누산기를 기준으로 연산을 수행(누산기:산술 및 논리 연산의 결과를 일시적으로 저장하는 레지스터)


2번지 명령

 : 명령어의 번지부가 2부분으로 구획되어 하나는 피연산 데이터, 하나는 연산 데이터각각 지적하도록 함

 : (결과-1) = (피연산-1) 연산 (연산-2)

형식 

 

 연산되는 형식

 

 

3번지 명령

 : 명령어의 번지부가 3부분으로 구획되어 번지-1은 피연산 데이터, 번지-2는 연산데이터, 번지-3은 결과를 기억시킴

 : 프로그래머가 고급언어로 작성시 코드의 길이가 가장 짧음

 : 하나의 명령어에 세 개의 오퍼랜드 필드를 모두 포함시켜 명령어의 길이가 길어졌지만 기계어로 변환시키면 전체 명령어들의 수는 작아진다

 : (결과-3) = (피연선-1) 연산 (연산-2)

형식 

 

 연산되는 형식

 

 

 (Quiz1) 산술식 Z=A*(B+C)를 수행하도록 하는 각 명령 형식별 프로그램

 1번지 명령

 LOAD B   // AC<-B

 ADD C    // AC<-AC+C

 MUL A    // AC<-AC*A

 STOR Z   // Z<-AC

 2번지 명령

 MOV R1, B  // R1<-B

 ADD R1, C   // R1<-R1+C

 MUL R1, A   // R1<-R1*A

 MOV Z, R1  // Z <- R1

 3번지 명령

 ADD R1, B, C  //R1<-B+C

 MUL Z, A, R1   //Z <-A*R1 


 AC : 가산기

 LOAD : 데이터 로드

 STOR : 데이터 저장

 MOV  : 데이터 이동

 ADD : 더하기

 SUB : 빼기

 DIV  : 나눗셈

 MUL : 곱하기


 

기계어

 : 컴퓨터가 직접 그 의미를 해독하여 실행할 수 있는 명령어

 : 주기억장치 내부에 기억되어서 한 명령씩 제어장치로 꺼내어지면 곧 그 명령이 해독 회로를 통하여 지시 신호로 바뀌게 되는 명령

 : 번역할 필요가 없이 곧바로 실행될 수 있지만 프로그램을 작성하기 어려운 단점이 있음


컴파일러와 인터프리터

 : 고급언어로 쓰인 프로그램을 기계어로 바꿔주는 번역 프로그램


번지

 : 주기억장치에서 앞에서부터 뒤쪽으로 바이트나 워드 단위의 16진수로 일련번호를 부여한 고유번호로 상호 구별하기 위해 사용하는 것


번지 지정방식

 : 처리할 데이터가 주기억장치의 특정 번지에 기억되어 있을 때, 번지를 지적하기 위해 번지부에 표현하는 형식

 : 실제의 오퍼랜드를 정하기 위해 실제 명령어 속에 있는 번지 필드의 값을 수정하거나 다른 것으로 대체하는 것을 규정

 : 포인터, 카운터인덱싱, 프로그램재배치 등의 편의를 제공하여 프로그래밍을 하는데 융통성을 줌

 : 명령어 번지 필드의 비트를 줄임


직접번지(Direct address) 형식 

 : 지적하려는 위치를 번지부에서 직접 표현한 형식(가장간단)


간접번지(Indirect address) 형식 = '@'

 : 현재 번지부에 표현된 값이 실제 데이터가 기억된 번지가 아니고, 그곳에 기억된 내용이 실제의 데이터 번지가 되도록 함

 : 명령어의 적은 비트 수로 제한된 영역까지만 지적할 수 있지만 명령어 길이가 짧아도 큰 용량의 기억장치에서 뒤쪽의 번지로 지적


상대번지(Relative address) 형식

 : 번지부에 표현된 값을 특정 값과 계산하여 상대적인 위치로 데이터를 지적하는 방법

 : ex) 번지부 + n = 실제 데이터가 있는 번지부


자동증가 혹은 자동 감소모드

 : 레지스터 값이 메모리를 액세스하고 난 직후 자동적으로 하나 증가하거나 감소한다는 사실을 제외하면 레지스터 간접 모드와 동일함


모드의 종류: Implied, 레지스터

 1) Implied 모드(암시적 모드) -0, 1번지

   : 오퍼랜드가 묵시적으로 명령의 정의에 따라 정해짐

   : 스택 구조의 컴퓨터에서 무번지 명령, 누산기를 사용하는 모든 명령

   *NOP: 오퍼랜드가 필요 없는 명령어

   *INC: 묵시적 오퍼랜드인(AC)의 연산 명령어

   *ADD: 스택 구조의 명령어(스택에 오퍼랜드가 저장)

 2) 직접값 모드(#)

   : 오퍼랜드 자체가 명령어에 직접 포함된 모드

   : ex) MOV R1, #100 : 두 번째 오퍼랜드는 십진수 100 

 3) 레지스터 모드

   : 오퍼랜드로서 CPU 내의 레지스터를 지정하는 방법으로 명령의 레지스터 필드에서 특정 레지스터를 선택함

   : 실제 데이터는 오퍼랜드가 지적하는 레지스터가 가지고 있는 경우

   : ex) MOV R1, R2 : 두 번째 오퍼랜드의 유효주소는 R2

 4) 메모리 직접 주소 모드

   : 오퍼랜드가 저장된 메모리 주소를 나타내는 모드

   : ex) MOV R1, 100 : 두 번째 오퍼랜드는 유효주소는 메모리100번지에 저장되어 있는 값

 5) 메모리 간접 주소 모드(@)

   : 메모리를 이용하여 간접적으로 주소 지정하는 모드

   : ex) MOV R1, @100 : 두 번째 오퍼랜드의 유효주소가 메모리100번지에 저장

 5) 레지스터 간접모드와 변형모드

   가 - 자동 증가/자동 감소 모드

       ex) MOV R1, (R2)++ : 두 번째 오퍼랜드의 유효주소는 R2에 저장된 값이고, 오퍼랜드 페치 후에 R2의 값을 1증가

   나 - 레지스터 간접 모드

       ex) MOV R1, @R2 : 두 번째 오퍼랜드의 유효주소는 R2에 저장 된 값

   다 - 변위 주소 지정 모드(상대번지라생각)

       ex) ADD R4, 100@R1 : 두 번째 오퍼랜드의 유효주소는 (R1)+100

   라 - 상대 주소 모드

       ex) MOV R1, $20 : 두 번째 오퍼랜드의 유효주소는 PC+20


CPU가 명령어를 처리하기 위한 프로그램? 2가지 CISC, RISC

 

명령어를 전송하는 방법: 데이터 전송(move), 처리(add), 프로그램 제어(jump)  명령어가 있음

 


 

7장 프로세서와 연산장치

 

클록속도

 : 데이터를 처리할 수 있는 속도 (MHz: 백만분의 1초)

 

마이크로프로세서의 구조

 1) 마이크로프로세서 모듈

 2) 기억장치 모듈

 3) 입출력 모듈

 

마이크로프로세서 모듈의 기능(인해인처기)

 1) 명령어 인출

 2) 명령어 해석

 3) 데이터 인출

 4) 데이터 처리

 5) 데이터 기록

 

메모리와 CPU 차이

 : CPU는 명령어나 데이터를 레지스터에 임시 저장

 : CPU는 내부 버스로 데이터를 컨트롤 함

 

프로세서의 주요 4가지 기능

 : 기억, 연산, 전달, 제어

 

프로세서의 주요 구성요서

 1) 버스(데이터 버스, 번지 버스, 제어 버스)

 2) 레지스터

 3) 제어회로

 4) 디코더

 5) 버퍼

 

레지스터 전송

 1)직렬전송 : 한 번에 1비트씩 이웃한 플립플롭 회로로 이동

   *시프트 레지스터: 데이터를 직렬로 전송하는 레지스터

   *워드 시간: 시프트 레시트터의 데이터를 모두 전송하는 데 소요되는 시간

 2)병렬전송: 레지스터에 기억된 내용을 다른 레지스터에 동시에 전송하는 것

   *하나의 제어 신호에 의해 레지스터 전체의 내용이 이동됨

 3)버스전송방식: 버스 내의 선의 개수는 레지스터를 구성하는 플립플롭의 개수와 일치함

 

연산 장치의 구성

 1)가산기 : 덧셈을 하기 위한

 2)누산기 : 연산 결과를 임시로 보관할

 3)기억레지스터 : 데이터 보관할

 4)보수기 : 보수를 만들기 위한

 5)상태레지스터 : 계산 결과의 상태를 점검하는

 

단항연산: 피연산자의 개수가 1개인 경우(NOT, MOVE, 시프트 등)

이항연산: 피연산자의 개수가 2개인 경우(AND, OR, XOR 등)

 

시프트의 종류 3가지

 1) 산술 시프트: 부호 불변, 1의보수(추가비트1), 2의보수(왼쪽시프트0추가비트/오른쪽시프트1추가비트)

 2) 논리 시프트: 왼쪽 혹은 오른쪽으로 모든 비트들을 같이 이동

 3) 로테이트: 바깥으로 밀려나는 비트가 그 반대편에 채워짐

 

더하기에서 오버플로우 발생하는 경우(두 개의 양수를 덧셈했을 경우 가장 발생하기 쉬움)

음수,빼기 : 보수 사용

곱셈: 부수(Booth)알고리즘(왼쪽시프트)

나누기: 오른쪽시프트

 

부동 소수점 연산

 - 곱셈 : 가수을 곱하고 지수를 더함

 - 나눗셈 : 지수의 뺄셈과 가수의 나눗셈을 한다

 

 

반응형