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

로드맵

펌웨어 · 과목 10

기계어와 어셈블리

하드폴트가 났을 때, 최적화가 코드를 바꿨을 때, 결국 봐야 하는 건 기계어입니다.

목표: 리셋 버튼을 누른 순간부터 main()까지 무슨 일이 일어나는지 따라갈 수 있다.

  • 중급난이도
  • 약 2주하루 1시간 기준
  • 8개주제
  • 0개실험실

먼저 볼 과목 컴퓨터구조

지도에서 보기 →
  1. 명령어 한 줄의 정체

    기계어는 CPU가 읽는 숫자이고, 어셈블리는 그 숫자에 붙인 이름입니다.

  2. Thumb 명령어 읽기

    ARM Cortex-M의 MOV, LDR, STR, B, BL을 읽어 봅니다.

  3. 레지스터와 호출 규약

    인자는 r0부터 r3, 돌아갈 주소는 lr, 스택 위치는 sp에 있습니다.

  4. C와 어셈블리 대조

    간단한 C 함수를 디스어셈블해서 한 줄씩 맞춰 보고 최적화 옵션을 비교합니다.

  5. 스타트업 코드

    .data를 RAM으로 복사하고 .bss를 0으로 채운 뒤에야 main이 불립니다.

  6. 링커 스크립트와 섹션

    .text, .data, .bss가 Flash와 RAM의 어디에 놓이는지 정하는 파일.

  7. 벡터 테이블

    초기 스택 값과 인터럽트 처리 함수의 주소가 놓인 표.

  8. 하드폴트 분석

    스택에 남은 레지스터 값으로 어느 줄에서 죽었는지 찾아냅니다.

확인 과제

C 함수 하나를 디스어셈블해 읽기

짧은 C 함수를 컴파일해 어셈블리로 풀고, 각 줄이 C의 어느 부분인지 주석을 답니다.

세 가지에 모두 체크할 수 있으면 다음 과목으로 넘어가도 됩니다. 체크는 이 브라우저에만 저장됩니다.