중앙처리장치 (CPU: Central Process Unit) 1) 제어장치 (Control Unit) 컴퓨터시스템의모든장치들에게동작을지시하고제어하는장치로주기억장치에서읽어온명령어를해독하고해당장치에게제어신호를보낸다. 구성회로 : 부호기, 명령해독기, 번지해독기 구성레지스터 : PC( 프로그램카운터 ), IR( 명령어레지스터 ) 부호기 ( 제어신호발생기 ) 해독한명령어에따라서해당장치로보낼제어신호를생성하는회로 ( 인코더 ) 명령해독기 명령레지스터에있는명령어를해독하는회로 ( 디코더 ) 번지해독기 명령레지스터에있는명령어가가지고있는직접또는간접번지를해독하는회로 ( 디코더 ) 2) 산술논리연산장치 (ALU: Arithmetic & Logic Unit) 제어장치의명령에따라실제연산 ( 계산처리 ) 을수행하는장치로산술연산, 논리연산, 시프트연산, 관계연산등이있다. 구성회로 : Adder( 가산기 : 2진수의덧셈을수행하는회로 ), Complement( 보수기 : 2진수의값을보수로변환하는회로 ) 구성레지스터 : AC( 누산기 ), 데이터레지스터, 시프트레지스터, 오버플로우검출기 3) 레지스터 (Register) CPU 내부에서처리할명령또는연산의중간결과값을일시적으로저장하는기억장소이다. 플립플롭 (Flip-Flop) 으로구성되어있으며, 기억장치중에서가장속도가빠르다. [ 1 ]
프로그램카운터 (Program Counter) 명령레지스터 (Instruction Register) 누산기 (AC: Accumulator) 상태레지스터 (Status Register) PSWR(Program Status Word Register) 메모리주소레지스터 (MAR: Memory Address Register) 메모리버퍼레지스터 (MBR: Memory Buffer Register) 인덱스레지스터 (Index Register) 데이터레지스터 (Data Register) 시프트레지스터 (Shift Register) 메이저상태레지스터 (Major Status Register) 제어장치 (Control Unit) 가다음번에수행해야할명령어의번지 ( 주소 ) 를기억하는레지스터 현재실행되고있는명령의내용을기억하는레지스터 연산결과를일시적으로저장하는레지스터 시스템내부각각의순간적상태정보를 PSW라하며이내용을기억하는레지스터를 PSWR이라한다. 오버플로우, 언더플로우, 자리올림, 인터럽트등을기억하는레지스터이다. 기억장치를출입하는데이터의번지를기억하는레지스터 기억장치를출입하는데이터를일시기억하는레지스터 주소의변경이나프로그램에서반복하는연산횟수를카운터하는레지스터 연산에사용되는피연산자를기억하는레지스터 저장된값을왼쪽, 오른쪽으로 1비트씩자리이동을수행하는레지스터 메이저상태 : 프로세서의처리루틴상태 ( 인출 -> 간접 -> 실행 -> 인터럽트 ) CPU의메이저상태를기억하는레지스터 4) 버스 (Bus) CPU 와기억장치및입출력장치와서로데이터를주고받기위한전송경로를말한다. 버스는 CPU 와주기억장치로구성된내부버스와입출력장치에구성된외부버스가있다. Address Bus( 주소버스 ) Data Bus( 데이터버스 ) Control Bus( 제어버스 ) CPU가주기억장치, 입출력장치의번지를지정하기위해사용하는단방향전송경로 CPU, 주기억장치, 입출력장치들이데이터를주고받기위해사용하는양방향전송경로 CPU의현재상태및변경된상태등을주기억장치또는입출력장치에게알려주는제어신호를보내기위해사용하는단방향전송경로 명령어 (Instruction) 의구성과기능 1) 명령어구성 ( 명령어 = 연산자 + 자료 ) 1연산자 (Operation Code) 부 = 명령부 무엇을수행할것인지를나타내는실제수행하기위한명령어 ( 연산자 ) 를표시하는부분으로 OP-CODE라고도한다. 연산자부가 nbit라하면표현할수있는연산자는 가지이다. ( 연산자부가 4비트이면 16가지의연산자를표현 ) 연산자부에주소의결정여부를지정하는모드비트 (0: 직접, 1: 간접 ) 를추가하여사용할수있다. 2 자료부 (Operand) 부 = 주소부 [ 2 ]
연산을수행할자료의실제값또는값이기록된주소를표시한다. 자료부가 16Bit 라하면 의기억장치를주소로지정하여사용할수있다. 3 명령어설계시주의할점 연산자의종류, 주소지정방식, 워드의크기등을감안하여설계한다. 2) 연산자의 4가지기능 1함수연산기능 산술연산 ( 수치연산 ): ADD, SUB, MUL, DIV, 산술시프트 논리연산 ( 비수치연산 ): AND, OR, NOT, XOR, 논리시프트, Rotate, Complement, Clear 2자료전달기능 (CPU <-> 기억장치의정보교환 ) Load: 기억장치에서필요한자료를 CPU로가져오는명령 Store: CPU에있는자료를기억장치에기억시키는명령 Move: 레지스터간에자료를전달하는명령 Push: 스택에자료를저장시키는명령 Pop: 스택의자료를가져오는명령 3제어기능 ( 명령의실행순서변경 ) 무조건 ( 강제 ) 분기명령 : GOTO, JUMP 조건분기명령 : IF, SPA, SNA, SZA 호출명령 : Call ( 하위프로그램호출 ) 반환명령 : Return ( 호출한프로그램으로반환 ) 4 입출력기능 (CPU <-> 입출력장치, 주기억장치 <-> 입출력장치 ) INPUT: 입출력장치의자료를주기억장치에입력하는명령 OUTPUT: 주기억장치의자료를입출력장치로출력하는명령 연산의종류 1)AND(Masking 연산 ) 특정문자또는비트를삭제하는연산으로삭제할부분을 0(Mask Bit) 으로만들어 AND연산한다. 없애고자하는비트를 0으로만든다. [11111111] 에서세번째, 다섯번째를삭제하고자할때모양 1111111 11010111 삭제할비트만 0 으로나머지는 1 11010111 2)OR(Selective-Set) 특정문자또는비트를삽입하는연산으로삽입할부분을 1 로만들어 (1 로세트시킴 ) OR 연산한다. 추가하고자하는비트를 1 로만든다. [00000000] 에서네번째, 여덟번째를삽입하고자할때모양 [ 3 ]
00000000 00010001 삽입할비트만 1 로나머지는 0 00010001 3)XOR(Compare 비교연산 ) 두개의데이터를비교하거나특정한비트를반전시킨다. 비교시 : 두개의데이터를 XOR하여결과값이 1Bit라도 1로되어지면서로다른데이터가된다. 반전시 : 반전시키고자하는데이터와 1을 XOR한다. [11111111] 에서세번째, 다섯번째를반전하고자할때모양 11111111 00101000 반전할비트만 1 로나머지는 0 11010111 4)NOT(Complement 보수 ) 보수를구하는것으로각비트의값을반전시킨다. [10101010] 을반전시키는모양 10101010 01010101 5)Rotate 가장왼쪽또는가장오른쪽비트를반대쪽으로옮기는연산으로문자위치변환에사용된다. [10101011] 을왼쪽에서 Rotate 한모양 1 0 1 0 1 0 1 1 0 1 0 1 0 1 1 1 6) 논리시프트 1 비트씩왼쪽또는오른쪽으로자리이동하는연산으로데이터의직렬전송에사용된다. 밀려나가서비워진자리는 0 으로채운다. [10101011] 을왼쪽으로 Shift 한모양 [ 4 ]
1 0 1 0 1 0 1 1 비워진자리는 0 으로채움 0 1 0 1 0 1 1 0 기존 1 값은밀려나가서없어진다. 7) 산술시프트 실제계산값에이용하는연산으로논리시프트와달리부호비트를생각하여이동하는연산이다. 왼쪽 n비트연산시 : 결과값 = ( 기본자료 ) 오른쪽 n비트연산시 : 결과값 = ( 기본자료 ) 홀수를오른쪽으로한번시프트연산하면 0.5의오차가발생하고, 산술시프트는정수표현식에서만가능한방법이다. 명령어 ( 자료부 ) 의형식 1)0 주소명령어 (0 - Address Mode) Operand부가없이 OP-CODE만으로구성된형식 연산은 Stack에있는 Stack Pointer가지시하는 Operand를이용하여수행하므로스택머신이라고도한다. 스택을사용하여수식을계산할때에는수식을 Postfix( 역폴리시 : 연산자를맨뒤로 ) 로변경해야한다. 스택에서꺼내어처리한결과가다시스택에들어가므로기존의자료가남지않는다. OP-CODE 2)1 주소명령어 (1 - Address Mode) Operand 부가하나로구성된형식으로누산기 (AC) 에사용하는명령어형식이다. OP-CODE OPERAND 1 ( Y = X + Z ) 처리를위한예제모양 (M 은기억장치, AC 는누산기 ) 1 단계 : LDA x; AC <---- M[x] (M 에있는 x 를누산기로전송 ) 2 단계 : ADD z; AC <---- AC + M[z] (M 에있는 z 를현재누산기값과더해서다시누산기로전송 ) 3 단계 : STA y; M[y] <---- AC ( 누산기의값을 M 에전송 ) 3)2 주소명령어 (2 - Address Mode) Operand부가두개로구성된형식으로가장일반적인형식이다. OP-CODE OPERAND 1 OPERAND 2 [OPERAND 1] 은 [OPERAND 1] 의주소또는 [OPERAND1 과 OPERAND2의연산결과값 ] 의주소가된다. 계산결과값이기억장치에도기록되고 CPU에도남아있기때문에기억장치에접근횟수가줄어든다. 연산결과가 [OPERAND 1] 에재기록되므로이전자료가사라진다. 명령어가길어져서프로그램길이가길어진다. 4)3 주소명령어 (3 - Address Mode) Operand 부가세개로구성된형식으로여러개의범용레지스터를가진컴퓨터에사용한다. [ 5 ]
OP-CODE OPERAND 1 OPERAND 2 OPERAND 3 연산 [ 결과값 ] 의주소는 [OPERAND 3] 에기록된다. 연산결과가 [OPERAND 3] 에기록되므로이전자료가유지된다. 다른명령어형식을사용하는것보다프로그램전체의길이가짧아지고기억장치의접근횟수가더줄어든다. 명령어가길어지고하나의명령단위수행을위해최소 4번의기억장치접근을해야하므로수행시간이길다. 주소지정방식 (Addressing Mode) 1) 암시적 (Implied) 주소지정방식 주소를지정하는자료부가없는것으로 0 번지명령에서 Stack 의포인터 (Top) 를이용한다. 2) 즉시적 (Immediate) 주소지정방식 명령어의자료부자체에주소값이아닌데이터값을기록하는방식으로 CPU 가자체에서자료를이용하므로속도가빠르 나명령어의길이에따른데이터값의크기가제한적이다. 3) 직접 (Direct) 주소지정방식 명령어의자료부에사용될데이터값의주소번지를기록하고있는방식으로그주소를이용하여실제데이터값을찾는 다. 4) 간접 (Indirect) 주소지정방식 명령어에나타낼주소가명령어내에서데이터를지정하기위해할당된비트수로표현하지못할때사용하는방식으로명령어의길이가짧고제한적이어도긴주소접근이가능하다. 최소한주기억장치를두번접근하여야지데이터값이있는장소에접근한다. 5) 계산에의한주소지정방식 Operand 부와 CPU 의특정레지스터값이더해져서유효주소를계산하는방식이다. 상대주소 (Relative) 베이스레지스터 (Base Register) 인덱스레지스터 (Index Register) 유효주소 = 명령어의주소부분 + PC 기준점이명령어주소에서상대적으로계산하게된다. 유효주소 = 명령어의주소부분 + Base Register 프로그램의재배치를하는다중프로그램기법에서상대적인변위지정만으로해당위치를지정하기때문에많이사용된다. 명령어의주소부분 + Index Register 6) 주소설계시고려할점 빠르게접근하고주소지정에있어서적은비트를사용하여다양한주소모드를사용하는주소의효율적표현이가능해야한다. 프로그램상에서사용한주소를변경없이실제기억공간내의주소로재배치할수있도록주소공간과기억공간이독립적으로유지되어야한다. 프로그램의효과적인작업을위해포인터관리및기억장치배치의효율이높아야한다. [ 6 ]