제 2 장 CPU 의구조와기능 2.1 CPU의기본구조 2.2 명령어실행 2.3 명령어파이프라이닝 2.4 명령어세트
CPU 의기능 명령어인출 (Instruction Fetch) : 기억장치로부터명령어를읽어온다 IF ID 명령어해독 (Instruction Decode) : 수행해야할동작을결정하기위하여명령어를해독한다 모든명령어들에대하여공통적으로수행 Computer Architecture 2-2
CPU 의기능 ( 계속 ) 데이터인출 (Data Fetch) : 명령어실행을위하여데이터가필요한경우에는기억장치혹은 I/O 장치로부터그데이터를읽어온다데이터처리 (Data Process) : 데이터에대한산술적혹은논리적연산을수행데이터쓰기 (Data Store) : 수행한결과를저장 명령어에따라필요한경우에만수행 Computer Architecture 2-3
2.1 CPU 의기본구조 산술논리연산장치 (Arithmetic and Logical Unit: ALU) 레지스터세트 (Register Set) 제어유니트 (Control Unit) Computer Architecture 2-4
CPU 의내부구성요소 ALU 각종산술연산들과논리연산들을수행하는회로들로이루어진하드웨어모듈 산술연산 : +, -,, 논리연산 : AND, OR, NOT, XOR 등 레지스터 (register) 액세스속도가가장빠른기억장치 CPU 내부에포함할수있는레지스터들의수가제한됨 ( 특수목적용레지스터들과적은수의일반목적용레지스터들 ) Computer Architecture 2-5
CPU 의내부구성요소 ( 계속 ) 제어유니트 프로그램코드 ( 명령어 ) 를해석하고, 그것을실행하기위한제어신 호들 (control signals) 을순차적으로발생하는하드웨어모듈 CPU 내부버스 (CPU internal bus) ALU와레지스터들간의데이터이동을위한데이터선들과제어유니트로부터발생되는제어신호선들로구성된내부버스 외부의시스템버스들과는직접연결되지않으며, 반드시버퍼레지스터들혹은시스템버스인터페이스회로를통하여시스템버스와접속 Computer Architecture 2-6
2.2 명령어실행 명령어사이클 (instruction cycle): CPU가한개의명령어를실행하는데필요한전체처리과정으로서, CPU가프로그램실행을시작한순간부터전원을끄거나회복불가능한오류가발생하여중단될때까지반복두개의부사이클 (subcycle) 들로분리 인출사이클 (fetch cycle) : CPU 가기억장치로부터명령어를읽어 오는단계 실행사이클 (execution cycle) : 명령어를실행하는단계 Computer Architecture 2-7
기본명령어사이클 Computer Architecture 2-8
명령어실행에필요한 CPU 내부레지스터들 프로그램카운터 (Program Counter: PC) 다음에인출할명령어의주소를가지고있는레지스터 각명령어가인출된후에는자동적으로일정크기 ( 한명령어길이 ) 만큼증가 분기 (branch) 명령어가실행되는경우에는목적지주소로갱신 누산기 (Accumulator: AC) 데이터를일시적으로저장하는레지스터. 레지스터의길이는 CPU 가한번에처리할수있는데이터비트수 ( 단어길이 ) 와동일 명령어레지스터 (Instruction Register: IR) 가장최근에인출된명령어코드가저장되어있는레지스터 Computer Architecture 2-9
명령어실행에필요한 CPU 내부레지스터들 ( 계속 ) 기억장치주소레지스터 (Memory Address Register: MAR) PC 에저장된명령어주소가시스템주소버스로출력되기전에일 시적으로저장되는주소레지스터 기억장치버퍼레지스터 (Memory Buffer Register: MBR) 기억장치에쓰여질데이터혹은기억장치로부터읽혀진데이터를 일시적으로저장하는버퍼레지스터 Computer Architecture 2-10
데이터통로가표시된 CPU 내부구조 Computer Architecture 2-11
2.2.1 인출사이클 인출사이클의마이크로연산 (micro-operation) t 0 : MAR PC t 1 : MBR M[MAR], PC PC + 1 t 2 : IR MBR 단, t 0, t 1 및 t 2 는 CPU 클록 (clock) 의주기 [ 첫번째주기 ] 현재의 PC 내용을 CPU 내부버스를통하여 MAR로전송 [ 두번째주기 ] 그주소가지정하는기억장치위치로부터읽혀진명령어가데이터버스를통하여 MBR로적재되며, PC의내용에 1을더한다 [ 세번째주기 ] MBR에있는명령어코드가명령어레지스터인 IR로이동 [ 예 ] CPU 클록 = 1GHz ( 클럭주기 = 1ns ) 인출사이클 : 1ns x 3 = 3ns소요 Computer Architecture 2-12
인출사이클의주소및명령어흐름도 Computer Architecture 2-13
2.2.2 실행사이클 CPU 는실행사이클동안에명령어코드를해독 (decode) 하고, 그결과에따라필요한연산들을수행 CPU 가수행하는연산들의종류 데이터이동 : CPU와기억장치간혹은 I/O장치간에데이터를이동 데이터처리 : 데이터에대하여산술혹은논리연산을수행 데이터저장 : 연산결과데이터혹은입력장치로부터읽어들인데이터를기억장치에저장 프로그램제어 : 프로그램의실행순서를결정 실행사이클에서수행되는마이크로 - 연산들은명령어의 연산코드 (op code) 에따라결정됨 Computer Architecture 2-14
기본적인명령어형식의구성 연산코드 (operation code) CPU 가수행할연산을지정 오퍼랜드 (operand) 명령어실행에필요한데이터가저장된주소 (addr) Computer Architecture 2-15
[ 사례 1] LOAD addr 명령어 기억장치에저장되어있는데이터를 CPU 내부레지스터 인 AC 로이동하는명령어 t 0 : MAR IR(addr) t 1 : MBR M[MAR] t 2 : AC MBR [ 첫번째주기 ] 명령어레지스터 IR에있는명령어의주소부분을 MAR로전송 [ 두번째주기 ] 그주소가지정한기억장소로부터데이터를인출하여 MBR로전송 [ 세번째주기 ] 그데이터를 AC에적재 Computer Architecture 2-16
[ 사례 2] STA addr 명령어 AC 레지스터의내용을기억장치에저장하는명령어 t 0 : MAR IR(addr) t 1 : MBR AC t 2 : M[MAR] MBR [ 첫번째주기 ] 데이터를저장할기억장치의주소를 MAR 로전송 [ 두번째주기 ] 저장할데이터를버퍼레지스터인 MBR 로이동 [ 세번째주기 ] MBR 의내용을 MAR 이지정하는기억장소에저장 Computer Architecture 2-17
[ 사례 3] ADD addr 명령어 기억장치에저장된데이터를 AC 의내용과더하고, 그결 과는다시 AC 에저장하는명령어 t 0 : MAR IR(addr) t 1 : MBR M[MAR] t 2 : AC AC + MBR [ 첫번째주기 ] 데이터를저장할기억장치의주소를 MAR로전송 [ 두번째주기 ] 저장할데이터를버퍼레지스터인 MBR로이동 [ 세번째주기 ] 그데이터와 AC의내용을더하고결과값을다시 AC에저장 Computer Architecture 2-18
ADD 명령어실행사이클동안의정보흐름 Computer Architecture 2-19
[ 사례 4] JUMP addr 명령어 오퍼랜드 (addr) 가가리키는위치의명령어로실행순서를 변경하는분기 (branch) 명령어 t 0 : PC IR(addr) 명령어의오퍼랜드 ( 분기할목적지주소 ) 를 PC 에저장 다음명령어인출사이클에서그주소의명령어가인출되므로, 분 기가발생 Computer Architecture 2-20
어셈블리프로그램실행과정의예 연산코드에임의의정수배정 LOAD : 1 STORE : 2 ADD : 5 JUMP : 8 [ 어셈블리프로그램의예 ] Computer Architecture 2-21
어셈블리프로그램실행과정의예 ( 계속 ) 100 번지의첫번째명령어코드가인출되어 IR 에저장 250 번지의데이터를 AC 로이동 PC = PC + 1 = 101 Computer Architecture 2-22
어셈블리프로그램실행과정의예 ( 계속 ) 두번째명령어가 101 번지로부터인출되어 IR 에저장 AC 의내용과 251 번지의내용을더하고, 결과를 AC 에저장 PC 의내용은 102 로증가 Computer Architecture 2-23
어셈블리프로그램실행과정의예 ( 계속 ) 세번째명령어가 102 번지로부터인출되어 IR 에저장 AC 의내용이 251 번지에저장 PC 의내용은 103 으로증가 Computer Architecture 2-24
어셈블리프로그램실행과정의예 ( 계속 ) 네번째명령어가 103 번지로부터인출되어 IR 에저장 분기될목적지주소, 즉 IR 의하위부분 (170) 이 PC 로적재 ( 다음명령어인출사이클에서는 170 번지의명령어인출 ) Computer Architecture 2-25
2.2.3 인터럽트사이클 (interrupt cycle) 인터럽트 : 프로그램실행중에 CPU 의현재처리순서를중단 시키고다른동작을수행하도록요구하는시스템동작 외부로부터인터럽트요구가들어오면, CPU 는원래의프로그램수행을중단하고, 요구된인터럽트를위한서비스프로그램을먼저수행 인터럽트서비스루틴 (interrupt service routine: ISR) : 인 터럽트를처리하기위하여수행되는프로그램루틴 Computer Architecture 2-26
인터럽트에의한제어의이동 Computer Architecture 2-27
인터럽트처리과정 인터럽트가들어왔을때 CPU 는 어떤장치가인터럽트를요구했는지확인하고, 해당 ISR 을호출 서비스가종료된다음에는중단되었던원래프로그램의수행계속 CPU 인터럽트처리의세부동작 1 2 현재의명령어실행을끝낸즉시, 다음에실행할명령어의주소 (PC의내용 ) 를스택 (stack) 에저장 일반적으로스택은주기억장치의특정부분 ISR을호출하기위하여그루틴의시작주소를 PC에적재. 이때시작주소는인터럽트를요구한장치로부터전송되거나미리정해진값으로결정 자세한사항은 7.4절에서설명 Computer Architecture 2-28
인터럽트사이클이추가된명령어사이클 Computer Architecture 2-29
인터럽트사이클의마이크로연산 t 0 : MBR PC t 1 : MAR SP, PC ISR의시작주소 t 2 : M[MAR] MBR 단, SP는스택포인터 (stack pointer). [ 첫번째주기 ] PC의내용을 MBR로전송 [ 두번째주기 ] SP의내용을 MAR로전송하고, PC의내용은인터럽트서비스루틴의시작주소로변경 [ 세번째주기 ] MBR에저장되어있던원래 PC의내용을스택에저장 Computer Architecture 2-30
인터럽트사이클의마이크로연산 [ 예 ] 아래프로그램의첫번째명령어인 LOAD 250 명령어가실행되는동안에인터럽트가들어왔으며, 현재 SP = 999 이고, 인터럽트서비스루틴의시작주소는 650 번지라고가정 100 LOAD 250 1250 101 ADD 251 5251 102 STA 251 2251 103 JUMP 170 8170 Computer Architecture 2-31
인터럽트요구가들어온경우의상태변화 Computer Architecture 2-32
다중인터럽트 (multiple interrupt) 인터럽트서비스루틴을수행하는동안에다른인터럽트발생 다중인터럽트의처리방법 ( 두가지 ) 1 CPU 가인터럽트서비스루틴을처리하고있는도중에는새로운인터럽 트요구가들어오더라도 CPU 가인터럽트사이클을수행하지않도록방지 o o 인터럽트플래그 (interrupt flag) 0 : 인터럽트불가능 (interrupt disabled) 상태시스템운영상중요한프로그램이나도중에중단할수없는데이터입출력동작등을위한인터럽트를처리하는데사용 2 인터럽트의우선순위를정하고, 우선순위가낮은인터럽트가처리되고 있는동안에우선순위가더높은인터럽트가들어온다면, 현재의인터럽 트서비스루틴의수행을중단하고새로운인터럽트를처리 Computer Architecture 2-33
다중인터럽트처리방법 장치 X 를위한 ISR X 를처리하는도중에우선순위가더높은 장치 Y 로부터인터럽트요구가들어와서먼저처리되는경우에 대한제어의흐름 Computer Architecture 2-34
2.2.4 간접사이클 (indirect cycle) 명령어에포함되어있는주소를이용하여, 그명령어실행에필요한데이터의주소를인출하는사이클 간접주소지정방식 (indirect addressing mode) 에서사용인출사이클과실행사이클사이에위치간접사이클에서수행될마이크로-연산 t 0 : MAR IR(addr) t 1 : MBR M[MAR] t 2 : IR(addr) MBR 인출된명령어의주소필드내용을이용하여기억장치로부터데이터의실제주소를인출하여 IR의주소필드에저장 Computer Architecture 2-35
제 2 장 CPU 의구조와기능 2.1 CPU의기본구조 2.2 명령어실행 2.3 명령어파이프라이닝 2.4 명령어세트
2.3 명령어파이프라이닝 (instruction pipelining) CPU 의프로그램처리속도를높이기위하여 CPU 내부하드웨어를 여러단계로나누어동시에처리하는기술 2- 단계명령어파이프라인 (two-stage instruction pipeline) 명령어를실행하는하드웨어를인출단계 (fetch stage) 와실행단 계 (execute stage) 라는두개의독립적인파이프라인모듈로분리 두단계들에동일한클록을가하여동작시간을일치시키면, o o 첫번째클록주기에서는인출단계가첫번째명령어를인출 두번째클록주기에서는인출된첫번째명령어가실행단계로 보내져서실행되며, 그와동시에인출단계는두번째명령어를 인출 Computer Architecture 2-37
2- 단계명령어파이프라인과시간흐름도 Computer Architecture 2-38
2- 단계명령어파이프라인 ( 계속 ) 2-단계파이프라인을이용하면명령어처리속도가두배향상 ( 일반적으로단계수만큼의속도향상 ) 문제점 : 두단계의처리시간이동일하지않으면두배의속도향상을얻지못함 ( 파이프라인효율저하 ) 해결책 : 파이프라인단계의수를증가시켜각단계의처리시간을같게함 파이프라인단계의수를늘리면전체적으로속도향상이더높아짐 Computer Architecture 2-39
4- 단계명령어파이프라인 명령어인출 (IF) 단계 : 다음명령어를기억장치로부터인출명령어해독 (ID) 단계 : 해독기 (decoder) 를이용하여명령어를해석오퍼랜드인출 (OF) 단계 : 기억장치로부터오퍼랜드를인출실행 (EX) 단계 : 지정된연산을수행 Computer Architecture 2-40
4- 단계명령어파이프라인과시간흐름도 Computer Architecture 2-41
파이프라인에의한전체명령어실행시간 파이프라인단계수 = k 실행할명령어들의수 = N 각파이프라인단계가한클럭주기씩걸린다고가정한다면 파이프라인에의한전체명령어실행시간 T : T = k + (N - 1) 즉, 첫번째명령어를실행하는데 k 주기가걸리고, 나머지 (N - 1) 개의명령어들은각각한주기씩만소요 파이프라인되지않은경우의 N 개의명령어들을실행시간 T : T = k N Computer Architecture 2-42
파이프라인에의한속도향상 (speedup) S p T T 1 k k k N ( N 1) Computer Architecture 2-43
[ 예제 2-1] 파이프라인에의한속도향상 파이프라인단계수 = 4, 파이프라인클록 = 1GHz ( 각단계에서의소요시간 = 1 ns) 일때, 10개의명령어를실행하는경우의속도향상은? < 풀이 > 첫번째명령어실행에걸리는시간 = 4 ns 다음부터는매 1 ns 마다한개씩의명령어실행완료 10개의명령어실행시간 = 4 + (10-1) = 13 ns 속도향상 = (10 4) / 13 3.08 배 Computer Architecture 2-44
[ 예 ] k = 4 일때, N = 100 이라면, Sp = 400/103 = 3.88 N = 1000 이라면, Sp = 4000/1003 = 3.988 N = 10000 이라면, Sp = 40000/10003 = 3.9988 N 라면, Sp = 4 Computer Architecture 2-45
파이프라인의효율저하요인들 모든명령어들이파이프라인단계들을모두거치지는않는다 어떤명령어에서는오퍼랜드를인출할필요가없지만, 파이프라인 의하드웨어를단순화시키기위해서는모든명령어가네단계들을 모두통과하도록해야한다 파이프라인의클록은처리시간이가장오래걸리는단계를기준으로 결정된다 IF 단계와 OF 단계가동시에기억장치를액세스하는경우에, 기억장 치충돌 (memory conflict) 이일어나면지연이발생한다 조건분기 (conditional branch) 명령어가실행되면, 미리인출하여처 리하던명령어들이무효화된다 Computer Architecture 2-46
조건분기가존재하는경우의시간흐름도 Computer Architecture 2-47
분기발생에의한성능저하의최소화방법 분기예측 (branch prediction) 분기가일어날것인지를예측하고, 그에따라명령어를인출하는확률적방법 분기역사표 (branch history table) 이용하여최근의분기결과를참조 분기목적지선인출 (prefetch branch target) : 조건분기가인식되면, 분기명령어의다음명령어뿐만아니라분기의목적지명령어도함께인출하는방법 루프버퍼 (loop buffer) 사용 : 파이프라인의명령어인출단계에포함되어있는작은고속기억장치인루프버퍼에가장최근인출된 n개의명령어들을순서대로저장해두는방법지연분기 (delayed branch) : 분기명령어의위치를재배치함으로써파이프라인의성능을개선하는방법 Computer Architecture 2-48
상태레지스터 (status register) 조건분기명령어가사용할조건플래그 (condition flag) 들저장 부호 (S) 플래그 : 직전에수행된산술연산결과값의부호비트 를저장 영 (Z) 플래그 : 연산결과값이 0 이면, 1 올림수 (C) 플래그 : 덧셈이나뺄셈에서올림수 (carry) 나빌림수 (borrow) 가발생한경우에 1 로세트 Computer Architecture 2-49
상태레지스터 ( 계속 ) 동등 (E) 플래그 : 두수를비교한결과가같게나왔을경우에 1 로세트 오버플로우 (V) 플래그 : 산술연산과정에서오버플로우가발생 한경우에 1 로세트 인터럽트 (I) 플래그 인터럽트가능 (interrupt enabled) 상태이면 0로세트 인터럽트불가능 (interrupt disabled) 상태이면 1로세트 슈퍼바이저 (P) 플래그 : CPU의실행모드가슈퍼바이저모드 (supervisor mode) 이면 1로세트, 사용자모드 (user mode) 이면 0로세트 Computer Architecture 2-50
2.3.3 슈퍼스칼라 (Superscalar) CPU의처리속도를더욱높이기위하여내부에두개혹은그이상의명령어파이프라인들을포함시킨구조매클록주기마다각명령어파이프라인이별도의명령어를인출하여동시에실행할수있기때문에, 이론적으로는프로그램처리속도가파이프라인의수만큼향상가능 파이프라인의수 = m : m-way 슈퍼스칼라 Computer Architecture 2-51
2-way 슈퍼스칼라의명령어실행흐름도 Computer Architecture 2-52
슈퍼스칼라에의한속도향상 (speedup: Sp) 단일파이프라인에의한실행시간 (N : 실행할명령어수 ) m-way 슈퍼스칼라에의한실행시간 속도향상 명령어수 N, Sp m Computer Architecture 2-53
슈퍼스칼라 ( 계속 ) 슈퍼스칼라의속도저하 (Sp < m) 요인 : 명령어들간의데이터의존관계 하드웨어 (ALU, 레지스터, 등 ) 이용에대한경합발생 동시실행가능한명령어수 < m < 해결책 > 명령어실행순서재배치 명령어들간의데이터의존성제거 하드웨어추가 ( 중복 ) 설치 기억장치및레지스터에대한경합감소 Computer Architecture 2-54
2.3.4 듀얼 - 코어및멀티 - 코어 CPU 코어 (core) : 명령어실행에필요한 CPU 내부의핵심 ( 명령어실행 ) 하드웨어모듈멀티-코어프로세서 (multi-core processor): 여러개의 CPU 코어들을하나의칩에포함시킨프로세서 듀얼 - 코어 (dual-core): 두개의 CPU 코어포함 쿼드 - 코어 (quad-core): 네개의 CPU 코어포함 칩 - 레벨다중프로세서 (chip-level multiprocessor) 혹은 단일 - 칩다중프로세서 (multiprocessor-on-a-chip) 이라 고도부름 Computer Architecture 2-55
듀얼 - 코어및멀티 - 코어 ( 계속 ) 각 CPU 코어는별도의 H/W 모듈로이루어지며, 시스템 버스와캐시만공유 프로그램실행에있어서각코어는 ( 슈퍼스칼라의각파이프라 인보다 ) 더높은독립성가짐 : 멀티 - 태스킹 (multi-tasking) 혹 은멀티 - 스레딩 (multi-threading) Computer Architecture 2-56
2.4 명령어세트 (instruction set) 어떤 CPU 를위하여정의되어있는명령어들의집합 명령어세트설계를위해결정되어야할사항들 연산종류 (operation repertoire): CPU가수행할연산들의수와종류및복잡도 데이터형태 (data type): 연산을수행할데이터들의형태, 데이터의길이 ( 비트수 ), 수의표현방식등 명령어형식 (instruction format): 명령어의길이, 오퍼랜드필드들의수와길이, 등 주소지정방식 (addressing mode): 오퍼랜드의주소를지정하는방식 Computer Architecture 2-57
2.4.1 연산의종류 데이터전송 : 레지스터와레지스터간, 레지스터와기억장치간, 혹은 기억장치와기억장치간에데이터를이동하는동작 산술연산 : 덧셈, 뺄셈, 곱셈및나눗셈과같은기본적인산술연산들 논리연산 : 데이터의각비트들간에대한 AND, OR, NOT 및 exclusive-or 연산 입출력 (I/O) : CPU 와외부장치들간의데이터이동을위한동작들 프로그램제어 명령어실행순서를변경하는연산들 분기 (branch), 서브루틴호출 (subroutine call) Computer Architecture 2-58
서브루틴호출을위한명령어들 CALL 명령어 : 현재의 PC 내용을스택에저장하고서브 루틴의시작주소로분기하는명령어 RET 명령어 : CPU 가원래실행하던프로그램으로복귀 (return) 시키는명령어 Computer Architecture 2-59
서브루틴이포함된프로그램이수행되는순서 Computer Architecture 2-60
CALL/RET 명령어의마이크로연산 CALL X 명령어에대한마이크로-연산 t 0 : MBR PC t 1 : MAR SP, PC X t 2 : M[MAR] MBR, SP SP - 1 현재의 PC 내용 ( 서브루틴수행완료후에복귀할주소 ) 을 SP가지정하는스택의최상위 (top of stack) 에저장 만약주소지정단위가바이트이고저장될주소는 16비트라면, SP SP 2 로변경 RET 명령어의마이크로-연산 t 0 : SP SP + 1 t 1 : MAR SP t 2 : PC M[MAR] Computer Architecture 2-61
그림 2-17 의프로그램수행과정에서스택의변화 Computer Architecture 2-62
2.4.2 명령어형식 명령어의구성요소들 연산코드 (Operation Code) : 수행될연산을지정 ( 예 : LOAD, ADD 등 ) 오퍼랜드 (Operand) 연산을수행하는데필요한데이터혹은데이터의주소 각연산은한개혹은두개의입력오퍼랜드들과한개의결과오퍼랜드를포함 데이터는 CPU 레지스터, 주기억장치, 혹은 I/O 장치에위치 다음명령어주소 (Next Instruction Address) 현재의명령어실행이완료된후에다음명령어를인출할위치지 정 분기혹은호출명령어와같이실행순서를변경하는경우에필요 Computer Architecture 2-63
명령어형식 명령어형식 (instruction format) : 명령어내필드들의수와배치방식및각필드의비트수필드 (field) : 명령어의각구성요소들에소요되는비트들의그룹명령어의길이 = 단어 (word) 길이 [ 예 ] 세개의필드들로구성된 16- 비트명령어 Computer Architecture 2-64
명령어형식의결정에서고려할사항들 연산코드필드길이 : 연산의개수를결정 [ 예 ] 4 비트 2 4 = 16 가지의연산정의가능 o 만약연산코드필드가 5 비트로늘어나면, 2 5 = 32 가지연산 들정의가능 다른필드의길이가감소 오퍼랜드필드의길이 : 오퍼랜드의범위결정 오퍼랜드의종류에따라범위가달라짐 o o o 데이터 : 표현가능한수의범위결정기억장치주소 : CPU가오퍼랜드인출을위하여직접주소를지정할수있는기억장치용량결정레지스터번호 : 데이터저장에사용될수있는레지스터의개수결정 Computer Architecture 2-65
오퍼랜드필드범위의예 오퍼랜드 1 은레지스터번호를지정하고, 오퍼랜드 2 는기억장 치주소를지정하는경우 오퍼랜드 1 : 4 비트 16 개의레지스터사용가능 오퍼랜드 2 : 8 비트 기억장치의주소범위 : 0 255 번지 두개의오퍼랜드들을하나로통합하여사용하는경우 오퍼랜드가 2의보수로표현되는데이터라면, 표현범위 : - 2048 + 2047 오퍼랜드가기억장치주소라면, 2 12 = 4096 개의기억장치주소들지정가능 Computer Architecture 2-66
오퍼랜드의수에따른명령어분류 1- 주소명령어 (one-address instruction) : 오퍼랜드를한개만포함 하는명령어. ( 다른한오퍼랜드는묵시적으로 AC 가됨 ) [ 예 ] ADD X ; AC AC + M[X] 2- 주소명령어 (two-address instruction) : 두개의오퍼랜드를포함 하는명령어. [ 예 ] ADD R1, R2 ; R1 R1 + R2 MOV R1, R2 ADD R1, X ; R1 R2 ; R1 R1 + M[X] 3- 주소명령어 (three-address instruction) : 세개의오퍼랜드들을 포함하는명령어. [ 예 ] ADD R1, R2, R3 ; R1 R2 + R3 Computer Architecture 2-67
1- 주소명령어의예 길이가 16 비트인 1- 주소명령어에서연산코드가 5 비트 인경우의명령어형식을정의하고, 주소지정가능한기억 장치용량을결정하라 주소지정가능한기억장치용량 : 2 11 = 2048 바이트 명령어형식 (instruction format) Computer Architecture 2-68
2- 주소명령어의예 2-주소명령어형식을사용하는 16-비트 CPU에서연산코드가 5 비트이고, 레지스터의수는 8 개이다. (a) 두오퍼랜드들이모두레지스터번호인경우와, (b) 한오퍼랜드는기억장치주소인경우의명령어형식을정의하라 Computer Architecture 2-69
3- 주소명령어형식의예 Computer Architecture 2-70
명령어형식이프로그래밍에미치는영향 ( 예 ) [ 예 ] X = (A + B) x (C - D) 계산을위한어셈블리프로그램작성 아래와같은니모닉을가진명령어들을사용 ADD : 덧셈 SUB : 뺄셈 MUL : 곱셈 DIV : 나눗셈 MOV : 데이터이동 LOAD : 기억장치로부터데이터적재 STOR : 기억장치로데이터저장 Computer Architecture 2-71
1- 주소명령어를사용한프로그램 LOAD A ; AC M[A] ADD B ; AC AC + M[B] STOR T LOAD C ; M[T] AC ; AC M[C] SUB D ; AC AC - M[D] MUL T ; AC AC M[T] STOR X ; M[X] AC 단, M[A] 는기억장치 A 번지의내용, T 는기억장치내임시저장장소의주소 프로그램의길이 = 7 Computer Architecture 2-72
2- 주소명령어를사용한프로그램 MOV R1, A ; R1 M[A] ADD R1, B ; R1 R1 + M[B] MOV R2, C ; R2 M[C] SUB R2, D ; R2 R2 - M[D] MUL R1, R2 ; R1 R1 R2 MOV X, R1 ; M[X] R1 프로그램의길이 = 6 Computer Architecture 2-73
3- 주소명령어를사용한프로그램 ADD R1, A, B ; R1 M[A] + M[B] SUB R2, C, D ; R2 M[C] - M[D] MUL X, R1, R2 ; M[X] R1 R2 프로그램의길이 = 3 단점 명령어의길이가증가한다 명령어해독과정이복잡해진다 Computer Architecture 2-74
2.4.3 주소지정방식 (addressing mode) 명령어실행에필요한오퍼랜드 ( 데이터 ) 의주소를결정하 는방식 기억장치주소 : 데이터가저장된기억장치의위치를지정 레지스터번호 : 데이터가저장된레지스터를지정 데이터 : 명령어의오퍼랜드필드에데이터가포함 다양한주소지정방식을사용하는이유 : 제한된수의명령어비트들을이용하여, 사용자 ( 프로그래머 ) 가여러가지방법으로오퍼랜드의주소를결정하도록해주며, 더큰용량의기억장치를사용할수있도록하기위함 Computer Architecture 2-75
기호 EA : 유효주소 (Effective Address), 즉데이터가저장된기억장치의실제주소 A : 명령어내의주소필드내용 ( 오퍼랜드필드의내용이기억장치주소인경우 ) R : 명령어내의레지스터번호 ( 오퍼랜드필드의내용이레지스터번호인경우 ) (A) : 기억장치 A 번지의내용 (R) : 레지스터 R의내용 Computer Architecture 2-76
주소지정방식의종류 직접주소지정방식 (direct addressing mode) 간접주소지정방식 (indirect addressing mode) 묵시적주소지정방식 (implied addressing mode) 즉시주소지정방식 (immediate addressing mode) 레지스터주소지정방식 (register addressing mode) 레지스터간접주소지정방식 (register-indirect addressing mode) 변위주소지정방식 (displacement addressing mode) 상대주소지정방식 (relative addressing mode) 인덱스주소지정방식 (indexed addressing mode) 베이스 - 레지스터주소지정방식 (base-register addressing mode) Computer Architecture 2-77
1) 직접주소지정방식 (direct addressing mode) 오퍼랜드필드의내용이유효주소 (EA) 가되는방식 EA = A 장점 : 데이터인출을위하여한번의기억장치액세스만필요 단점 : 연산코드를제외하고남은비트들만주소비트로사용 될수있기때문에직접지정할수있는기억장소의수가제한 Computer Architecture 2-78
Computer Architecture 2-79
[ 예제 2-6 ( 계속 )] Computer Architecture 2-80
2) 간접주소지정방식 (indirect addressing mode) 오퍼랜드필드에기억장치주소가저장되어있지만, 그주소가 가리키는기억장소에데이터의유효주소를저장해두는방식 EA = (A) Computer Architecture 2-81
간접주소지정방식 ( 계속 ) 장점 : 최대기억장치용량이단어의길이에의하여결정 주소지정가능한기억장치용량확장 단어길이가 n 비트라면, 최대 2 n 개의기억장소주소지정이 가능 단점 : 실행사이클동안에두번의기억장치액세스가필요 첫번째액세스 : 주소인출 두번째액세스 : 그주소가지정하는기억장소로부터실제 데이터인출 Computer Architecture 2-82
간접주소지정방식 ( 계속 ) 명령어형식에간접비트 (I) 필요 만약 I = 0 이면, 직접주소지정방식 만약 I = 1 이면, 간접주소지정방식 다단계 (multi-level) 간접주소지정방식 EA = ( (.. (A).. ) ) Computer Architecture 2-83
Computer Architecture 2-84
3) 묵시적주소지정방식 (implied addressing mode) 명령어실행에필요한데이터의위치가묵시적으로지 정되는방식 [ 예 ] SHL 명령어 : 누산기의내용을좌측으로시프트 (shift) PUSH R1 명령어 : 레지스터 R1 의내용을스택에저장 장점 : 명령어길이가짧다 단점 : 종류가제한된다 Computer Architecture 2-85
4) 즉시주소지정방식 (immediate addressing mode) 데이터가명령어에포함되어있는방식 ( 오퍼랜드필드의내용이연산에사용할실제데이터 ) 용도 : 프로그램에서레지스터나변수의초기값을어떤상수값 (constant value) 으로세트하는데사용장점 : 데이터를인출하기위하여기억장치를액세스할필요가없음단점 : 상수값의크기가오퍼랜드필드의비트수에의해제한됨 Computer Architecture 2-86
5) 레지스터주소지정방식 연산에사용될데이터가내부레지스터에저장되어있는경우, 명령어의오퍼랜드가해당레지스터를가리키는방식 EA = R 주소지정에사용될수있는레지스터들의수 = 2 k 개 ( 단, k 는 R 필드의비트수 ) Computer Architecture 2-87
레지스터주소지정방식 ( 계속 ) 장점 오퍼랜드필드의비트수가적어도된다 데이터인출을위하여기억장치액세스가필요없다 단점 데이터가저장될수있는공간이 CPU 내부레지스터들 로제한 Computer Architecture 2-88
6) 레지스터간접주소지정방식 오퍼랜드필드 ( 레지스터번호 ) 가가리키는레지스터의내 용을유효주소로사용하여실제데이터를인출하는방식 EA = (R) Computer Architecture 2-89
Computer Architecture 2-90
레지스터간접주소지정방식 ( 계속 ) 장점 : 주소지정할수있는기억장치영역이확장 레지스터의길이 = 16 비트라면, 주소지정영역 : 2 16 = 64K 바이트 레지스터의길이 = 32 비트라면, 주소지정영역 : 2 32 = 4G 바이트 Computer Architecture 2-91
7) 변위주소지정방식 (displacement addressing) 직접주소지정과레지스터간접주소지정방식의조합 EA = A + (R) 사용되는레지스터에따라여러종류의변위주소지정방 식정의 PC 상대주소지정방식 (relative addressing mode) 인덱스레지스터 인덱스주소지정방식 (indexed addressing mode) 베이스레지스터 베이스-레지스터주소지정방식 (baseregister addressing mode) Computer Architecture 2-92
상대주소지정방식 (relative addressing mode) 프로그램카운터 (PC) 를레지스터로사용 ( 주로분기명령어에 서사용 ) EA = A + (PC) 단, A 는 2 의보수 A > 0 : 앞 (forward) 방향으로분기 A < 0 : 뒷 (backward) 방향으로분기 Computer Architecture 2-93
Computer Architecture 2-94
상대주소지정방식 ( 계속 ) 장점 : 전체기억장치주소가명령어에포함되어야하 는일반적인분기명령어보다적은수의비트만있으 면된다 단점 : 분기범위가오퍼랜드필드의길이에의해제 한된다 Computer Architecture 2-95
인덱스주소지정방식 (indexed addressing mode) 인덱스레지스터의내용과변위 A 를더하여유효주소를 결정 EA = (IX) + A 인덱스레지스터 (IX) : 인덱스 (index) 값을저장하는 특수레지스터 주요용도 : 배열데이터액세스 Computer Architecture 2-96
[ 예 ] 데이터배열이기억장치의 500 번지부터저장되어있고, 명령어의주 소필드에 500 이포함되어있을때, 인덱스레지스터의내용 (IX) = 3 이라면 데이터배열의 4 번째데이터액세스 Computer Architecture 2-97
인덱스주소지정방식 ( 계속 ) 자동인덱싱 (auto-indexing) 명령어가실행될때마다인덱스레지스터의내용이자동적으로증가혹은감소 이방식이사용된명령어가실행되면아래의두연산이연속적으로수행됨 EA = (IX) + A IX IX + 1 Computer Architecture 2-98
베이스 - 레지스터주소지정방식 베이스레지스터의내용과변위 A 를더하여유효주소를 결정 EA = (BR) + A 주요용도 : 프로그램의위치 ( 변경 ) 지정에사용 [ 예 ] 다중프로그래밍 (multiprogramming) 환경에서프로그램코드및데이터를다른위치로이동시켜야할때, 분기명령어나데이터액세스명령어들의주소필드내용을바꿀필요없이, BR의내용만변경하면된다. Computer Architecture 2-99
2.4.4 실제상용프로세서들의명령어형식 PDP-10 프로세서 : 고정길이의명령어형식사용 단어의길이 = 36 비트, 명령어의길이 = 36 비트 연산코드 = 9 비트 최대 512 종류의연산허용 ( 실제 365 개 ) PDP-11 프로세서 : 다양한길이의명령어형식들사용 연산코드 = 4 16 비트 주소개수 : 0, 1, 2 개 Computer Architecture 2-100
PDP-11 의명령어형식들 Computer Architecture 2-101
펜티엄프로세서의명령어형식 선형주소 (linear address: LA) : 유효주소 + 세그먼트의시작주소 ( 세그먼트의시작주소는세그먼트레지스터 (SR) 에저장 ) Computer Architecture 2-102
펜티엄프로세서의명령어형식 즉시방식 (immediate mode) : 데이터가명령어에포함되는방식 데이터의길이 = 바이트, 단어 (word) 혹은 2 중단어 (double word) 레지스터방식 (register mode) : 유효주소가레지스터에들어있는 방식 변위방식 (displacement mode) : 명령어에포함된변위값과세그먼 트레지스터 SR 의내용을더하여선형주소 LA 를생성하는방식 베이스방식 (base mode) : 레지스터간접주소지정에해당 상대방식 (relative mode) : 변위값과프로그램카운터의값을더하여 다음명령어의주소로사용하는방식 Computer Architecture 2-103
펜티엄명령어형식의필드들 연산코드 (Op code) : 연산의종류지정. 길이 = 1 or 2 바이트 MOD/RM : 주소지정방식지정 SIB : MOD/RM 필드와결합하여주소지정방식을완성변위 (displacement) : 부호화된정수 ( 변위 ) 를저장즉시 (immediate) : 즉시데이터를저장 Computer Architecture 2-104