19
1/19 페이지 MASM 시작하기 목차 1. 32bit mode에서 어셈블리 프로그래밍 환경구축 ___________________________________________ 2 Visual Studio C++ Express 2005 설치방법 ____________________________________________________ 2 MASM설치 ______________________________________________________________________________ 3 책에서 제공하는 Link Library 다운받기 ____________________________________________________ 4 간단하게 어셈블리 프로젝트 만들기 ________________________________________________________ 4 프로그램 빌드하기 _______________________________________________________________________ 6 프로그램 실행하기 _______________________________________________________________________ 6 프로젝트에서 어셈블리 환경만들기 ______________________________________________________ 6 2. 프로젝트 속성 설정하기 ______________________________________________________________ 10 3. 소스 리스팅 파일(Source Listing file) 생성하기 __________________________________________ 13 4. 16bit mode에서 어셈블리 프로그래밍 환경구축 __________________________________________ 14 5. 디버그(Debug) 기능 사용하기 _________________________________________________________ 17 6. Visual Studio 2005 C++ 에서 MASM 문법 하이라이팅하기 번호 표시하기 _____________ 19 최종 작성일: 2009년 2월 12일 변경 일자: 2009년 2월 12일 작성자: 김인태 연구실: 아산이학관 226호 인터넷 컴퓨팅 연구실 <http://ilab.korea.ac.kr > Email: [email protected] 문의 사항은 Email로 연락 주십시오.

MASM 시작하기 - Egloos

  • Upload
    others

  • View
    53

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MASM 시작하기 - Egloos

1/19 페이지

MASM 시작하기

목차

1. 32bit mode에서 어셈블리 프로그래밍 환경구축 ___________________________________________ 2

① Visual Studio C++ Express 2005 설치방법 ____________________________________________________ 2

② MASM설치 ______________________________________________________________________________ 3

③ 책에서 제공하는 Link Library 다운받기 ____________________________________________________ 4

④ 간단하게 어셈블리 프로젝트 만들기 ________________________________________________________ 4

⑤ 프로그램 빌드하기 _______________________________________________________________________ 6

⑥ 프로그램 실행하기 _______________________________________________________________________ 6

⑦ 빈 프로젝트에서 어셈블리 환경만들기 ______________________________________________________ 6

2. 프로젝트 속성 설정하기 ______________________________________________________________ 10

3. 소스 리스팅 파일(Source Listing file) 생성하기 __________________________________________ 13

4. 16bit mode에서 어셈블리 프로그래밍 환경구축 __________________________________________ 14

5. 디버그(Debug) 기능 사용하기 _________________________________________________________ 17

6. Visual Studio 2005 C++ 에서 MASM 문법 하이라이팅하기 및 줄 번호 표시하기_____________ 19

최종 작성일: 2009년 2월 12일

변경 일자: 2009년 2월 12일

작성자: 김인태

연구실: 아산이학관 226호 인터넷 컴퓨팅 연구실

<http://ilab.korea.ac.kr>

Email: [email protected]

문의 사항은 Email로 연락 주십시오.

Page 2: MASM 시작하기 - Egloos

2/19 페이지

1. 32bit mode에서 어셈블리 프로그래밍 환경구축

우선 Visual Studio C++ Express 2005 버전을(이하 VS2005 C++ 2005) 설치하도록 합니다.

① Visual Studio C++ Express 2005 설치방법

VS2005 C++ 2005는 다음의 링크로 다운 받을 수 있습니다.

http://www.microsoft.com/express/2005/download/

1. 다운로드 페이지 접속화면

2. Visual C++ 2005 Express Edition을 다운받기

3. 다운 받은 파일을 실행

5. 설치 종료 및 VS2005 C++ 2005 실행화면

4. 인스톨이 진행되는 화면

Page 3: MASM 시작하기 - Egloos

3/19 페이지

② MASM설치

