명령어의 집합 구조
: CPU는 명령어를 수행하는 녀석이였다!(이전에)그렇다면 명령어란 무엇이고 무엇이 있을까?
1. 명령어란?
: 주소 + 동작(operand + operation)이다명령어의 구성요소
: 1) operand(동작의 대상)2) opcode(=operation code, operand가 결정되는 방법)
3) mode (operand가 결정되는 방법을 나타내는 부분=> 주소의 수)
따라서, 명령어의 갯수는 operand의 수 * operation * mode 개 존재한다.
예를 들어, 각각 10개씩 존재한다면 10 * 10 * 10 = 1000개의 명령어가 존재하게 된다.
그렇다면 명령어가 많으면 다양한 처리를 할 수 있게되니 많을수록 좋은 것일까?
--> NO!, CPU가 가질수 있는 자원은 한정되어져있다. 많은 명령어를 해석하기 위해
decoder가 복잡해지면 다른 장치들이 가질 수 있는 자원들이 줄어들게 된다.
예를 들어, register가 커지면 CPU의 속도가 빨라지는 한편 decoder의 영역이 줄어들어
처리할 수 있는 명령어의 갯수가 줄어들게 된다.
이러한 딜레마 때문에 2가지 유형의 CPU가 등장하게 된다. ==> RISC, CISC
RISC는 명령어의 사용빈도를 고려하여 명령어의 처리를 결정하는데, 사용빈도가 높으면 자신이 처리하고 사용빈도가 적으면 compiler에게 자신이 알아들을 수 있는 명령어로 바꿔서 알려달라고 요청한 뒤 처리함으로 decoder를 보다 간단하고 적은 명령어를 사용하게 된다. 이를 통해 명령어가 적음에도 불구하고 CISC와 비슷한 처리능력을 낼 수 있다. 게다가 RICS는 CISC에 비해 간단한 명령어의 조합으로 이뤄져 cycle이 더 적고 덜 복잡하며 속도가 빠르다. 그리고 간단한 명령어들를 주로 사용하므로 길이가 고정되어 있어 이들의 조합으로 프로그래머는 불필요한 코드나 낭비되던 사이클을 줄일 수 있게 되므로 핸드폰같은 작은 전자기기에서 주로 사용하게 된다.
반면, CISC는 모든 명령어를 자신이 처리하여야 함으로 decoder가 복잡하고 속도가 느리며 더 많은 사이클을 가지게 된다. 단, 복잡한 명령어들을 RISC보다 더 많이 사용할 수 있어 명령어들의 길이가 가변적이지만 하나의 명령어를 통해 많은 일을 한 번에 해결할 수 있으므로 주로 테블릿에서 사용하게 된다.
2. 주소의 수
: 명령어를 표현하는 주소의 수(mode)의 종류는 4가지가 있다.1) 3-주소 명령어 : A <- B - C
2) 2-주소 명령어 : B <- B + C
3) 1-주소 명령어 : B <- (B)'
4) 0-주소 명령어 : 스택연산 or 큐연산
댓글 없음:
댓글 쓰기