
MCU에 대해 깊게 공부해보고 싶으면 컴퓨터 구조 과목 자체를 공부해보는 것은 추천
ex) 캐쉬, 파이프라인, MMU, Loader 등
기계어
MIPS(Microprocessor without Interlocked Pipeline Stages)
C언어 -빌드-> 어셈블리어 -fetch-> CPU
MIPS CPU 레지스터 종류
(레지스터: CPU 속에 들어있는 작은 사이즈의 메모리)
zero, $at, $v0, $v1 등 총 32개 (모두 32bit)표시 있으면 레지스터라는 의미
c언어
void main(void)
{
int a = 3;
int b = 4;
int c = 0;
c = a + b;
}
어셈블리어
addi $t0 $0 3 // t0 = a = 3
addi $t1 $0 4 // t1 = b = 4
add $t2 $0 $0 // t2 = c = 0
add $t2 $t0 $t1 // c = a + b
CPU마다 명령어가 사전에 정해져 있음 (서로 다름)
ex) MIPS 명령어: addi $a $b 숫자
8bit AVR CPU 명령어: AIDW $a 숫자
-> 명령어의 길이와 형태도 다름
어셈블리어(코드)는 사실 Flash에 숫자(실제 쓰여있는 값)로 쓰여 있음 -> 기계어
sw 실행시간, 용량의 제한이 있어 굉장한 최적화가 요구되는 경우 개발자가 직접 어셈블리로 개발할 수도 있음
직접 어셈블리로 개발하지 않더라도 컴파일 최적화 옵션을 바꿨을 때 실제 어셈블리 코드가 어떤 식으로 바뀌는지 파악할 필요가 있음