VS2005 C++ 2005는 MASM이 기본적으로 설치되지 않기 때문에 추가로 설치해야 합니다.

다음의 링크를 통해 다운받아 설치합니다.

http://www.microsoft.com/downloads/details.aspx?FamilyId=7A1C9DA0-0510-44A2-B042-

7EF370530C64&displaylang=en

#1. MASM 다운로드 페이지

#2. 다운 받은 파일 실행하면 기존의

Visual Studio에 자동으로 설치됩니다.

#3. VS2005 C++ 2005설치 시 기본 디렉토리에 설치하였으면 C:\Program Files\Microsoft

Visual Studio 8\VC\bin\ml.exe 로 MASM 8.0이 설치된 것을 확인할 수 있습니다.

Page 4: MASM 시작하기 - Egloos

4/19 페이지

③ 책에서 제공하는 Link Library 다운받기

다음의 링크로 책에서 제공하는 Library 및 각 장의 예제 파일을 다운받을 수 있습니다.

http://kipirvine.com/asm/examples/IrvineExamples.exe

다운받은 파일이 설치되는 기본 디렉토리는 c:\Irvine\ 입니다.

④ 간단하게 어셈블리 프로젝트 만들기

Visual Studio C++ Express에서 간단하게 어셈블리 프로그래밍을 하도록 프로젝트를 생성하는 방법은 앞서

다운로드 받은 Library가 설치된 폴더에서 Project_sample를 복사해서 사용하는 것입니다. 다른 어떤 프로젝

트 설정작업 없이 어셈블리 프로그래밍을 할 수 있기 때문에 편한 방법입니다.

c:\Irvine\examples\Project_sample 에 위치하고 있습니다. 프로젝트를 여는 방법은 Visual Studio를 먼저

실행합니다.

#1 Visual Studio가 시작된 후 메뉴에서 File -> Open -> Project/Solution을 선택합니다.

#2 기존의 프로젝트를 열기 위한 탐색기 창이 뜨는데, c:\Irvine\examples\Project_sample

를 찾아서 Project.sln 파일(솔루션 파일)을 클릭하여 프로젝트를 엽니다. Project_sample폴더

를 다른 곳으로 복사하였다면 해당 디렉터리를 찾아서 같은 방법으로 프로젝트를 엽니다.

(단축키 Ctrl+Shift+o)

Page 5: MASM 시작하기 - Egloos

5/19 페이지

#3 왼쪽에 보이는 솔루션 탐색기에 프로젝트 내에 있는 파일들이 트리 형태로 구성되어 있

습니다. 여기에서 Project를 클릭하고 main.asm 파일을 클릭하여 소스 파일을 엽니다.

#4 오른쪽에 편집창이 뜨면서 main.asm파일의 코드가 나타나는데, 이 파일을 고쳐서 사용합

니다.

Page 6: MASM 시작하기 - Egloos

6/19 페이지

⑤ 프로그램 빌드하기

Visual Studio C++ 2005 Express에서는 메뉴에서 Build->Build Solution (단축키 F7)을 클릭하여 프로그램을

빌드합니다.

⑥ 프로그램 실행하기

메뉴의 Debug-> Start without Debugging (단축키 Ctrl+F5) 를 클릭하여 프로그램을 실행합니다.

새로운 콘솔창이 뜨면서 프로그램이 실행되는 것을 볼 수 있습니다.

⑦ 빈 프로젝트에서 어셈블리 환경만들기

앞에서는 Project_sample 폴더에 만들어져 있는 프로젝트를 열어서 사용하였습니다. 하지만 처음부터 빈 프

로젝트를 생성하여 어셈블리 프로그래밍 환경을 만들고 싶다면 다음과 같은 방법을 사용합니다.

빌드가 정상적으로 수행된다면 하단의 출력 창에서 위와 같은 메시지를 확인할 수 있습니다.

실행 화면

