전자계산기: 중앙처리장치, 명령어, 주소지정 방식, 연산
3. 프로세서
3.1 중앙처리장치 CPU (Central Processing Unit)
중앙처리장치의 구성 및 기능 : 제어장치, 연산장치, 레지스터(기억장치), 버스(전달장치)
(1) 제어장치 Control Unit : 주기억장치에 기억된 명령을 꺼내서 해독하고 시스템 전체에 지시신호를 내는 장치
명령코드가 명령을 수행할 수 있게 필요한 제어 기능을 제공
제어장치 구성: 프로그램카운터(PC), 명령어레지스터(IR), 부호기(Encoder), 명령해독기(Instuction Decoder)
(2) 연산장치 ALU (Arithmetic Logic Unit, 산술+논리 연산장치) : CPU에 위치하는 산술논리연산장치. 제어장치 명령에 따라 실제로 연산을 수행하는 장치
가산기 Adder, 누산기 AC(Accumulator), 보수기 Complementor, 데이터 레지스터, 오버플로우 검사기, 시프트 레지스터로 구성
(3) 레지스터 : 중앙처리장치 내부에서 처리할 명령어나 연산 중간 결과값을 일시적으로 기억하는 임시기억장소. 저장용량에 제한은 있으나 속도가 가장 빠름.
- 프로그램 카운터(PC), 명령 레지스터(IR), 누산기(AC), 상태 레지스터, PSWR, 플래그 레지스터, MAR(메모리 주소 레지스터), MBR(메모리 버퍼 레지스터), 인덱스 레지스터, 쉬프트 레지스터, MAJOR STATE 레지스터
1) 프로그램 카운터(PC) : 차기 명령 번지 지시, 분기발생시 PC를 가장 먼저 변화
2) 명령 레지스터(IR) : 현재 실행중 명령 기억, OP코드 명령호출이 IR로 이동
3) 누산기(AC) : 연산장치에 있는 레지스터. 연산결과 일시적 기억, 주소부가 하나뿐인 1주소 명령형식에서 자료 넣어두는데 사용하는 레지스터
4) 상태 레지스터(Status Resister) : 컴퓨터 내부 상태 나타냄
- PSWR : Program Status Word Resister, 시스템 내부 순간순간 상태를 기록하는 PSW를 저장하는 레지스터
- 플래그 레지스터 : CPU 내부에서 방금 행한 연산 결과 상태(0인지, 음수/양수인지, 캐리 및 오버플로우)를 나타내는 플립플롭
5) MAR(메모리 주소 레지스터) : 기억장치를 출입하는 데이터의 번지를 나타내는 레지스터
6) MBR(메모리 버퍼 레지스터) : 기억장치를 출입하는 데이터가 잠시 기억되는 레지스터
7) 인덱스 레지스터 : 어드레스 수정, 서브루틴 연결, 반복 계산 수행 역할을 하는 레지스터
8) 쉬프트 레지스터 : 2배 길이 레지스터. 자료 병렬 전송을 직렬 전송으로 변환
9) MAJOR STATE 레지스터 : CPU가 무엇을 하고 있는지 나타냄
(4) 버스 BUS : 제어버스, 주소버스, 데이터버스(양방향성)
레지스터 간의 데이터 전송 : 직렬보다는 한꺼번에 보내는 병렬이 더 빠르다.
3.2 명령어 (인스트럭션 Instruction) : 연산자 OP 코드 + 자료 Operand
연산자부 : OP코드. 명령어 형식/연산자/자료종류 나타낼 수 있음. 비트수가 n비트일 때 2^n개의 명령어 수행 가능
자료부 : 어드레스 필드(주소부). 어드레스 필드 크기 = 최대 메모리 용량.
연산자부 자료부(주소부)
(OP코드) (Operand)
OP코드 n비트 어드레스필드 n비트
2^n개 명령개수 어드레스필드 크기 = 최대 메모리 용량(2^n x 워드길이)
기출) 명령어 OP코드가 6비트, 어드레스필드 16비트일 때 최대 메모리 용량은? 2^16 = 64K
어드레스필드 크기는 최대 메모리 용량이므로 2^16 = 65536 = 64K 워드
기출) 명령어 길이 16비트, OP코드 5비트, Operand 8비트일 때 연산자 종류 개수는? 2^5 = 32개
연산자부=OP코드. 2^5 = 32개
기출) 명령어 형식(instruction format)이 opcode, addressing mode, address의 3 부분으로 되어 있는 컴퓨터에서
주 기억장치가 1024 워드일 경우, 명령의 크기는 몇비트로 구성되어야 하는가?
(단, op-code는 4비트 이며, addressing mode는 직접/간접 주소지정방식 구분에만 사용한다라고 가정한다.) 15 bit
- 주기억장치 용량(최대 메모리 용량) = 1024워드 = 2^10, 즉 address는 10bit
- op코드 4bit + addressing mode 1bit + address는 10bit의 명령어 구조 = 4+1+10 = 15
연산자 OP코드의 4대 기능 : 함수 연산, 자료 전달, 제어 기능, 입출력 기능
함수 연산 : 중앙처리장치에서 데이터 처리, 산술/논리 연산
자료 전달 : 기억장치(메모리) 내용을 중앙처리장치(레지스터)에 전달 Load, 중앙처리장치(레지스터) 정보를 기억장치(메모리)에 기억 Store, 특정 레지스터 내용을 다른 레지스터로 옮기는 Move, 스택에 자료를 저장/인출하는 Push/Pop
제어 기능 : 프로그램 수행 제어, 무조건 분기 GOTO/JMP, 부프로그램 호출/복귀 Call/Return
입출력 기능 : INP, OUT
단항연산자 Unary Operator : 피연산자가 1개. NOT, Complement, Shift, Rotate, MOVE
이항연산자 Binary Operator : 피연산자가 2개, 4칙연산, AND, OR, XOR 등
인스트럭션(명령어) 설계시 고려사항 : 연산자 종류, 주소 지정 방식, 시스템 단어(WORD) 크기(비트수)
기출) 인스트럭션 설계과정과 가장 거리가 먼 것은?
① 연산자 종류 ② 주소 지정 방식 ③ 기억장치 대역폭 ④ 해당 컴퓨터 시스템 단어
기출) 인스트럭션의 설계 과정에서 고려해야 할 사항이 아닌 것은?
① interrupt 종류 ② 연산자의 수와 종류 ③ 데이터 구조 ④ 주소지정 방식
명령어 형식
Operand 개수에 따라 3주소, 2주소, 1주소, 0주소 명령 형식이 있음
3주소 명령형식 : 연산결과가 Operand 3에 기억, 연산후 입력자료 변하지 않고 보존, 읽는 시간 단축, 프로그램 길이 짧아짐, 단점은 명령어 한개 길이 길어짐, 전체적인 수행 시간 길어짐
OP코드 + Operand 1 + Operand 2 + Operand 3(연산결과 저장)
기출) 3주소 명령어의 장점에 해당하는 것은? - 프로그램 길이가 짧아진다
2주소 명령형식 : 연산결과는 Operand 1에 기억, 명령어 길이 짦음, 여러개의 범용 레지스터를 가진 컴퓨터에서 사용, 계산결과 중앙처리 장치 내에서 직접 시험 가능해 시간 절약, Operand 1 원래 자료 파괴됨
OP코드 + Operand 1(연산결과 저장, 원래 자료 파괴됨) + Operand 2
1주소 명령형식 : 연산결과는 Operand 1에 기억, 반드시 누산기가 필요한 주소지정방식. 하나의 Operand가 누산기 속에 포함되고 연산결과를 항상 누산기에 저장. C = A + B (LOAD A, ADD B, STORE C)
OP코드 + 누산기 Operand 1(연산결과 저장)
기출) 연산결과를 항상 누산기에 저장하는 명령어 형식은? 1주소 명령어
기출) 다음과 같은 주소 명령 방식은? LOAD A, ADD B, STORE C > one-address
0주소 명령형식 : OP코드만으로 구성. 자료 주소 지정 필요 없음. 모든 연산은 Stack에 있는 자료를 이용해 수행
기출) 0번지 명령형을 갖는 컴퓨터 구조원리는? > stack architecture
OP코드 => 스택으로 연산 수행
스택(Stack) : 가장 나중에 삽입된 자료가 가장 먼저 삭제되는 방식(LIFO), 0주소명령형식 뿐 아니라 서브루틴(부프로그램) 호출시 복귀주소 저장, 인터럽트 발생시 복귀주소 저장, 재귀프로그램 순서제어, 수식을 미리 처리되는 순서인 역 Polish형 산술식 처리에 씀, 재귀프로그램(Recursion), 원래 자료가 남지 않음, Instruction cycle Time이 가장 짦은 명령어 형식
이터레이션(Iteration) : 해당 루틴이 정확한 결과를 산출할 때까지 계산작업 반복 수행
기출) 이터레이션에서 데이터를 얻는 방법은? 그 루틴에서 데이터를 얻는다
디버깅에 필요한 것 : 트레이서, 덤프
트레이서(Tracer) : 프로그램 실행과정을 출력하는 프로그램. 기계어 명령이 하나씩 수행될 때마다 프로그램 카운터, 스택, 변수, 레지스터 내용 출력
덤프(Dump) : 주기억장치 내용을 그대로 출력. 정적 덤프/동적 덤프 있음
기출) 프로그램 디버깅에 필요하지 않은 것은?
① tracer ② static dump ③ dynamic dump ④ swap
서브루틴(부프로그램) : 반복적으로 사용되는 코드를 별도 프로그램으로 작성하여 필요할 때 호출하는 프로그램
매크로 : 반복 코드를 삽입하여 해당 프로그램 어디서든 호출할 수 있는 코드 모임. 프로그래머가 어셈블리어로 프로그램을 작성할 때 반복되는 연산을 효과적으로 프로그램하기 위해 필요
기출) 프로그래머가 어셈블리어로 프로그램을 작성할 때 반복되는 연산을 효과적으로 프로그램하기 위해 필요한 것은? 매크로
기출) 다음중 부프로그램과 매크로의 공통점은? 여러 번 중복되는 부분을 별도로 작성하여 사용한다
3.3 주소지정 방식 (Addressing Mode)
프로그램이 수행되는 동안 사용될 데이터의 위치를 지정하는 방식
주소 설계시 고려사항 : 표현의 효율성, 사용의 편리성, 주소공간과 기억공간의 독립성
기출) 주소 설계시 고려해야할 점이 아닌 것은?
가. 주소를 효율적으로 나타낼 수 있어야 한다.
나 주소 공간과 기억공간을 독립시킬 수 있어야 한다.
다. 전반적으로 수행 속도가 증가될 수 있도록 해야 한다.
라. 주소 공간과 기억 공간은 항상 일치해야 한다.
주소지정 방식의 종류 : 암시적(Implied), 즉시적(Immediate), 직접(Direct), 간접(Indirect), 계산
1) 암시적 주소지정 방식 (Implied Addressing Mode)
주소를 지정하는 필드가 없는 0번지 명령어에서 Stack의 Top 포인터가 가리키는 Operand를 암시하여 이용
OP코드 > 스택(Stack)
2) 즉시적 주소지정 방식 (Immediate Addressing Mode)
Operand 부분에 데이터를 기억하는 방식, 메모리 참조 0, 레지스터 값 초기화에 사용, 별도 기억장치 없이 CPU에서 곧바로 자료 이용, 실행속도 가장 빠름
OP코드 + 실제 데이터
기출) 다음 주소지정 방식 가운데 속도가 가장 빠른 것은?
라) Immediate Addressing Mode
3) 직접 주소지정 방식 (Direct Addressing Mode)
명령어 주소 부분에 주소 데이터 있음, 메모리 참조 1, 명령어 길이에 영향받으므로 표현 데이터 값의 범위가 제한적
OP코드 + 주소 > 데이터
4) 간접 주소지정 방식 (Indirect Addressing Mode)
명령문 내 번지는 실제 데이터 위치를 찾을 수 있는 번지가 들어있는 장소를 표시, 메모리 참조 2, 인스트럭션 길이 짧고 제한되어도 이것을 이용해 긴 주소를 찾아갈 수 있음
OP코드 + 주소 > 주소 > 데이터
5) 계산에 의한 주소지정 방식
Operand부와 CPU의 특정 레지스터 값이 더해져서 유효 주소 계산
1) 절대주소 지정방식(Absolute Addressing Mode) : 기억장치 고유 번지
2) 상대주소 지정방식(Relative Addressing Mode): 명령어 자신의 기억장소를 기준으로 데이터 위치를 지정
유효주소 = 명령어 주소부분 + Program Counter
3) 베이스 레지스터 지정방식 : 프로그램 재배치(Relocation)에 사용, 다중 프로그래밍 기법에 사용, 베이스 레지스터(명령이 시작되는 최초의 번지를 기억하고 있는 레지스터)
유효주소 = 명령어 주소부분 + 베이스 레지스터
4) 인덱스 레지스터 지정방식 : 유효주소 = 명령어 주소부분 + Index Resister
리엔트란시(Re-entrancy)
한 사람 이상의 사용자들이 동일한 명령어를 동시에 실행할 수 있도록 제공.
인덱스 레지스터와 간접번지 방법(Indirect addressing)으로 이용
기출) 명령어의 주소 부분과 PC 부분의 값을 더해서 유효 주소를 결정하는 주소 모드는?
나) Relative Addressing Mode
기출) 상대지정 주소방식을 사용하는 컴퓨터에서 PC의 값이 2FA50(16)이고 변위값이 0B(16)일 때 실제 데이터가 들어있는 메모리의 주소는 얼마인가? 라) 2FA5B(16)
2FA50 + 0B = 2FA5B (16)
3.4 연산
논리연산 : 0과 1 중 하나의 값을 취하는 비수치적 연산. AND, OR, NOT, COMPLEMENT, SHIFT, MOVE, ROTATE...
산술연산 : 연산 대상을 수치 데이터로 간주하고 행하는 수치적 연산. ADD, SUBTRACK, MULTIPLY, DIVIDE, 산술 SHIFT
AND (Masking Operation) 논리곱
비수치 데이터에서 마스크를 이용하여 불필요한 부분 제거하기 위한 연산(삭제할 부분을 0과 AND시켜 삭제)
OR (Selective Set) 논리합
특정 비트에 1을 세트(set) 시키는 연산, 두 개의 데이터를 섞거나 일부에 삽입하는 연산
XOR (Compare, 비교)
비교 동작 논리 연산, 연산에서 overflow 발생 검출에 사용하는 논리게이트, 자료의 특정 비트 반전
NOT (Complement, 보수)
각 비트의 값 반전, 보수를 구할 때 사용
논리 Shift : 데이터 직렬 전송, 1Bit씩 자리 이동
ROTATE : 문자 위치 변환시 사용
산술 Shift
부호 비트(Sign)를 제외한 나머지 비트만 Shift
왼쪽으로 n Bit Shift : 원래 자료에 2를 곱한 값과 같음
오른쪽으로 n Bit Shift : 원래 자료를 2을 나눈 값과 같음
기출) 8비트로 구성된 레지스터 7번의 내용이 11011001일 때 SRA 7, 3을 실행하고 난 후의 레지스터 7의 내용은?
(레지스터 7번을 우측으로 산술이동 3회 수행) 다) 1111 1011
1101 1001에서 맨 왼쪽 1이 부호 비트(음수) : 부호비트 1 + 101 1001
오른쪽으로 3회 이동하면 1XXX 1011
X는 패딩값으로 채우며 부호와 절대치는 0으로 패딩, 1의 보수와 2의 보수는 1로 패딩을 한다.
부호와 절대치로 패딩한 경우 1000 1011이 나오고, 보수로 패딩하면 1111 1011이 된다.
정답) 다) 1111 1011
기출) 74라는 수가 8비트의 레지스터에 기록되어 있다. 그 중 가장 좌측비트는 부호를 나타내고 나머지 7비트는 절대값을 나타낸다. 이 레지스터를 우측으로 한 비트 산술적 이동을 한 결과는? 다) 37
양수이므로 부호비트 0, 74를 2진수로는 1001000이므로 8비트에 0100 1000이 된다.
우측으로 1비트 산술 이동을 하면 0010 0101 이기 때문에 37이 된다.
하지만 원래 자료 74를 2로 나눠도 37이 된다. <-- 간단 공식