ISA(instruction set architecture)는 번역하면 명령어 집합구조로 말그대로 명령어들의 모음이다.
-앞으로 명령어를 공부하면서 사용할 언어는 MIPS로 32X 32-bit register를 가진다. 앞으로의 설명은 모두 MIPS를 기반으로 한다.
우리는 명령어가 복잡하냐, 단순하냐에 따라 종류를 나눌 수 있는데,
RISC(Reduced Instruction Set Computer)는 단순화된 명령어 구조를 가지고,
CISC(Complex Instruction Set Computer)는 복잡한 명령어 구조를 가진다.
대표적인 예로 RISC에는 MIPS, ARM등이 있고, CISC에는 Intel, AMD등이 있다.
산술연산
산술연산을 할 때에는 기본적으로 3개의 operand(피연산자)가 필요하다. 두개는 계산할 sources를, 하나는 계산결과를 저장할 destination 용도로 사용한다.
예) c = a + b
위의 식을 MIPS 코드로 표현해보면
add c, a, b 가 된다.
이렇게 연산에 필요한 operand는 세가지로 나눌 수 있다. 크게 register를 사용하는 register operand와 main memory를 사용하는 memory operand, 상수와 같이 저장하지 않고 바로 사용하는 immediate operand로 나눌 수 있다.
*register는 메모리지만 메인메모리가 아닌 CPU에 존재한다. 따라서 메인메모리보다 더 빠르게 연산할 수 있다는 장점이 있다. 하지만 비용적인 측면 때문에 보통 레지스터는 제한된 개수안에서 사용된다. (여기서 설명하며 쓰이는 MIPS 언어는 32개의 레지스터를 가지고 있다.) register에는 가장 자주쓰는 data를 위주로 저장하고, register의 자리가 부족할 경우에 main memory에 저장한다.
Register Operands
register operand는 빠른 연산을 가능하게 하기 때문에 보통 위와같은 산술연산을 수행할 때 사용된다.
32개의 register로 주소를 표현할 때는 2의 5제곱 만큼의 주소를 나타낼 수 있으므로 5bit를 이용해서 표현할 수 있다.
$t0, $t1,..., $t9 -> 앞의 달러 표시는 register를 의미하는 기호이고, t는 temporary를 뜻하며 임시로 사용할 레지스터를 말한다.
$s0, $s1,..., $s7 -> s가 save를 뜻하며, 프로그래머가 지정한 변수를 말한다.
Memory Operands
memory operand는 보통 Arrays, structures, dynamic data와 같은 복합 데이터를 다룰 때 사용한다. 이와 같은 데이터들은 레지스터에 담기에는 크기가 크므로 메인메모리에 저장한 후, 필요할 때 불러와서 사용한다.
Load-> 메모리에서 레지스터로 데이터를 가져온다. (MIPS: lw)
Store-> 레지스터에서 메모리로 데이터를 저장한다. (MIPS: sw)
메모리에서의 주소는 4byte(32bit)단위로 이루어져 있고, 해당 단위를 word라고 한다.
Immediate Operands
상수를 계산 할 때는, 구지 register나 memory에 넣은 후 계산 할 필요가 없기 때문에 바로 연산하는 경우를 말한다.
보통 연산자 이름에 i를 붙여서 표현한다.
ex) addi $s2, $s1, 5
다음은 MIPS명령어의 format에 대해 다뤄보겠다.
'전공과목 정리 > 컴퓨터구조론' 카테고리의 다른 글
MIPS의 명령어 구조(format) : I-format (0) | 2021.05.02 |
---|---|
MIPS의 명령어 구조(format) : R-format (0) | 2021.04.19 |
CPU 성능 계산하기 (0) | 2021.03.29 |