Visual Studio 2013 에서 MASM32 개발하기





오래전에 Visual studio 2008 에서 MASM32 를 개발하는 방법에 대해서 글을 올린적이 있습니다.

http://crystalcube.co.kr/13


현재 Visual Studio 2013 이 자리잡은 시점에 생각해보니, 그 뒤로 참 많은 시간이 흘렀네요. 

글을 적을때만 해도, 2008이 나온지 얼마 안된 시점 같은데 말이죠. :)



하여 개발환경도 바뀌고 해서, 2013 에서 개발하기라는 주제로 새로 글을 올리고자 합니다.


이전 글을 읽어보지 않으신 분은 한번쯤 읽어 보시기를 권합니다.

단순한 환경세팅뿐 아니라, 잡다한 내용도 포함되어 있으니까요 :)




그럼 본격적으로 환경설정하는 법에 대해서 알아보죠.

개인적으로 조금 아쉬운것은 Visual Studio 에 Online Template 기능이 있음에도,

MASM32 는 올라와 있지 않은것 같네요.



가장 먼저 해야하는 것은,

MASM32 의 라이브러리들을 설치해야 합니다.

C/C++ 로 비유하자면, 일종의 헤더파일들 이라고 할 수 있겠습니다.


http://www.masm32.com/installation.htm

위 사이트에서 몇년째(10년은 더 된듯 하네요), 꾸준히 업데이트해서 올려주고 있네요.

참고로 위 링크는 사이트에 나와 있듯이 Win2000 이상 버전을 위한 것입니다.

(win98 등은 지원하지 않는다는 이야깁니다. 뭐 대부분 win 7 이상 쓰실거라 믿습니다)


다운로드 받아서 설치를 하면, 기본적으로 선택한 드라이브 최상단에 설치가 됩니다.

(C 드라이브를 선택했을 경우 설치경로는 C:\masm32 라는 이야깁니다)




자, 이제 Visaul Studio 2013 을 실행하고, 프로젝트를 만듭니다.

현재 MASM32 템플릿이 없는 관계로 Visual C++ 의 Empty Project 로 만들었습니다.



그렇게 만들고 나면, 이제 Text File(.txt) 를 선택하여 추가합니다.

확장자는 asm 으로 수정하셔야 한다는점 잊지 않으시기 바랍니다.

저는 HelloWorld.asm 으로 만들었습니다.




파일을 생성했으면, 소스코드를 작성하시고(이전 블로그에 있는 코드입니다)..

어셈블 하기위한 세팅을 해 주어야 합니다.


이전 2008 과 비교했을때, 조금 옵션들 위치가 변경되었네요.

프로젝트 우클릭 -> Build Dependencies -> Build Customizations... 를 선택합니다.




그리고 masm 을 체크해 줍니다.
이 부분을 빠뜨리면, 추후 Microsoft Macro Assambly 메뉴가 나타나지 않습니다.
반드시 체크 하셔야 합니다.




설정할 것들이 조금 많습니다.
잘 따라 오시기 바랍니다. :)

먼저, 만들려는 프로그램의 System 을 설정해 주어야 겠지요.
SubSystem 을 Console (/SUBSYSTEM;CONSOLE) 콘솔로 지정합니다.

주의하실점은 Configuration 을 'All Configurations' 로 하셔야 한다는 사실입니다.
기본이 Debug 일텐데,, 나중에 깨닫게 되면, 다시 해줘야 하니,,
한번에 주의깊게 잘 하도록 합시다.




Image Has Safe Exception Handlers 는 No(/SAFESEH:NO) 로 지정합니다.




마지막으로 Include Paths 를 추가해 줍니다.

MASM32 를 C 에 설치하셨다면,,

C:\masm32\macros;

C:\masm32\lib;

C:\masm32\include;

요렇게 3개가 되겠네요.


뒤에 %(IncludePaths) 는 자동으로 붙습니다. 제가 입력한게 아닙니다. :)




이제 빌드하시면~

잘 되시나요?




혹시 이런 에러가 발생하신다면..

소스코드에서 include 할때, 경로가 잘못 되어서 그렇습니다.





위와 같이 전체 full 경로를 적어주시면 됩니다.

이렇게 매번 적기 귀찮으시다면 아래처럼 project 에서 추가해 주시면 됩니다.




이렇게 설정해 주시면, 다음부터는 코드 작성시, 파일명만 적어 주시면 됩니다.

INCLUDE windows.inc
INCLUDE gdi32.inc
INCLUDE user32.inc
INCLUDE kernel32.inc

INCLUDELIB gdi32.lib
INCLUDELIB user32.lib
INCLUDELIB kernel32.lib