#1 메뉴에서 File -> New -> Project 를 클릭합니다. (단축키 Ctrl_Shift+N)

Page 7: MASM 시작하기 - Egloos

7/19 페이지

#2 새로운 프로젝트를 생성하는 창이 뜨는데 왼쪽 Project types에서 General을 선택하고 오른쪽 Templates에

서 Empty Project를 클릭하고 아래에 Name에 적절한 프로젝트 명 및 Location에 프로젝트를 생성할 디렉터

리를 설정하여 OK버튼을 누릅니다. 그러면 빈 프로젝트가 하나 생성됩니다.

#3 어셈블러를 사용하기 위해 메뉴의 Project-> Custom Build Rules 를 클릭합니다. Custom Build Rule 창이

뜨면 상단의 Available Rule Files: 에서 Microsoft Macro Assembler 왼쪽에 체크박스를 체크하고 OK버튼을 누

릅니다.

Page 8: MASM 시작하기 - Egloos

8/19 페이지

#4 이제 소스파일을 생성해서 프로젝트에 추가하여야 하는데, Visual Studio는 확장자가 .asm인 파일을 생성해

주지 않으므로 Windows에서 제공하는 notepad(또는 다른 편집기툴을)를 통해서 확장자가 .asm인 파일을 미

리 만들어 놓습니다. (여기에서는 main.asm으로 만들겠습니다. notepad에서 텍스트 문서를 저장할 때 파일 형

식에서 ‘모든 파일(*.*)’을 선택하여 확장자가 .asm으로 저장합니다)

main.asm 파일이 생성되었으면 아까 프로젝트를 생성한 폴더에 이동시킵니다.

#5 다시 Visual Studio로 돌아와서 왼쪽의 솔루션 탐색기에서 프로젝트에 마우스 커서를 위치한다음에 마우스

오른쪽 버튼을 누릅니다. 팝업이 뜨면 Add->Existing Item 을 클릭하여 아까 만들어놓은 main.asm파일을 찾

아서 추가합니다.

Page 9: MASM 시작하기 - Egloos

9/19 페이지

#6 프로젝트 생성 및 소스파일 추가까지 완료되었으며 해당 소스파일을 클릭하여 어셈블리어로 프로그램 코

드를 만들면 됩니다. 메뉴의 Debug->Start without Debugging (단축키 Ctrl+F5)으로 프로그램을 빌드할 수 있

습니다.

그런데 책에서 제공하는 Library를 사용하기 위해서는 몇 가지 프로젝트의 속성 변경이 필요합니다. 프로젝트

속성 변경 방법은 다음 절에서 소개하도록 합니다.

Page 10: MASM 시작하기 - Egloos

10/19 페이지

2. 프로젝트 속성 설정하기

1.3장에서 설명한 저자가 제공하는 라이브러리 및 예제파일을 설치하면(기본 설치 경로: c:\Irvine\)

\examples\Project_Sample에 기본적인 프로젝트의 설정이 다되어있는 프로젝트가 있습니다. 이 폴더를 자신이

원하는 곳에 복사하여 사용하면 쉽습니다. 하지만 라이브러리의 설치 위치를 바꾸거나 빈 프로젝트에 저자의 라

이브러리를 추가하여 사용하길 원한다면 다음과 같은 설정작업이 필요합니다.

#1 Visual Studio의 메뉴에서 Project-> Project Properties를 클릭하여( Project 는 자신이 생성한 프로젝트의 이

름입니다.) Property Pages 창을 띄웁니다.

왼쪽 부분의 Configuration Properties를 클릭하여 확장시키고 또 Microsoft Macro Assembler를 클릭하여 확장

합니다.

Page 11: MASM 시작하기 - Egloos

11/19 페이지

#2 Microsoft Macro Assembler->General을 클릭하고 오른쪽에 ‘Include Paths’ 항목을 찾습니다. 해당항목의

