그라운드 임베디드 EN 유튜브 구독

노트 / 기계어와 어셈블리

명령어 한 줄의 정체

기계어는 CPU가 읽는 숫자이고, 어셈블리는 그 숫자에 붙인 이름입니다. C 한 줄이 몇 개의 숫자가 되는지 봅니다.

GROUND EMBEDDED · 정리 노트기계어 01명령어 한 줄의 정체 1C: x = x + 1; 2어셈블리: adds r3, r3, #1 3기계어: 0x1C5B

Flash에 저장된 펌웨어는 결국 숫자의 나열입니다. CPU는 이 숫자를 하나씩 읽어 "어떤 연산을, 어떤 레지스터로" 할지 해석합니다.

C:          x = x + 1;
어셈블리:    adds r3, r3, #1
기계어:      0x1C5B

16비트 숫자 0x1C5B 안에 "더하기, 즉시값 1, 레지스터 r3에서 r3로"가 비트 단위로 들어 있습니다. 어셈블러가 이름을 숫자로, 디스어셈블러가 숫자를 이름으로 바꿉니다.

Ca = b + 1;어셈블리ADDS r0, r1, #1기계어16비트 숫자CPU가 실행
C 한 줄이 CPU가 읽는 숫자가 되기까지.

명령어 종류

옮기기MOV, LDR, STR계산ADD, SUB, AND비교CMP분기B, BL, BX
명령어는 크게 네 가지 일을 합니다.
종류 예 하는 일
데이터 처리 add, sub, and, lsl 레지스터끼리 계산
메모리 접근 ldr, str 메모리 ↔ 레지스터
분기 b, bl, bx 실행 흐름 이동
비교 cmp 플래그 설정

ARM은 로드-스토어 구조라서 메모리 값을 바로 계산하지 못하고, 반드시 레지스터로 가져와(ldr) 계산한 뒤 다시 저장(str)합니다. C의 count++ 한 줄이 명령어 세 개가 되는 이유입니다.

왜 알아야 하나

하드폴트 주소를 따라가거나, 인터럽트와 공유하는 변수의 경쟁 조건을 이해하거나, 제어 루프 시간을 줄일 때 컴파일러가 만든 명령어를 봐야 합니다.

영상으로 이어 보기공부법과 진로 시리즈 15편2025 임베디드 프로그래밍 공부 순서 | 공부 방법 | 로드맵PROJECT COURSE레지스터 설정을 실제 보드에서 해 보고 싶다면밸런싱 로봇 하나를 요구사항, 회로와 PCB, 펌웨어, 앱까지 실무 순서대로 만드는 강의입니다. 10파트 165강.강의 살펴보기 →FREE PDF무료 전자책 3권 받기이 주제를 한 권으로 이어서 읽고 싶다면. BLDC 모터 제어, 직렬통신, 센서를 책 분량으로 묶었습니다. 이메일만 남기면 바로 받습니다.무료로 받기 →