2007년 01월 30일
WinCE에서 ARM 어셈플러로 코딩해보자.
간혹 이것저것 하다 보면 C++이나, Java 말고 asm으로 코딩해야 하는 경우가 생길 수 있다. 물론 디바이스 드라이버를 개발하는 등의 경우를 제외하고도 말이다. 나의 경우에도 아주 특별한 이유로 ASM 코드를 포함시켜야 하는 경우가 있었는데 MS에서 제공하는 ARM 컴파일러에서는 인라인 어셈플러를 지원하지 않았다. (물론 내가 못 찾았을수도 있지..=ㅁ=) (이하의 내용은 VS 2005 기준이다. )
아무튼 그리하여 인라인 말고 asm을 obj파일로 생성하여 링크하는 법이 있지 않겠나 하여 찾은것이 Jeff Abraham's WebLog의 블로그에서 찾은 룰 파일이였다.
위의 내용을 메모장으로 저장하여 armasm.rule 이란 이름(다른 이름도 상관없다.)으로 저장하고 Project > Custom Rules... 을 선택한 후 Find Existing... 버튼을 눌려 해당 룰파일을 로딩해주면 asm 파일은 arm 어셈플러로 빌드시켜준다.
이렇게 설정후 asm파일을 다음과 같은 형태로 코딩한다.
그리고 C코드 상에서는 어셈으로 작성된 함수에 관한 프로토 타입이 없으므로 이를 정의하고 사용하면 된다.
아무튼 그리하여 인라인 말고 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 "$(IntDir)\$(InputName).obj" [$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)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]