본문 바로가기
코스웨어/15년 스마트컨트롤러

20151129 / ARM 어셈블리_2- 남수진

by 알 수 없는 사용자 2015. 11. 29.
728x90
반응형

ARM(126p ~ 161p)

Image

  • APCS(ARM Procedure Call Standard)
    • CPU에 따라 함수 호출 규약이 다름
    • ARM의 레지스터 사용 규약
    • ARM에서 코딩한 소스를 APCS에 맞춰 컴파일해 기계어를 만든다
  • ARM 레지스터 역할
    • ARM 어셈블리 프로그래밍할 때 표의 register, synonym, special 이름 세가지 다 사용해도 됨
    • R0~R3, SP, LR, PC 레지스터를 많이 사용한다
    • R0~R3
      • argument
        • 함수 내에서 r0~r3를 사용한다면 이 레지스터 값들을 스택에 저장해둔다
        • 최적화를 위해 함수의 인자는 4개 이하로 하는 것이 좋다
          • 5번째 인자부터 스택에 저장하므로
          • 4번째 인자까지는 레지스터 R0~R3 에 저장하므로 속도가 더 빠르다
      • result
        • 함수의 return값을 저장하는데 사용
      • scratch
        • 함수 동작 중 내부변수로 활용
        • 함수를 만들 때, 인자가 4개 미만이면 4개까지 더미 인자를 만들어 함수내부변수로 활용하면 동작속도를 빠르게 할 수 있다
    • 특수 레지스터
      • PC : 인텔의 EIP같은 것
        • 인텔과 달리 어셈블리 mov로 대입할 수 있다
      • SP: 스택 포인터
      • LP: return address 저장

Image(3)

  • 인터럽트
    • Exception의 일종
      • Interrupt Exception이 발생하면 IRQ나 FIQ의 핸들러 명령어 쪽으로 이동(branch)
    • 인터럽트를 동작시키는 회로가 HW 적으로 구현되어 있음
    • Nesting
      • 인터럽트 처리중에 다른 인터럽트가 들어오는 것
      • 시스템에따라 처리 법이 다르다
        • 인터럽트 처리 중 다른 인터럽트 감지 disable
        • 일정 수의 nesting 은 허용
    • ISR은 최대한 짧게 작성하는 것이 좋음
  • ARM SoC
    • ARM 은 CPU Architecture
      • MPU를 만드는 회사들이 ARM의 architecture를 사고 거기에 다른 기능(IP)들을 추가하여 디자인한다
    • 같은 ARM core를 쓰면 ARM assembly를 공용으로 사용 가능
      • ex) Qualcomm MSM(모뎀 기능이 들어간 MCU)
    • SoC
      • Core에 여러가지 기능을 덧붙여 한 개의 chip으로 만드는 기술
      • ARM core를 바탕으로 다른 device를 block화 하여 하나의 칩으로 만드는 것
        • IP(Intellectual Property)
          • SoC 내부 각각의 block들
          • USART, I/O, PLL 등
        • ASIC Library
          • verilog같은 디자인 툴로 각 device를 설계하여 block화 한 것
  • AMBA
    • 칩 내부의 IP들끼리 통신하기 위한 버스 프로토콜
    • AHB, APB, ASB가 있음
      • ASB: 주소와 데이터를 번갈아서 전송
      • AHB: 주소를 한번 전송한 후 데이터를 연달아서 전송(Burst) 가능

Image(4)

Image(5)

  • 컴파일
    • 소스코드를 기계어 코드로 바꾸는 것
    • CPU가 다르면 기계어가 다르다
      • 특정 CPU에서 컴파일한 실행파일을 다른 CPU 환경에서 동작시킬 수 없다
    • 어셈블리는 기계어와 1:1 매칭
      • CPU에 따라 어셈블리 문법이 달라짐
    • C 언어 같은 고급언어는 CPU나 운영체제에 구애받지 않고 프로그래밍할 수 있어 이식성이 좋다고 함
      • 임베디드에서는 주로 C언어를 사용
      • C++ 등도 가능하지만 코딩면에서 편한거지 컴파일 후 파일 길이가 길어져 최적화 측면에서는 불리
    • Java 같은 언어는 하나의 파일로 가상머신이 존재하는 모든 환경에서 동작하능

 

 

 

 

  • 인텔과 ARM의 함수 호출/반환 과정

Image(6)

Image(7)

Image(8)

  • 구조체를 인자/반환값으로 사용한 함수

Image(9)

Image

Image(11)Image(10)

728x90