WinCE ARM 어셈블리 연결해서 컴파일하기

Posted by 빵빵빵
2011/02/17 14:06 전산(컴퓨터)/Mobile-CE&PPC



출처 : http://cozyhouse.egloos.com/3042067

WinCE에서 ARM 어셈플러로 코딩해보자.

간혹 이것저것 하다 보면 C++이나, Java 말고 asm으로 코딩해야 하는 경우가 생길 수 있다. 물론 디바이스 드라이버를 개발하는 등의 경우를 제외하고도 말이다. 나의 경우에도 아주 특별한 이유로 ASM 코드를 포함시켜야 하는 경우가 있었는데 MS에서 제공하는 ARM 컴파일러에서는 인라인 어셈플러를 지원하지 않았다. (물론 내가 못 찾았을수도 있지..=ㅁ=) (이하의 내용은 VS 2005 기준이다. )

아무튼 그리하여 인라인 말고 asm을 obj파일로 생성하여 링크하는 법이 있지 않겠나 하여 찾은것이 Jeff Abraham's WebLog의 블로그에서 찾은 룰 파일이였다.

<?xml version="1.0" encoding="utf-8"?>
<VisualStudioToolFile Name="Arm ASM" Version="8.00">
   <Rules>
      <CustomBuildRule
         Name="Arm asm" DisplayName="Arm asm"
         CommandLine="armasm -o &quot;$(IntDir)\$(InputName).obj&quot; [$Inputs] "
         Outputs="$(IntDir)\$(InputName).obj"
         FileExtensions="*.asm"
         ExecutionDescription="Executing tool..."
      >
      <Properties></Properties>
      </CustomBuildRule>
   </Rules>
</VisualStudioToolFile>


위의 내용을 메모장으로 저장하여 armasm.rule 이란 이름(다른 이름도 상관없다.)으로 저장하고 Project > Custom Rules... 을 선택한 후 Find Existing... 버튼을 눌려 해당 룰파일을 로딩해주면 asm 파일은 arm 어셈플러로 빌드시켜준다.

이렇게 설정후 asm파일을 다음과 같은 형태로 코딩한다.

 CODE32
 AREA |.text|, CODE, ARM
 IMPORT MessageBoxA // 사용할 함수명
 EXPORT _Function // 노출할 함수명

_Function PROC

...

ENDP

그리고 C코드 상에서는 어셈으로 작성된 함수에 관한 프로토 타입이 없으므로 이를 정의하고 사용하면 된다.
void _Function(void);

int main()
{
  _Function();
  return 0;
}
2011/02/17 14:06 2011/02/17 14:06

이 글에는 트랙백을 보낼 수 없습니다