값에 교재의 라이브러리가 설치되어있는 디렉터리(기본경로 c:\Irvine\)를 입력합니다. 다른 디렉터리에 설치

하였으면 해당 위치를 입력합니다. 이 설정은 어셈블러에서 *.inc파일을 ‘Include Paths’에 입력된 디렉터리 위

치에서 찾도록 지시합니다.

#3 다음으로 Configuration Properties-> Linker -> Input 을 클릭합니다. 오른쪽 부분의 Additional

Dependencies의 값에 user32.lib irvine32.lib 를 입력합니다. User32.lib는 표준 MS-Window file이며

irvine32.lib는 교재에서 제공하는 link library file입니다.

Page 12: MASM 시작하기 - Egloos

12/19 페이지

#4 다음으로 Configuration Properties->Linker->General을 클릭합니다. 오른쪽 부분의 Additional Library

Directories항목의 값에 교재의 라이브러리가 설치되어있는 디렉터리(기본경로 c:\Irvine\)를 입력합니다. 이

것은 Irvine32.lib 라이브러리 파일을 입력된 디렉터리의 위치에서 찾도록 링커(Linker)에게 알리는 역할을 합니

다.

#5 Configuration Properties->Linker->Debugging을 클릭하여 오른쪽 부분의 Generate Debug Info항목을

Yes/(DEBUG)로 변경합니다.

#6 Configuration Properties->Linker->System을 클릭하여 오른쪽 부분의 SubSystem의 값을

Console(/SUBSYSTEM:CONSOLE)으로 변경합니다. 이 것은 프로그램의 실행을 텍스트 콘솔 윈도우(또는 커맨

드 윈도우)에 출력하는 것을 말합니다.

이제 프로젝트 설정작업을 모두 마쳤으며, 만들어 놓은 .asm파일을 열어서 어셈블리어로 프로그램을 작성하

면 됩니다.

Page 13: MASM 시작하기 - Egloos

13/19 페이지

3. 소스 리스팅 파일(Source Listing file) 생성하기

소스 리스팅 파일을 생성하기 위해서 메뉴에서 Project-> Project Properties를 클릭하여 Property Pages 창

을 엽니다. 왼쪽 부분에서 Configuration Properties->Microsoft Macro Assembler->Listing File을 클릭합니

다. 오른쪽 부분에서 Assembled Code Listing File항목의 값을 $(InputName).lst 으로 변경합니다.

Page 14: MASM 시작하기 - Egloos

14/19 페이지

4. 16bit mode에서 어셈블리 프로그래밍 환경구축

16bit mode환경을 구축하려면, VS2005 C++에 16bit로 작성된 어셈블리 코드를 빌드할 명령과 실행시키는 명

령 두 개를 추가해야 합니다. 추가방법은 다음과 같습니다.

#1 Visual Studio 메뉴의 Tools->External Tools를 클릭하여 External Tools 창을 띄웁니다.

#2 Add 버튼을 눌러서 다음의 그림처럼 두 명령어를 만듭니다. 왼쪽 명령어가 16-bit 어셈블리 코드를 빌드하는 명령

어이고, 오른쪽이 빌드된 프로그램을 실행하는 명령어 입니다. 왼쪽의 빌드 명령어를 만들기 위해서는 Add 버튼을 눌

러서 새 항목을 만든 후 아래의 속성들을 채우면 됩니다. 여기에서 Title값은 Build 16-bit ASM (사용자가 임의로 정해

도 됩니다.)로 하였고, Command 항목의 값에는 교재에서 제공하는 라이브러리가 설치된 디렉터리와 make16.bat 파일

을 입력합니다. (여기에선 기본 설치 경로인 c:\irvine\make16.bat를 사용하였습니다.) Arguments의 값은

$(ItemFileName), Initial directory값은 $(ItemDir)로 설정합니다. 그리고 오른쪽 실행 명령어는 마찬가지로 Add버튼을

