430 likes | 761 Views
CPU 와 Register. 2009081050 심혜진 2009081056 장미애. CPU 의 개요. CPU 란 ? 중앙처리장치 (c entral processing unit ) 컴퓨터의 가장 중요한 부분으로서 명령을 해독 하고 산술논리연산이나 데이터 처리를 실행 하는 장치 . 입출력 장치 , 외부 기억 장치와 더불어 컴퓨터 시스템을 구성한다. CPU. Control Unit (PC,IR). registers (MAR, MBR). Main Memory. Bus Interface Unit.
E N D
CPU와 Register 2009081050 심혜진 2009081056 장미애
CPU의 개요 • CPU란? • 중앙처리장치(central processing unit) • 컴퓨터의 가장 중요한 부분으로서 명령을해독하고 산술논리연산이나 데이터 처리를 실행하는 장치. • 입출력 장치, 외부 기억 장치와 더불어 컴퓨터 시스템을 구성한다.
CPU Control Unit (PC,IR) registers (MAR, MBR) Main Memory Bus Interface Unit ALU CPU의 구성요소 • 레지스터(registers) • 산술 논리 연산장치(ALU) • 제어장치(Control Unit) • 버스접속장치(Bus Interface Unit)
CPU의 구성요소 • 레지스터(Register) • 레지스터는 CPU 내의 데이터를 저장하고 CPU가 데이터 처리를 위한 기본적인 저장 공간 • 산술 논리 연산장치(Arithmetic and Logic Unit) • CPU내부에 계산을 위해 일시적으로 수치를 넣어두는 부분
CPU의 구성요소 • 제어장치(Control Unit) • CPU가 자신 및 주변기기들을 컨트롤할수 있는 장치 • 모든 컴퓨터 시스템을 제어하는데 사용되는 요소 • 메모리로부터 데이터 명령, 메모리 해석 및 실행 등을 수행 • 버스 접속 장치(Bus Interface Unit) • 메모리나 주변 장치와 데이터를 주고 받을 수 있게 해주는 역할을 담당
CPU의 내부구조 • 레지스터, 산술논리연산장치, 제어장치로 구성
명령어 집합 • 명령어집합 -의미: 기계어를 사람이 이해하기 쉽게 표현한 것을 명령어라 하고 이들의 집합을 명령어 집합이라 한다. • 명령어 주기(Instruction Cycle) • CPU의 명령어 실행에 요구되는 과정
명령어 집합 • 인출주기(Fetch Cycle) • 메인 메모리에서 명령어 집합을 읽어 명령 레지스터에 저장하기까지의 단계 • 실행주기(Execution Cycle) • 명령 레지스터의 명령어를 해석, 실제로 명령을 처리하는 단계
동작코드 피연산자(#1) 피연산자(#2) 명령어 형식 • 동작코드부분 : 명령어의 실행할 내용을 나타냄 • 주소부분 : 명령어 실행에 필요한 데이터의 저장 장소를 나타냄 =>동작코드는 CPU가 실제로 실행할 수 있는 연산들을 나 타내는 부분. *n비트 = 2ⁿ
명령어 동작 코드 동작코드 기 능 ADD 덧셈 SUB 뺄셈 곱셈 MUL DIV 나눗셈 기억장치로부터 레지스터로 데이터 적재 LD STO 기억장치에 데이터 저장
명령어 형식 • 0-주소 형식 • 데이터의 주소를 지정할 필요가 없고 연산자만 나타내면 된다. 스택 구조를 가진 컴퓨터에서 사용되는 명령 형식이다. • PUSH : 스택에 데이터를 하나씩 삽입하는 것. • POP : 스택의 top에 저장된 데이터를 삭제하는 것. =>수식 계산을 하기 위해서는 수식을 postfix형태로 바꾸어야 한다. Postfix : A B + ADD : (SP+1)←(SP)+(SP+1) (스택 주소 지정 생략)
ADD Y 동작코드 피연산자 명령어 형식 • 1- 주소 명령어 형식 • 누산기(Accumulator)에서 사용되는 명령어 구조. • 하나의 입력 데이터의 주소를 생략 할 수 있다. • 연산 결과도 항상 누산기에 기억하도록 하여 연산결과의 주소를 지정할 필요가 없다. ADD Y : X ← X + Y
X Y ADD 동작코드(OP) 피연산자(#1) 피연산자(#2) 명령어 형식 • 2-주소 명령어 형식 • 연산 후에 입력 데이터를 저장할 필요가 없고 연산 결과를 두개의 입력 데이터가 기억되어 있던 장소 중에 하나에 기억시킬 수 있다. • 장점 : 3주소 명령에 비해 명령어의 길이가 짧고, 계산 결과가 기억장치에 기억되고 중앙처리장치에도 남아 있어서 계산 결과를 시험할 필요가 있을 때 시간이 절약된다. • 단점 : 연산의 결과는 주로 Operand 1에 저장되므로 Operand 1에 있던 원래의 자료가 파괴된다. 전체 프로그램의 길이가 길어진다. ADD Y, X : Y ←X + Y(X,Y 2-주소지정)
X Y Z ADD 동작 코드(OP) 피연산자(#1) 피연산자(#2) 피연산자(#3) 명령어 형식 • 3-주소 명령어 형식 • 컴퓨터의 연산에 필요한 두 피연산자와 결과의 저장 장소가 모두 상이할 경우 별도의 3-주소를 모두 명령어에서 지정하는 형식. • 장점: 연산 결과를 따로 저장하는 곳이 있기 때문에 연산후에도 입력 자료가 변하지 않고 보존되며 프로그램 크기가 줄어든다. • 단점: 최소한 4번 이상 메모리에 접근을 해야 하며 기억장치의 대역폭(Bandwidth)이 감소되며 명령어 처리 속도가 느리고 프로그램 작성이 불편하다.
명령어 종류 • 데이터 전송 명령어: 내용의 변경 없이 한 장소에서 다른 장소로 데이터를 옮기기만 하는 명령. 기억 및 입출력 기능을 갖고 있다. Load, Store, Move명령, Exchange, Input, Output, Push, Pop의 명령이 있다. • 데이터 처리 명령어: 모든 컴퓨터 동작의 주체로 연산 기능을 가지며 4칙 연산 및 증감, 산술 명령과 논리연산 및 비트처리 명령, 시프트 명령이 있다. • 프로그램 제어 명령어: 프로그램 카운터의 값을 변경할 수 있는 제어 기능을 가진다. Skip명령, 서브루틴명령, 비교명령, 테스트 명령이 있다.
명령어 주소 지정 방식 • 명령어 주소 지정 방식은 피연산자가 저장된 장소의 주소를 지정하는 방법에 따라 여러 경우로 나뉜다. • 명령어 주소 지정방식을 사용하는 이유 • 포인터, 카운터 인덱싱, 프로그램 재배치 등의 편리함을 사용자에게 제공함으로써 프로그래밍을 하는데 도움을 준다 • 명령어의 주소 부분의 비트를 줄일 수 있다. • 다양한 주소 지정 기법을 사용하여 숙련된 프로그래머는 명령어의 개수나 수행 시간을 절약하여 효율적인 프로그램 작성이 가능하다.
즉시주소 지정 방식 • 주소 지정 방식 중에서 가장 간단한 형태의 하나로 오퍼랜드는 실질적으로 명령어 내에 포함하고 있다. 상수로 취급하면서 변수의 초기 값을 설정하는 경우에 이용할 수 있다. • 장점 : 오퍼랜드를 위해 추가로 기억장치를 접근할 필요가 없어 기억 사이클 하나를 줄일 수 있다. • 단점 : 주소 필드 내에 피연산자를 두기 때문에 워드 길이에 비해 그 크기가 작아서 데이터를 표현할 길이가 짧다. ADD n : X ← X+n 동작 코드 실제 데이터
직접 주소 지정 방식 • 피연산자 내의 주소가 실제 데이터의 주소(물리주소)로 직접 매핑이 이루어진다. • 장점 : 기억장치 상의 주소와 프로그램 상의주소가 일치해야 해서 간결하다 • 단점 : 융통성이 부족하다. operand Memory OP code Address (nn) 1st 실제 데이터 500 if nn = 100
간접 주소 지정 방식 • 직접 주소 방식의 문제점을 해결한 것으로 주소 필드가 기억장치의 한 워드를 가리키도록 하고 그 워드의 내용이 피연산자의 주소가 되도록 하면 워드 크기만큼의 주소 필드를 갖는 효과가 있다. • 2번에 걸쳐 메모리를 참조하는 특징이 있다. operand Memory I OP code Address (nn) I=0 : 직접주소방식 I=1 : 간접주소방식 1st if nn = (mm) → 500 실제데이터(700)
간접 주소 지정 방식 • 장점 : 메모리를 임의로 사용한다거나 프로그램상의 융통성을 발휘할 수 있다. • 단점 : 명령어를 수행하기 위해서 피연산자를 인출하는데 두번 기억장치를 참조해야 되는 레벨 2가 필요하다.
레지스터 주소 지정방식 • CPU 내의 레지스터가 명령어에 따라 지정되는 방식. • 특징 : 해당 레지스터에 실제 데이터가 기억되어 있으므로 직접 주소 지정 방식과 유사하나 주소 필드가 참조하는 것은 기억장치가 아니라 레지스터라는 점이 차이점이다. • 장점 : 기억장치를 참조할 필요가 없고 레지스터의 접근 시간이 빠르다. 메모리를 절약할 수 있다. • 단점 : 메모리워드는 다른 주소 지정방식에 비해 훨씬 줄어들지만 주소 지정이 가능한 공간이 적다는 것이다. Register OP code Address R 실제 데이터
레지스터 간접 주소 지정 방식 • 피연산자가 레지스터를 지정하고 다시 그 레지스터의 값이 실제 데이터가 저장되어 있는 기억장소. • 장점 : 데이터가 표 형식으로 연속된 경우에는 편리하다. • 단점 : 데이터가 불규칙한 불연속인 경우에는 매우 불편하다는 것이다. Memory OP code (RR) 주소 700 500 nn nn 실제 데이터(1500) 700
상대 주소지정방식 유효주소(Effective Address) =PC+명령어 주소 Ex)PC=845, 명령어 주소=24 인출주기 동안 845의 명령어가 읽혀짐->PC=846 ->유효주소=846+24=840 =>읽어온 명령을 수행하는데 실제자료는 840번지에 저장되어 있음
인덱스 레지스터 주소지정방식 유효주소(Effective Address) =인덱스 레지스터+명령어주소 =>명령어 주소=데이터 배 열의 시작 주소 =>인덱스 레지스터=유효주 소로부터 상대적인 위치
베이스 레지스터 주소지정방식 유효주소(Effective Address) =베이스 레지스터+명령어주소 =>명령어 주소=베이스 레지스터 로부터 상대적인 위치 =>베이스 레지스터=베이스 주소
배열 사용 예 • 베이스 레지스터+인덱스 레지스터 • =>배열처럼 사용 가능->메모리 참조 • =>인덱스 레지스터: 배열의 첨자, 베이스 레지스터: 처음주소
스택 주소지정방식 -SP(스택의 가장 맨 위의 주소) -PUSH연산 Data를 삽입-> SP++ -POP연산 Data를 삭제 ->SP-- =>주소를 따로 명시할 필요X (0-주소 명령어)
데이터 주소지정방식 -완전 주소 정보가 데이터이거나 주소이거나 구별 없이 기억된 장소 ->직접 매핑(mapping) 시킬 수 있는 주소 -약식주소 주소의 일부분을 생략 -생략주소 주소를 구체적으로 나타내지 않아도 원하는 정보가 기억 된곳을 알 수 있는 경우에 사용->명령어 길이 단축 ex)누산기 하나인 경우에 따로 지정할 필요없음
레지스터(Register) -의미:CPU내에서 자료를 1bit(1 또는 0)으로 보관하는 가장 빠른 기억장치 =>한 순간이라도 기억 못 하면 데이터 손실 =>CPU가 명령을 이해하고 명령에 필요한 변수를 읽고 저장공간의 주소를 알기 위해 필요 =>연산속도향상(연산결과를 주 기억 장치가 아닌 레지스터에 저장 하므로)
레지스터의 구성 =명령어 레지스터(Operand Register)+데이터 레지스터(Data Register)
범용 레지스터(General Purpose Register) -의미 : 데이터와 주소를 모두 저장 1)AX레지스터(Accumulator) 주로 곱셈, 나눗셈,자료의 입출력 2)BX레지스터(Base) 주로 포인터의 역할 3)CX레지스터(Count) 주로 반복 문에서 카운터 역할 4)DX레지스터(Data) 주로 곱셈, 나눗셈에서 큰수표현 *EAX(32bit)
포인터 레지스터(Pointer Register) -의미:특정주소를 가리키는 레지스터 -IP(Instruction Pointer, PC(Program Counter)) 수행할 다음 명령어가 저장되어있는 주소를 가리킴 =>흐름제어 명령, 인터럽트, 예외 등을 통하여 암시적으로 제어 됨(직접 접근 불가) =>CPU는 프로그램카운터값을 읽어 메모리에서 명령어 실행 =>하나의 명령을 처리 후 자동으로 그 명령어길이(워드 개수) 만큼 IP를 증가 시킴(IP++)
명령어 레지스터(Instruction Register) -의미: 현재 실행 중인 명령어를 저장하는 레지스터 =>프로그램 카운터가 지정하고 있는 주 기억 장치의 주소에 있는 명령어를 명령어 레지스터로 옮김 -> 명령어 해독기가 명령어 레지스터에 있는 명령어 해독 *명령 해독기(Instruction Decoder):현재 수행해야 할 명령을 해독한 후 가능한 여러 가지 제어 신호를 발생 =>OP: 연산, 분기 등을 저장, operand: 주소 값 *명령어
분기문에서 프로그램 카운터 변동 *소스 =>IP가 주소 004 를 지정-> 비교 후 ->006를 지정(+2 증가)
메모리 버퍼 레지스터 -메모리버퍼 레지스터(MBR:Memory Buffer Register) 메모리 주소 레지스터(MAR)를 저장 *메모리주소 레지스터(MAR:Memory Address Register) 실행에 필요한 프로그램, 데이터가 저장되어 있는 주기억 장치주소(유효 메모리 번지: Effective Memory Address) 를 저장 => 실질적으로 CPU가 주기억장치주소를 참조하는 레지스터
Memory와 data 교환 -Fetch 1.명령어가 주기억장치에 로드 2.PC가 가리키는 메모리 주소가 IR에 저장->PC1증가 -decode 3.명령해독기(Instruction decoder)가 해독가능한 신호로 바꿔줌 -execute 4. 참조할 data들은 MAR에 저장되어있어, CPU가 MAR를 참조함 5.ALU가 산술연산을 하며, 그 중간결과를 register(ACC: Accumulator)에저장또는 register(ACC: Accumulator) 로부터 data를 읽어옴.
인덱스 레지스터(Index Register) -의미: 여러 개의 메모리 블록 이동, 한꺼번에 지정 ->자료를 빠르게 찾을 수 있음. -SI(Source Index): Data의 시작지 -DI(Destination Index): Data의 목적지 =>두 레지스터의 주소를 설정->메모리 이동, 복사명령-> Data이동, 복사 가능 *인덱스 레지스터
세그먼트 레지스터(Segment Register) Segment: 프로그램의 크기가 주기억장치보다 클 때 프로그램을 한 묶음으로 쪼갠 영역(64KB) =>이 레지스터에 서로 다른 세그먼트들이 겹치지 않기 위해 시작주소들을 보관 -Code Segment: 프로그램의명령어가 시작되는 곳(IP) -Data Segment: Data 저장영역의 시작주소(BP) -Stack Segment: 스택 영역의 시작주소(SP) -Extra Segment: 추가로 사용되는 데이터 영역 주소
스택 레지스터(Stack Register) -의미: 스택 및 데이터 메모리를 관리하는 레지스터 -SP(Stack Pointer) 스택의 최상위 주소를 저장=>POP, PUSH연산에 의해 증감=> 한 프로그램 안에서 수시로 변동 -BP(Base Pointer) 주소를 간접지정 하는데 사용=>ex)배열크기=50, BP가 주소500를 지정->주소 500~549 으로 값 지정
상태 레지스터(Flag Register) -의미:연산의 상태를 저장하고 있는 레지스터 =>7-부호 플래그(Sign Flag):산술 연산의 결과에 대한 부 호(음수->1) 3-제로 플래그(Zero Flag):연산의 결과가 0의 여부(0->1) B-오버 플래그(Over Flag):기억장소의 표현범위 초과 여 부(초과->1) 0-캐리 플래그(Carry Flag):연산 후 자리올림, 자리내림 여부(자리올림,내림->1) …등등
적용 예 Ex) x<y(비교->뺄셈) x-y>0(x가 더 큼) x-y=0(같은 수) x-y<0(y가 더 큼) =>비교연산 결과를 레지스터의 세 비트로 저장 =>플래그 레지스터 값 참조->비교연산 실행