-
컴퓨터일반 - 4. 명령어컴퓨터+a/컴퓨터일반 2017. 4. 13. 22:44
<명령어>
자료 - 기본자료 - 부동소수점수:실수
- 고정소수점수:정수, 논리자료, 문자자료, 주소자료
- 추상자료 = 객체 : 자료, 메소드(자료를 이용할 수 있는 기능)
명령어는 보통 연산자(operation)와 그 연산에 사용되는 대상체(operand, 자료)로 되어 있다.
operation
operand
동작부분 대상체
대상체 - 없을수도 : 두개 다 생략
- 0 어드레스 : 묵시적 장소-스택
- 1 어드레스 : 하나 생략(묵시)-누산기
- 2 어드레스 : 제대로 된(명시)-연산 결과 하나에 저장, 원본 깨지게 됨
- 3 어드레스 : 계산할 2가지, 결과 1가지, 원본 깨지지 않고 연산가능
대역폭 - 컴퓨터의 성능을 표시하는 요소, 1초 동안에 전달하거나 받아 들일 수 있는 비트 수
풀워드 - CPU가 한번에 처리할 수 있는 크기 (하프워드/더블워드)
즉석데이터, 직접주소, 간접주소, 상대주소(계산에 의한 주소->PC(내가 있는 번지))
1. 연산자 : 동작 코드 부분, n bit면 최대 2ⁿ개의 서로 다른 동작을 실행할 수 있다.
(1) 연산기능 - 산술연산 : 덧셈, 보수(complement, 뺄셈), shift(곱셈 및 나눗셈)
- 논리연산 : AND, OR, NOT, XOR
(2) 제어기능 - System 제어
- Program 제어 : 조건 jump와 무조건 jump
(3) 전달기능 - Load : 메모리 -> CPU(보조기억장치-> 주기억장치)
- Store : CPU -> 메모리
(4) 입출력기능
2. 명령어의 형식
operation code
mode
operand
operation code : 수행해야 할 동작을 명시한 부분
mode : operand가 결정되는 방법을 나타내는 부분(어떤 방식의 주소인지 알려주려고)
operand : operation code가 수행해야 할 대상체를 지정
(1) operation code : 이 크기는 해당 system에서의 사용 가능한 명령어의 개수에 의해 결정 예) 200가지 명령인 경우 200=2^8 8bit필요
(2) operand : operation이 수행해야 할 내용. 주소인 경우 주소bit크기는 메모리 용량, register의 개수와 관련 예) 메모리용량이 16Mbyte = 2^24->24bit 주소 필요, register의 개수가 16이면 2^4->4bit가 필요하다
컴퓨터는 3가지 형식중 하나의 CPU 구조를 가지고 있다 - 단일 누산기 구조(1 Address), 범용 레지스터(2~3 Address), 스택구조(0 Address)
2.1 Operation
디지털 컴퓨터의 기본 구조
PC
↓
MAR ----------> Memory
↑ ↕
IR <---------- MBR
↓ ↕↕
Decoder ㅁ ㅁ .... ㅁ GR
↓
------------> ALU(연산장치)
컴퓨터 메모리에 저장된 명령어의 일부로 컴퓨터가 특별한 동작을 수행하도록 명령하는 2진코드
제어장치가 메모리로부터 처리하고자 하는 명령을 받아서, 동작코드 비트를 해석하여(decode) 마이크로 동작을 실행하는 제어함수를 발생시키는 부분
(1) 마이크로 오퍼레이션
레지스터에 저장된 데이터를 가지고 실행되는 동작, 하나의 클록펄스동안 실행되는 기본 동작
마이크로 사이클 타임(마이크로 오퍼레이션 수행에 필요한 시간)
① 동기 고정식 : 수행시간이 유사할 때 제어가 간단, 유사하지 않으면 CPU낭비(하나의 시간으로 통일)
② 동기 가변식 : 수행시간이 유사한 것끼리 모아서 몇개의 군을 형성(정수배), CPU시간 효율적으로 사용, 제어가 복잡
③ 비동기식 : 동기가변식의 극단적인 형태, 모두 서로다른 사이클, 각자 필요한만큼
그룹안에서는 동기 고정식, 그룹끼리는 비동기식
(2) 레지스터 메모리 : 잠시 기억하는 장소, 플립플롭(S RAM, 용량은 작고 속도 빠르게(cf 주기억장치는 D RAM)) 회로로 구성
① 프로그램 카운터(PC:Program Counter) : 로케이션카운터(LC), 다음에 수행할 명령어의 번지
② 어큐뮬레이터(Acc:Accumulator) : 피가수 및 연산의 결과를 일시적으로 기억하는 레지스터, 1 Address방식에서 꼭 필요
③ 기억 레지스터(MBR:Memory Buffer Register) : 기억장치에 출입하는 자료를 기억
④ 번지 레지스터(MAR:Memory Address Register) : 메모리의 번지를 기억
⑤ 명령 레지스터(IR:Instruction Register) : 명령어를 기억, 자료의 주소
⑥ 범용 레지스터(GR:General Purpose Register) : 사용자가 정수계산, 주소, 논리연산, 문자 등의 다목적으로 활용
⑦ 부동 소수점 레지스터(Floating Point Register) : 부동 소수점 수(실수) 연산에 사용, 더블 워드 크기
* 메모리 용량이 4Mbyte, word 크기가 32bit라고 했을 때
PC, MAR은 주소와 관계있으므로 메모리의 용량과 관계가 있다 - 22bit필요
MBR, IR, ACC는 word의 크기와 관계가 있다 - 32bit 필요
(3) 메이저 스테이트(Major State)
CPU가 무엇을 하고 있는지를 나타내는 레지스터 - 메이저 스테이트 레지스터
종류 - Fetch cycle(인출주기) : 명령어가 나온다(꼭)
Indirect cycle(간접주기) : 명령어의 주소가 간접주소이기 때문에(할수도 안할수도)
Execute cycle(실행주기) : 자료가 나온다(꼭)
Interrupt cycle : 실행주기에 뭔가 잘못됐을 때 서비스 해주기 위한 사이클(할수도 안할수도)
4가지 동작을 구분하기 위해 2bit와 R flip-flop필요
F R
0 0 Fetch cycle -> read instruction
0 1 Indirect cycle -> read address of operand
1 0 Execute cycle -> read operand
1 1 Interrupt cycle
① Fetch cycle - 주기억 장치로부터 명령어를 읽어 CPU로 가져오는 주기
MAR <- PC : 실행할 명령어의 번지를 번지 해독기로 전송
MBR <- M(MAR), PC <- PC + 1 : 해당 번지의 명령어를 MBR로 전송하고 다음에 실행할 명령어의 번지를 지시하게 함
IR <- MBR : 명령 레지스터로 전송
R <- 1 : 간접주기로
F <- 1 : 실행주기로
② Indirect cycle - Operand가 간접주소일 때 operand가 지정하는 곳으로부터 유효주소를 읽기 위해 기억장치에 한번 더 접근하는 주기
MAR <- MBR(ADDR) : 명령어의 주소부분을 번지 해독기에 전송
MBR <- M(MAR) : Operand의 번지를 읽음
No operation
F <- 1, R <- 0 : 실행 주기로 감
③ Execute cycle - 기억장치에 접근하여 자료를 읽어 연산을 실행하는 주기, 명령어마다 동작이 다르다
MRI(메모리 참조 명령), RRI(레지스터 참조 명령), IOI(입출력 명령) 등이 있다
명령어 처리 속도 RRI > MRI > IOI
명령어 종류의 수 RRI > MRI > IOI
㉠ AND 명령 : 메모리 내용과 Accumulator의 내용을 비트 AND 논리 동작을 취하여 Accumulator에 저장
㉡ ADD 명령 : 메모리 내용과 Accumulator의 내용을 더한 후 최종 carry는 E flip-flop에 최종합은 Accumulator에 저장하는 명령
㉢ LDA 명령 : 메모리의 내용을 Accumulator에 전송, 그냥 자료가 나오는 과정도 덧셈기를 통하여 나옴
MAR <- MBR(ADDR) : 유효주소를 전송
MBR <- M(MAR), AC <- 0 : operand를 읽음, AC를 clear
AC <- AC + MBR : AC로 load 함
F <- 0 : Fetch cycle로 간다(F는 1이었다. 실행 cycle)
㉣ STA 명령 : Accumulator의 내용을 메모리에 전송
㉤ BUN 명령 : 프로그램의 흐름을 지정된 유효번지로 옮김(jump), PC값 바꿔주는
㉥ BSA 명령 : Sub Program으로 분기하고 return 번지를 저장, 고급언어 call, 0번지나 stack에 보관
㉦ ISZ 명령 : 조건에 따라 수행 문장을 결정 짓는 명령
④ Interrupt cycle - 현재 실행중인 명령이 중단되는 상태, cycle을 제어하기 위한 플립플롭 F와 R이 각각 1, 1인 경우
메모리의 0번지는 return address를 기억시키기 위한 장소로, 메모리 1번지는 프로그래머가 저장한 분기번지(서비스를 받기위해 갈 번지)를 정하기 위한 영역으로 사용
단일 Interrupt - 되돌아갈 번지 1개, 메모리 0번지
다중 Interrupt - 되돌아갈 번지 여러개, Stack
MBR <- PC, : return address 값 buffer에 기억
PC <- 0 : return address값이 기억될 위치 선정(0번지)
---------------------------------------------------------------------
MAR <-PC, : 기억될 위치 해독
PC <- PC + 1 : interrupt로 분기할 번지 선정(1번지)
---------------------------------------------------------------------
M(MAR) <- MBR, IEN(다른사람이 인터럽트 못걸게 막아줌) <- 0 : 0번지에 return address 값 기억
2.2 Operand : 대상체, 자료
addressing mode에 의해 operand가 지정되는 방법이 결정
(addressing mode기법은 포인터, 인덱싱, 프로그램 리로케이션 등의 편의를 사용자에게 제공함으로써 프로그래밍 하는 데 융통성을 주거나 명령의 번지필드의 비트수를 줄이는 목적으로 사용된다.)
(1) Operand의 수에 따른 분류
① 0-번지 명령어 형식 : 명령어에 operand가 없는 형식, 처리 대상이 묵시적으로 정의, stack의 top이 operand
operation code
반드시 Stack 메모리 필요, 수식을 postfix 형식으로 바꿔야함
스택 메모리는 LIFO구조(cf 큐는 FIFO) - SP(stack pointer)필요(스택의 번지를 지정하기위해)
PUSH(메모리에 넣는, SP 1증가), POP(빼내는, SP 1감소)
EMPTY가 1인경우에 POP - underflow, FULL이 1인경우 PUSH(overflow)
* 수식표현 3가지(연산자 위치)
infix : A + B(괄호 있거나, 없거나, 고급언어에 쓰임)
prefix : + A B(괄호 없음(연산이 되는 순서대로 쓴 것이기 때문), 컴퓨터, 연산자가 앞(여는 괄호))
postfix : A B +(괄호 없음, 공학적계산, 빠름, Stack으로 하고 싶으면, 연산자가 뒤(닫는 괄호))
cf) 되부름 - 자기가 자기자신과 똑같이 생긴것을 부르는 것, 되돌아갈 번지 Stack에 작성, 되부름 너무 많이 하면 Stack overflow
② 1-번지 명령어 형식 : 모든 자료가 누산기(accumulator)에 의해 처리
operation code
operand
③ 2-번지 명령어 형식 : 실제 컴퓨터에서 가장 많이 사용, 원본이 깨진다
operation code
1st operand
2nd operand
④ 3-번지 명령어 형식 : 원시자료가 잃어버리지 않고 보존된다, 명령어를 나타내기 위한 bit수가 많이 필요
operation code
1st operand
2nd operand
3rd operand
(2) Operand가 어디있는가에 따른 분류
① Immediate operand : Operand가 명령어 자체내에 있다, 주소가 아니라 실제 값이 기억되어 있음
② Direct operand : Operand가 유효번지 의미
③ Indirect operand : Operand field가 가리키는 번지에 유효번지
④ Indexed operand : operand부분과 Index register의 값이 더해져서 유효번지가 결정
⑤★ Relative operand(상대주소) : 프로그램 카운터(PC)가 명령어의 operand부분과 더해져서 유효번지 결정
Implied mode 1이상 생략, operand가 묵시적으로 정의된 명령어, 0-번지와 1-번지 명령어 형식은 implied mode 명령어 형식, 스택과 Accumulator가 묵시적으로 정의
3. 명령어의 종류
3.1 데이터 전송 명령
LOAD 명령 : 메모리로부터 레지스터로의 전송 명령
STORE 명령 : 레지스터로부터 메모리로의 전송 명령
MOVE 명령 : 레지스터와 레지스터 사이의 전송 명령
IN, OUT 명령 : 메모리와 입출력 장치간의 전송 명령
PUSH, POP 명령 : 레지스터와 스택 메모리 사이의 전송 명령
3.2 데이터 처리 명령
(1) 산술명령
INC(메모리나 레지스터 내용 1 증가) / DEC(메모리나 레지스터 내용 1감소) / ADD, SUB, MUL, DIV(고정소수점수, 부동소수점수, BCD수에 대해 사칙연산)
(2) 논리 연산 및 비트 연산
CLEAR(모든 bit 0으로), COMPLEMENT(1의보수가 되도록), AND(특정 bit를 0으로, MASK), OR(특정 bit를 1로), XOR(선택적으로 1로 만듬)
(3) 시프트 명령
3.3 프로그램 제어 명령
4. 마이크로 명령 : 단일 레지스터의 상태 천이를 발생시키는 제어기구
(1) 수평 마이크로 명령 : 해독 필요 없음, 속도 빠름, 동시에 여러기능 수행
마이크로 명령의 한 비트가 하나의 마이크로 동작 관할, 여러개의 하드웨어 구성요소 동시에 동작(병렬처리)
그러나 제어워드 비트가 충분히 활용X, 워드가 길어서 비용 많이듬
(2) 수직 마이크로 명령 : 우리가 일반적으로 쓰는, 200가지 -> 8bit로 표현 : 압축 -> 해독필요
디코딩회로 필요, 한개의 마이크로 동작밖에 수행못함
(3) 나노 명령 : 혼합
5. 프로세서의 종류
클록 속도는 점차로 커지도록, CPI는 점차 낮추어져 가도록 발전되어야 함
① CISC : 초기 컴퓨터, 마이크로프로그램 제어방식, CPI 1~20, 레지스터 수가 적어서 문제 생김
② RISC : 대부분, 하드 와이어드 제어 방식, CPI 1~2, 조합해서 2 기능할 수 있는 것을 제거해버림
③ 슈퍼 스칼라 RISC : 레지스터 여러개, 모든 계산을 레지스터가, 처리속도 빠름, RISC 구조를 병렬처리가 가능하게
④ VLIW : 수평 마이크로 명령 형식과 슈퍼 스칼라 RISC 구조의 합성방식
⑤ 벡터 프로세서 : 벡터연산을 수행하기 위해 만들어진 컴퓨터 구조
⑥ 기호 프로세서 : 음성인식, 패턴인식, 이론증명, 전문가 시스템등의 인공지능 분야에 적합
[출처] 유레카 컴퓨터일반 - 이재환, 이정식
교재를 개인 공부 목적으로 정리한 것입니다. 틀린부분이 있을 수 있습니다.
문제가 될 시 알려주시면 바로 조치하겠습니다.
무단배포나 복사는 금지합니다.
728x90'컴퓨터+a > 컴퓨터일반' 카테고리의 다른 글
컴퓨터일반 - 6. 입출력 (0) 2017.04.30 컴퓨터일반 - 5. 기억장치 (0) 2017.04.28 컴퓨터일반 - 3. 연산 (0) 2017.04.07 컴퓨터일반 - 2. 자료표현 (0) 2017.04.06 컴퓨터일반 - 1. 논리회로 (0) 2017.04.05