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;
}

이 글과 관련있는 글을 자동검색한 결과입니다 [?]

by 이명 | 2007/01/30 22:43 | 프로그램 | 트랙백 | 덧글(0)

트랙백 주소 : http://cozyhouse.egloos.com/tb/3042067
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글

◀ 이전 페이지          다음 페이지 ▶