Day 5 - ARM7(Assembly)

2025. 2. 28. 13:48·IDEC 교육/Embedded C

ARM7 Reference
해당 링크에서 레퍼런스 파일을 받을 수 있다.
ARM7 Quick Card
해당 링크에서 짧게 요약된 버전을 받을 수 있다.

현재 Keil과 Segger 툴을 사용중이고, Assembly는 Segger Studio를 사용중이다.

C와 Assembly 동시 사용

main.c에서 assem.s라는 assembly 파일에 정의된 함수를 불러와서 쓸 수 있는데
DoAdd라는 함수를 assembly에서 정의하여 불러와서 사용하는 예시이다.

main.c

#include <stdio.h>
#include <stdlib.h>

extern int DoAdd(int, int);

int main(void) {

  printf("Program Started\n");

  int a = DoAdd(3, -1);
  printf("Add: %d\n", a);

  printf("Program Ended\n");
  return 0;
}

assembly.s

    .global DoAdd
    .align 4

DoAdd:
    adds r0, r0, r1
    mov  pc, lr

다음 코드를 자세히 살펴보면, 우선 extern int DoAdd(int, int)로 C파일 외부에 정의된 함수를 선언한다.
그 다음 main을 보면 DoAdd(3, -1);에서 3과 -1을 매개변수로 넘겨주게되는데
그러면 이 3과 -1은 어디에 저장이 될까?
매개변수들은 r0, r1, r2, r3 레지스터에 차례로 4개까지는 전달해주고
그 이상은 Stack에 넣어서 전달한다.
따라서 현재 Assembly에서 r0와 r1에 저장된 3과 -1을 연산 후에 다시 r0에 저장한다.
return값은 r0에 저장하여 전달해주기 때문이다.
마지막 pc(Program Counter)에 lr(Link Register)값을 전달하며 기존의 C로 복귀하게 된다.

Summary

정리하자면 C에서 Assembly를 호출하면 레지스터에 매개변수를 넣어서 전달하며, Return 값은 r0에 넣어서 전달하게 된다.

저작자표시 비영리 변경금지 (새창열림)
'IDEC 교육/Embedded C' 카테고리의 다른 글
  • Day 4 - Memory Endian
  • Day 3 - 외부 변수 및 함수 참조
  • Day 3 - Structure
  • Day 3 - Function Pointer
Zi_Yoon
Zi_Yoon
머리 속에 정리하는 곳 <전자공학>
  • Zi_Yoon
    ZY_repo
    Zi_Yoon
  • 전체
    오늘
    어제
    • 분류 전체보기 (70)
      • HDLBits (25)
        • Verilog (19)
        • Circuits (4)
        • Verification (0)
      • IDEC 교육 (1)
        • Embedded C (13)
        • Verilog HDL (8)
      • Hardware (8)
        • RISC-V Project (1)
        • Computer Architecture (0)
        • AMBA (2)
        • FPGA (0)
        • 논문 읽기 (1)
        • ETC. (4)
      • 42서울 (13)
        • 리눅스 (12)
        • 네트워크 (1)
      • 생각 (1)
      • 취업 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    AppArmor
    embedded
    verilog
    QUARTUS
    IDEC
    AXI4
    charater
    lsblk
    fpga
    AMBA
    signal trap
    vm
    hdlbits
    비대칭 키
    c
    RISC-V
    research rabbit
    pointer
    fucntion
    ARM
    세션 키
    bit-wise and
    ssh
    Keil
    APT
    verilator
    debian
    axi
    보안 쉘
    centos
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Zi_Yoon
Day 5 - ARM7(Assembly)
상단으로

티스토리툴바