검색결과 리스트
글
Introduction
어셈블리(Assembly)라고 하면 보통 '너무 오래된 언어', '구닥다리 언어', '배우기 어려운 언어', '외계문자' 등의 생각을 하는 분들이 많이 있습니다. =_= 하지만 어셈블리는 알고보면 정말 재미있고, 흥미로운 언어임에 틀림 없습니다. 그리고 어셈블리는 절대 사라지지 않을 멋진 녀석입니다. O/S를 만들때도, C언어로 만들긴 하지만 kernel 은 아직도 어셈블리로 만든다고 합니다. 그만큼 강력하고 무엇이든 할 수 있는 강한놈이죠. 하지만 처음 언어가 나온지 오랜 시간이 지난만큼, 다른 언어에 비해 정보를 얻기 힘이 듭니다. 오늘은 어셈블러에는 어떤 종류가 있고, Visual Studio 에서 어떻게 개발할 수 있는 지에 대해서 알아보도록 하겠습니다.
어셈블러(Assembler)의 종류
MASM(Microsoft Macro Assembler), NASM(Netwide Assembler), FASM(Flat Assembler), GAS(GNU Assembler), YASM 등 정말 다양한 종류가 있습니다. 그럼 여기서 잠시 질문하나 드리겠습니다. 어셈블리(Assembly)는 무엇이고 어셈블러(Assembler)는 무엇일까요? 그렇습니다. 어셈블리는 언어를 말하는 것이고, 어셈블러는 compiler 를 의미하는 것입니다. 물론 어셈에서는 C언어처럼 컴파일 이라는 용어대신 Assemble 한다고 표현하며, 이 동작을 해 주는 녀석을 Assembler 라고 말합니다.
자, 그럼 위에서 나열한 것은 Assembler 의 종류입니다. 그런데 왜 각각에 대해서 문법이 다를까요?
Assembler 마다 지원하는 platform 이 다르고, syntax 형태도 차이가 있습니다. 당연히 platform 에 따라 종류를 나누면 상당히 많은 어셈블리가 존재하지요. 인텔(Intel)의 IA-32 Assembly 도 있고, IA-64 Assembly 도 있습니다. 그 이외에 상당히 많은 종류의 어셈블리(Assembly)가 존재하지요. syntax 에는 Intel 방식과 AT&T 방식이 있습니다. 자세한 내용은 아래에서 계속 설명 드리도록 하겠습니다.
GAS(GNU Assembler)
GAS 는 약자 속에 나와 있듯이 GNU Project 에서 사용되고 만들어진 어셈블러입니다. 당연히 GCC 안에 기본적으로 사용되는 녀석이기도 하지요. Linux 에서 인라인 어셈을 해 보신 분은 GAS가 어떤 syntax 를 사용하는지 아실겁니다. 바로 AT&T 입니다. 제가 싫어하는 문법이기도 하지요 =_=; 간단히 예를 들면 MOV EAX, 80 을 MOV $80, %EAX 로 표현합니다. MOV $80, %EAX 는 AT&T 이고, 다른 하나는 Intel syntax 입니다. 여튼 GAS는 Free Software 이고, Cross Platform 을 지원합니다.
MASM(Microsoft Macro Assembler)
가장 많이 들어보셨을 어셈블러(Assemler)라고 생각합니다. Microsoft 에서 만들었으며, 많은 사랑을 받아온 어셈블러입니다. 64-bit 도 지원하며, syntax 는 Intel 방식을 따릅니다. 개인적으로 저는 이 syntax 가 가독성이 좋습니다. MASM 는 초기에 유료로 제공되었으며 사용하기 위해서는 별도로 설치를 해 주어야 합니다. 하지만 이제는 뮤로로 제공되며 고맙게도 Visual Studio 2008 이상 버젼부터는 기본적으로 MASM v9.0이 기본적으로 포함되어 있기 때문에 별도 설치를 해 줄 필요가 없습니다. 더불어 MASM 은 이름에서도 알 수 있듯이, 강력한 Macro 를 지원해줌으로써 프로그래머가 좀 더 편리하게 개발 할 수 있도록 지원해 줍니다. 편리하긴 하지만 때론 Assemly 의 참 모습을 잃어가는 것 같아 조금 아쉽기도 하네요. 참, 아시다시피 cross-platform 은 지원되지 않습니다 ^-^;
참고 사이트
http://www.masm32.com
http://www.movsd.com
NASM(Netwide Assembler)
80x86 platform 용으로 개발된 어셈블러입니다. 그리고 open-source 로 시작되었지요. 왜 그랬을까요? 네, 바로 Microsoft 때문입니다 -_-; 당시 Microsoft 의 MASM은 상용으로서 돈을 지불하고 사야만 했기 때문이죠. 그렇기에 MASM과 비슷한 점이 많고, 사람들의 비교 대상도 되곤 합니다. NASM의 장점은 현재는 Cross-Platform 을 지원한다는 것과 Macro(단, x86 platform에서) 를 제공한다는 것입니다. 그렇기에 일반적으로 Kernel 과 같이 O/S를 개발할 경우에 많이 사용되는 Assembler 입니다.
참고 사이트
http://www.nasm.us
이외의 Aseembler
이밖에 어셈블러(Assembler)는 다음 주소를 참고하시기 바랍니다.
JWASM : http://www.japheth.de/JWasm.html
FASM : http://flatassembler.net/
YASM : http://www.tortall.net/projects/yasm/
Visual Studio 2008 & MASM
MASM 을 사용하기 위해서 꼭 Visual Studio 가 필요한 것은 결코 아닙니다. MASM32 v10 을 설치하면 Quick Editor 라는 IDE 툴이 제공됩니다. 그리고 IDE 없이 console 에서 얼마든지 어셈블이 기능합니다. 하지만 C++ 프로젝트에 ASM을 사용하는 거라면 아무래도 Visual Studio 2008에서 개발하는게 편하겠죠. 저는 IDE 툴을 여러개 나눠서 쓰는것이 싫어서 Visual Studio 을 사용하는 것을 선호합니다.
[ MASM32 v10 의 Quick Editor]
MASM 설치하기
Visual Studio 2005 이하의 버젼이라면 Microsoft 홈페이지에서 별도로 MASM을 다운받아 설치하셔야 합니다. 하지만 Visual Studio 2008 이상의 버젼이라면 고민할 필요가 없습니다. 기본적으로 설치되어 있기 때문이죠. T^T
Program Files\Microsoft Visual Studio 9.0\VC\bin
다음 path 에서 ml.exe 를 실행시키면 다음과 같은 output 을 보실 수 있습니다.
Copyright (C) Microsoft Corporation. All rights reserved.
usage: ML [ options ] filelist [ /link linkoptions]
Run "ML /help" or "ML /?" for more info
Syntax Highlight 설정하기
기본적으로 Visual Studio 에서 .asm 의 확장자로 파일을 생성하면, Syntax Highlight 가 적용되지 않습니다. 상당히 불편하죠. 이를 해결하기 위한 방법은 다음과 같습니다.
1. usertype.dat 파일을 이용하는 방법
Keyword 가 들어있는 usertype.dat 파일을 생성한 뒤, \Program Files\Microsoft Visual Studio 9.0\Common7\IDE 폴더에 집어 넣습니다.(visual studio 2008 은 \Program Files\Microsoft Visual Studio 8.0\Common7\IDE)
이후, Visual Studio 에서 도구->옵션->텍스트편집기->파일 확장명에 asm 을 추가해 주시면 됩니다.
2. Addin 을 설치하는 방법
개인적으로 가장 선호하는 방법입니다. 여러가지 addin 이 있으니 본인이 마음에 드는 것을 설치하시면 됩니다. 저는 http://asmhighlighter.codeplex.com/ 를 이용합니다. MASM 뿐만 아니라 NASM 까지 지원합니다. Syntax는 x86 ASAM 을 지원합니다.
Sample Code!
이제 환경 샘플 코드를 통해서 Assemble 해 보도록 합시다.
1. 프로젝트 생성
2. 코딩~
위 그림처럼 asm 확장자를 갖는 파일을 하나 생성합니다. 그리고 아래 코드를 타이핑 해 봅시다.
3. 빌드규칙 지정하기
코드도 타이핑하였으니, 이제 빌드를 하면 됩니다. 그냥 빌드를 하면 오류가 발생할겁니다. 왜냐면 .asm 에 대해서 빌드 방법을 지정해 주지 않았기 때문이죠. 위 그림처럼 프로젝트를 선택한 뒤, 프로젝트 -> 사용자 지정 빌드규칙 을 선택합니다. 그리고 아래처럼 ASM에 대해서 빌드 방식을 지정해 줍니다.
프로젝트 -> 속성 -> 구성속성 -> 일반 을 보면 위와 같이 '추가 라이브러리 디렉터리' 라는 곳이 있습니다. 이곳에 lib의 상위 path 를 적어주시면 됩니다. 그림의 경우 D:\masm32\lib 에 라이브러리 파일들이 있으므로 D:\masm32 라고 적어주었습니다.
그리고 Microsoft Macro Assembly -> General 에서 Include path 를 적어줍니다. 이 부분의 본인의 편의에 따라 맞게 적어주시면 됩니다.
정리
오늘의 포스팅 주제는 사실 'ASM으로 DLL 을 만들어 활용하기' 로 기획했습니다. 하지만 이것저것 주저리 주저리 적다보니 내용이 너무 길어졌군요. ㅠ.ㅜ 항상 이런 식인것 같습니다. 왜 항상 글을 쓰기 시작하면 삼천포로 빠지든가, 쓸모 없는 내용이 길어지나 모르겠습니다. 여튼 각설하고 다음에는 정말 처음 기획한 주제에 대해서 포스팅하도록 하겠습니다. ^-^;
'Microsoft > MASM32' 카테고리의 다른 글
[MASM 강좌] 튜토리얼 4 : Painting with Text (0) | 2010.11.29 |
---|---|
[MASM 강좌] 튜토리얼 3 : A Simple window (0) | 2010.11.29 |
[MASM 강좌] 튜토리얼 2 : MessageBox (1) | 2010.11.29 |
[MASM 강좌] 튜토리얼 1 : 기본 (1) | 2010.11.29 |
MASM - DLL 만들기 (0) | 2010.11.29 |
RECENT COMMENT