눌러 새 항목을 만든 후 Title은 Run 16-bit ASM, Command값은 cmd.exe, Arguments값은 /C $(ItemFileName),

Initial directory값은 $(ItemDir)로 채웁니다. 그리고 아래의 Close on exit 항목의 왼쪽 체크박스를 해제 합니다. 왜냐

하면 실행 결과인 콘솔창이 나타났다가 사라지면 출력 결과를 확인할 수 없기 때문입니다.

Page 15: MASM 시작하기 - Egloos

15/19 페이지

#3 위에서 Build 16-bit ASM 명령어를 만들 때, 교재에서 제공하는 라이브러리를 기본경로(c:\irvine\)에 설치하지 않

았으면 설치된 디렉터리로 이동하여 make16.bat 파일을 수정해야 합니다.

Make16.bat 파일의 내용

@echo off

REM make16.bat

REM Created 06/01/2006

REM By: Kip R. Irvine

REM Assembles and links the current 16-bit ASM program.

REM Assumes you have installed Microsoft Visual Studio 2005,

REM or Visual C++ 2005 Express.

REM

REM Command-line options (unless otherwise noted, they are case-sensitive):

REM

REM -Cp Enforce case-sensitivity for all identifiers

REM -Zi Include source code line information for debugging

REM -Fl Generate a listing file (see page 88)

REM /CODEVIEW Generate CodeView debugging information (linker)

REM %1.asm The name of the source file, passed on the command line

REM ************* The following lines can be customized:

SET MASM="C:\Program Files\Microsoft Visual Studio 8\VC\bin\" 이곳에 visual studio c++ express가 설치된

경로를 적습니다. 기본 설치경로가 입력되어 있는데, 다른 위치에 설치하였다면 변경된 디렉터리로 변경하도록 합니다.

SET INCLUDE=C:\irvine 이곳에 라이브러리가 설치된 경로를 입력합니다. 변경되었다면 변경된 디렉터리로 변

경합니다.

SET LIB=C:\irvine 이곳에 라이브러리가 설치된 경로를 입력합니다. 변경되었다면 변경된 디렉터리로 변

경합니다.

REM **************************** End of customized lines

REM Invoke ML.EXE (the assembler):

%MASM%ML /nologo -c -omf -Fl -Zi %1.asm

if errorlevel 1 goto terminate

REM Run the 16-bit linker, modified for Visual Studio.Net:

C:\irvine\LINK16 %1,,NUL,Irvine16 /CODEVIEW; 이곳에 라이브러리가 설치된 경로와 링커 및 옵션을 입력합니다. 변

경되었다면 변경된 디렉터리만 바꾸도록 합니다.

if errorlevel 1 goto terminate

REM Display all files related to this program:

DIR %1.*

Page 16: MASM 시작하기 - Egloos

16/19 페이지

#4 설정이 다 끝났으면 VS2005 C++에 새로운 명령어(16bit mode에서 어셈블하고 실행하는 명령어)가 만들

어집니다. 위의 그림에서 보듯이 메뉴의 Tools->Build 16-bit ASM 및 Tools->Run 16-bit ASM을 확인 할 수

있습니다. .asm파일에 16bit 어셈블리 코드를 작성하여 Build 16-bit ASM으로 빌드(어셈블 및 링크)하고, Run

16-bit ASM으로 실행할 수 있습니다.

Page 17: MASM 시작하기 - Egloos

17/19 페이지

5. 디버그(Debug) 기능 사용하기

VS 2005 C++에서 어셈블리 프로그램을 디버깅 하는 방법에 대해서 설명하겠습니다.

#1디버그 모드에서 프로그램을 실행하기 위해서는 F10키(Step over) (또는 F11키(Step Into))를 누릅니다.

그러면 노란색 화살표가 프로그램의 시작 진입 점인 main PROC 왼쪽을 가리키고 검은색 콘솔 윈도우 창이

