부록) 어셈블리어 & 기계어

RDS67_kor·2025년 7월 14일

MCU SW Development

목록 보기
12/13
post-thumbnail

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에 숫자(실제 쓰여있는 값)로 쓰여 있음 -> 기계어

  • MCU SW 개발 실무에서 개발자가 직접 어셈블리, 기계어 코드를 작성하는 경우는 드물다
    C언어로 개발해놓고 빌드하면 컴파일러가 알아서 만들어주기 때문

sw 실행시간, 용량의 제한이 있어 굉장한 최적화가 요구되는 경우 개발자가 직접 어셈블리로 개발할 수도 있음
직접 어셈블리로 개발하지 않더라도 컴파일 최적화 옵션을 바꿨을 때 실제 어셈블리 코드가 어떤 식으로 바뀌는지 파악할 필요가 있음

0개의 댓글