Getting Started With MASM and Visual Studio 2012
Getting Started With MASM and Visual Studio 2012
Getting Started With MASM and Visual Studio 2012
Updated 12/20/2012 This tutorial shows you how to set up Visual Studio 2012 (including Visual Studio 2012 Express for Windows Desktop) to work with Microsoft MASM. Note: Visual Studio 2012 Express for Windows Desktop is absolutely free, available from Microsoft at http://www.microsoft.com/visualstudio/eng#products/visual-studio-express-products If you're in a hurry to get started, you only need to read Item 1 below: 1. 2. 3. 4. 5. 6. Project properties settings Generating a source listing file Using the Visual Studio debugger MASM syntax highlighting Assembling, linking, and debugging with a batch file Custom Build Rules
The book's example programs in Chapters 1-14 have been successfully tested in Windows XP, 32-bit Vista and the 32-bit version of Windows 7. On the other hand, many programs in Chapters 15-17 will not run in any Microsoft OS later than Windows 98, because they rely on direct access to hardware and system memory. You cannot directly run 16-bit applications in any 64-bit version of Windows. Found an error in this document? Please email me immediately. Except where noted, all instructions in this document apply equally to Visual Studio and Visual Studio Express.
make16.bat VirtualKeys.inc
Batch file for building 16-bit applications Keyboard code definitions file, used by Irvine32.inc
A subdirectory named Examples will contain all the example programs shown in the book, as well as all the source code for the book's 16- and 32-bit link libraries.
In fact, you can use the same sequence to customize any of the menus and toolbars in Visual Studio. Set the Tab Size to 5 Start Visual Studio, and select Options from the Tools menu. Select Text Editor, Select All Languages, and select Tabs:
5. Next, you need to add an existing source code file named main.asm to the project. To do that, right-click on Project, select Add, select Existing Item, select main.asm, and click the Add button to close the dialog window. (You can use this sequence of commands in the future to add any asm file into a project.) 6. Next, you will open the main.asm file for editing. Double-click the file named main.asm to open it in the editing window. (Visual Studio users may see a popup dialog asking for the encoding method used in the asm file. just click the OK button to continue.) Tip: If the Solution Explorer window is not visible, select Solution Explorer from the View menu. Also, if you do not see main.asm in the Solution Explorer window, it might be hidden behind another window. To bring it to the front, click the Solution Explorer tab from the tabs shown along the bottom of the window. You should see the following program in the editor window:
TITLE MASM Template ; Description: ; ; Revision date: INCLUDE Irvine32.inc .data myMessage BYTE "MASM program example",0dh,0ah,0 .code main PROC call Clrscr mov edx,OFFSET myMessage call WriteString exit main ENDP END main
(main.asm)
Later, we'll show you how to copy this program and use it as a starting point to write your own programs. Build the Program Next, you will build (assemble and link) the sample program. Select Build Project from the Build menu. In the Output window for Visual Studio at the bottom of the screen, you should see messages similar to the following, indicating the build progress:
1>------ Build started: Project: Project, Configuration: Debug Win32 -----1>Assembling... 1>Assembling: .\main.asm 1>Linking... 1>Embedding manifest... 1>Build log was saved at "file://g:\masm\Project_sample\Debug\BuildLog.htm" 1>Project - 0 error(s), 0 warning(s) ========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
If you do not see these messages, the project has probably not been modified since it was last built. No problem-just select Rebuild Project from the Build menu. Run the Program Select Start without Debugging from the Debug menu. The following console window should appear, although your window will be larger than the one shown here:
The "Press any key to continue..." message is automatically generated by Visual Studio. Congratulations, you have just run your first Assembly Language program. Press any key to close the Console window. When you assembled and linked the project, a file named Project.exe was created inside the project's \Debug folder. This is the file that executes when you run the project. You can execute Project.exe by double-clicking its name inside Windows Explorer, but it will just flash on the screen and disappear. That is because Windows Explorer does not pause the display before closing the command window. Creating New Projects of Your Own Before long, you will want to create your own projects. The easiest way to do this is to copy the entire c:\Irvine\Examples\Project_Sample folder to a new location. Copy it to a folder in which you have read/write permissions. (If you're working in a college computer lab, a useful location is a portable USB drive. Then you can modify the program, build, and run it again.
Registers If you want to display the CPU registers, do the following: Start debugging the program, then select Windows from the Debug menu. Select Registers from the drop-down list. The bottom window will display the register contents. Right click this window and check the item Flags to enable the display of conditional flags. You can interrupt a debugging session at any time by selecting Stop Debugging from the Debug menu. You can do the same by clicking the blue square button on the toolbar. To remove a breakpoint from the program, click on the red dot so that it disappears. Setting a BreakPoint If you set a breakpoint in a program, you can use the debugger to execute the program a full speed (more or less) until it reaches the breakpoint. At that point, the debugger drops into single-step mode. 1. Click the mouse along the border to the left of the call WriteString statement. A large red dot should appear in the margin. 2. Select Start Debugging from the Debug menu. The program should run, and pause on the line with the breakpoint, showing the same Yellow arrow as before. 3. Press F10 until the program finishes. You can remove a breakpoint by clicking its red dot with the mouse. Take a few minutes to experiment with the Debug menu commands. Set more breakpoints and run the program again. For the time being, you can use the F11 key to step through the program in the same way the F10 key did. Building and Running Other Programs Suppose you want to run another example program, or possibly create your own program. You can either edit and modify main.asm, or you can remove main.asm from the project and insert some other .asm file into the project. To remove a program from a project without deleting the file, right-click its name in the Solution Explorer
window. In the context menu, select Exclude from Project. If you change your mind and decide to add it back to the project, right-click in the same window, select Add, select Existing item, and select the file you want to add. To remove a program from a project and delete the source code file, select the file with the mouse and press the Del key. Or, you can right-click the file name and select Remove. Adding a File to a Project The easiest way to add an assembly language source file to an open project is to drag its filename with the mouse from a Windows Explorer window onto the name of your project in the Solution Explorer window. A reference to the file (not a copy) will be inserted in your project's directory. Try this now: 1. Remove the main.asm file from your project. 2. Add a reference to the file c:\Irvine\Examples\ch03\AddSub.asm to the project. 3. Build and run the project. Here is what you should see in the Console window, except that only your EAX register will have the same value as ours:
When you press a key, the console window will close. Copying a source file If you want to make a copy of an existing file, use Windows Explorer to copy the file into your project directory. Then, right-click the project name in Solution Explorer, select Add, select Existing Item, and select the filename. Return to top or read about Project Properties settings.
Click the OK button to save the command and close the External Tools dialog. Testing Your new 16-Bit Commands To test your new 16-bit commands, open the file named 16-bit.asm from the ch03 folder in the book's example programs. Select Build 16-bit ASM from the Tools menu. The following command window should appear, showing the successful execution of the assembler and linker, followed by a listing of all files related to this program:
Press a key to close the window. Next, you will run the program. Select Run 16-bit ASM from the Tools menu. The following window will appear, although the contents of all registers except EAX will be different:
Press a key to close the window. You have completed the setup for building and running 16-bit assembly language programs. Return to top
Click the entry named General under Microsoft Macro Assembler . Notice that the Include Paths option has been set to the c:\Irvine directory. This tells the assembler where to find files having a filename extension of ".inc". Here is a sample:
Next, select the Listing File entry, also in the Microsoft Macro Assembler group. Notice that the Assembled Code Listing File entry (shown below) has been assigned a macro name (starting with $) that identifies the name of the source input file, with a file extension of .lst. So, if your program were named main.asm, the listing file would be named main.lst:
Find the Linker entry under Configuration Properties. Select the Input entry, and notice that two filenames have been added to the Additional Dependencies entry. The user32.lib file is a standard MS-Windows file. The irvine32.lib file is the link library file supplied with this book. There must be at least one space separating the file names:
Next, select Linker under Configuration Properties, and then select General. The Additional Library Directories option equals c:\Irvine, so the linker can find the Irvine32.lib library file:
Select Linker under the Configuration Properties and select Debugging. Notice that the Generate Debug Info option is set to Yes:
Select Advanced under the Linker entry. Notice that the Image Has Safe Exception Handlers option is set to No.
Select System under the Linker entry. Notice that the SubSystem option has been set to Console:
We use the Console setting because it is easy for assembly language programs to write output to a text console (Command) window. This is the window you see when running cmd.exe from the Start > Run menu in Windows. Click the OK button to close the Project Property Pages window. Return to top
Open the project. From the menu, select Project, select Project Properties. In the list box, select Microsoft Macro Assembler, then select Listing File. Set the Assembled Code Listing file option to $(InputName).lst. Return to top
This won't happen automatically, but you can create a syntax definition file named Usertype.dat that contains MASM keywords. Then when Visual Studio starts, it reads the syntax file and highlights MASM keywords. Here are the required steps to set up MASM syntax highlighting: 1) Download the Usertype.dat file (enclosed in a ZIP file) given here to a folder in which you have read/write permissions. If you are using Windows 7, download to My Documents, or C:\temp, or any folder that doesn't have security restrictions. 2) Copy Usertype.dat to the C:\Program Files\Microsoft Visual Studio 11.x\Common7\IDE folder. Windows will display a verification dialog before copying the file. 3) Open Visual Studio, select Options from the Tools menu, select Text Editor, and select File Extension. On the right side of the dialog (shown below), enter asm as the extension, select Microsoft Visual C++ from the Editor list, and click the Add button. Click the OK button to save your changes.
Close Visual Studio and restart it. Open your project and display an ASM file. You should see syntax highlighting in the editor. Return to top
command prompt.) Double-click the shortcut to cmd.exe. A Command window should appear. At the command prompt in this window, type asm32 and press Enter. This will execute the asm32 batch file and display help information. This file assembles, links, and debugs a single assembly language source file. Before using it, install Visual Studio 2012 in the following directory: C:\Program Files\Microsoft Visual Studio 11.0
Next, install the Irvine 6th edition link libraires and include files in the following directory: C:\Irvine
Finally, copy this batch file to a location on your system path. We recommend the following directory:
Command-line syntax: asm32 [/H | /h | -H | -h] -- display this help information asm32 filelist -- assemble and link all files asm32 /D filelist -- assemble, link, and debug asm32 /C filelist -- assemble only <filelist> is a list of up to 5 filenames (without extensions), separated by spaces. The filenames are assumed to refer to files having .asm extensions. Command-line switches are case-sensitive. Type the following command to assemble and link a source file named main.asm: asm32 main You should see the following messages:
Assembling: main.asm The file main.obj was produced. .................................. Linking main.obj to the Irvine32, Kernel32, and User32 libraries. The file main.exe was produced. ..................................
In fact, several files were produced. main.obj - the object file main.ilk - incremental link status file main.pdb - debug symbol file
If there were syntax errors in your program, you would see error messages generated by the assembler. Here is an example: Assembling: main.asm main.asm(9) : error A2008: syntax error : myMessage main.asm(15) : error A2006: undefined symbol : myMessage You would then open the main.asm file with a text editor (such as Notepad), fix the errors, and run the asm32 batch file again. Although we used a file named main.asm in this example, the asm32.bat batch file will work for any assembly language file, regardless of the name. The only requirement is that your assembly language source file have a .asm filename extension.
Assembling Programs in Other Directories No doubt, you will want to assemble programs in various different disk folders, not just the batch_sample folder used in the foregoing example. All you need to do is copy the cmd.exe shortcut we gave you to your working directory, where your assembly language source files are located. When you double-click to run the shortcut, it will open a Command window in the current folder. Assembling, Linking, and Debugging In addition to assembling and linking, you can use the asm32.bat file to launch your program in the Visual Studio debugger. Try the following command: asm32 /D main If the program assembles and links with no errors, your program should load in Visual Studio. The first time you do this with a new program, the source code will not appear. All you have to do is press the F10 key to begin debugging, and your program should appear with a yellow band across the first executable line:
(Depending on how Visual Studio is configured, you might have to press F8 to do the same thing.) From here, you can step through the program. When you get to the call to WriteString, you can even trace into its code by pressing the F11 key (trace to). When you finish, close Visual Studio. From this time on, when you load the same program in the Visual Studio debugger, your source code will appear right away. Assembling without Linking Occasionally, you may want to assemble programs but not link them. This happens, for example, when you are creating a multimodule project and you want to assemble each asm file into an obj file separately before linking them into the final exe program. Or, you might be assembling a module to be inserted into a link library (like Irvine32.lib). To assemble a source file only, inser the /C option before the name of the file being assembled: asm32 /C main You should see the following output: Assembling: main.asm The file main.obj was produced. .................................. If you are interested in learning more about how batch file commands work, here are some reference links we
found: Allenware.com: Batch file tutorial Microsoft TechNet article: Creating Truly Powerful Batch Files, by Brien Posey Microsoft TechNet article: Using Batch Files in Windows NT, by Troy Thompson Links go out of date quickly, but you can google for Windows batch files and get plenty of hits. Return to top