하나 뜨는 것을 확인할 수 있습니다. 계속 F10키를 누르면 노란색 화살표 위치한 코드를 실행하고 화살표는

아래로 이동하며 실행 결과가 콘솔 윈도우에 출력됩니다. exit 문장을 만나게 되면 디버그 모드는 종료되고

프로그램 또한 종료가 됩니다.

#2 CPU 레지스터를 확인하면서 디버깅을 하고 싶다면, F10키(또는 F11키)로 디버그 모드를 시작하고, 메뉴의

Debug->Windows->Registers를 클릭하여 Registers 윈도우를 띄웁니다. (VS 2005 C++ 왼쪽 하단에 표시됨)

Page 18: MASM 시작하기 - Egloos

#3 Registers 윈도우에 마우스 커서를 위치시킨 후 마우스의 오른쪽 버튼을 클릭하면 아래와 같은 메뉴가

나타나게 되는데 추가로 표시할 Register의 종류를 선택할 수 있습니다. 예를 들어 Flags 레지스터를 확

인하고 싶으면 Flags 항목을 클릭하면 되고, 마찬가지로 다른 Register(CPU Segments, Floating Point,

MMX등)을 확인하고 싶으면 해당 항목을 클릭하여 활성화 하면됩니다.

#4 BreakPoint를 설정하기 위해서는 디버그 모드를 시작하기 전에 설정할 코드의 왼쪽 부분에 마우스 커서를

위치시킨 후 더블 클릭하거나 프로그램 코드 내에서 breakpoint를 설정할 곳으로 입력 커서를 이동한 후 메

뉴의 Debug->Toggle breakpoint(단축키 F9키)를 클릭하면 빨간색 동그라미가 표시되면서 해당 코드에

breakpoint가 설정됩니다. 다음 그림은 mov al, 0F9h 코드에 breakpoint가 설정된 화면입니다. 디버그 모드를

실행한 후 다음 breakpoint까지 한번에 프로그램을 실행 시키기 위해서는 메뉴의 Debug->Continue (단축키

F5키)를 누르면 되며, 프로그램이 종료되기 전에 디버그 모드를 끄고 싶다면 메뉴의 Debug->Stop

Debugging (단축키 Shift+F5)를 누르면 됩니다.

18/19 페이지

Page 19: MASM 시작하기 - Egloos

19/19 페이지

6. Visual Studio 2005 C++ 에서 MASM 문법 하이라이팅하기 및 줄 번호 표시하기

문법 하이라이팅 기능을 사용하면 MASM의 키워드, 문자열 및 다른 여러 요소들을 각기 다른 색깔로 표시해

주어 코드가 훨씬 알아보기 쉬워집니다.

#1 문법 하이라이팅 기능을 사용하기 위해서는 MASM 키워드들에 대해 미리 정의해놓은 파일이 필요합니다.

http://kipirvine.com/asm/files/usertype.dat 의 링크에서 usertype.dat 파일을 다운로드 한 후 C:\Program

Files\Microsoft Visual Studio 8\Common7\IDE 에 복사합니다.

#2 그리고 VS2005 C++ 를 실행한 후 메뉴의 Tools->Options를 클릭한 후 Options창의 왼쪽 부분에서 Text

Editor->File Extention을 클릭합니다. 그리고 오른쪽 부분의 Extension 아래에 asm 을 입력한후 Add 버튼을

누릅니다. 그리고 VS2005 C++을 재시작 하여 어셈블리 프로젝트를 연다면 다음 그림과 같이 키워드별로 색

상이 달라진 것을 볼 수 있습니다.

#2 편집기에 줄 번호를 표시하기 위해서는 메뉴의 Tools->Options를 클릭한 후 Options창의 왼쪽 부분에서

Text Editor->All Language->General을 클릭합니다. 그리고 오른쪽 부분의 Display 에서 Line numbers 항목

왼쪽 체크박스를 체크한 후 OK버튼을 누릅니다.