Getting Started With MASM
Getting Started With MASM
Getting Started With MASM
Updated 8/4/2010
This tutorial shows you how to set up Visual Studio 2010, including Visual Studio 2010 Express, to work with
Microsoft MASM.
If you are using Visual Studio 2008 or Visual C++ 2008 Express, Click here.
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.
Filename Description
cmd.exe Shortcut to the Windows command-line interpreter (named cmd.exe)
GraphWin.inc Include file for writing Windows applications
Irvine16.inc Include file used with the Irvine16 link library (16-bit applications)
Irvine16.lib 16-bit link function library used with this book
Irvine32.inc Include file used with the Irvine32 link library (32-bit applications)
Link16.exe 16-bit linker
Irvine32.lib 32-bit link function library used with this book
User32.lib Basic I/O link library
Macros.inc Include file containing macros (explained in Chapter 10)
SmallWin.inc Small-sized include file, used by Irvine32.inc
make16.bat Batch file for building 16-bit applications
VirtualKeys.inc 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.
Start Visual C++ Express, and select Options from the Tools menu. Select Text Editor, Select All
Languages, and select Tabs:
Opening a Project
Visual Studio and Visual C++ Express require assembly language source files to belong to a project, which is a
kind of container. A project holds configuration information such as the locations of the assembler, linker, and
required libraries. A project has its own folder, and it holds the names and locations of all files belonging to it.
We have created a sample project folder in the c:\Irvine\Examples\ch03 directory, and its name is Project.
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.
INCLUDE Irvine32.inc
.data
myMessage BYTE "MASM program example",0dh,0ah,0
.code
main PROC
call Clrscr
exit
main ENDP
END main
Later, we'll show you how to copy this program and use it as a starting point to write your own programs.
Next, you will build (assemble and link) the sample program. Right-click the project name in the Solution
Explorer window and select Build from the popup menu.
In Visual Studio's Output window you should see messages similar to the following, indicating the build
progress:
If you do not see these messages, the project has probably not been modified since it was last built. No
problem--just select the project name and choose Rebuild.
You will need to add the Start Without Debugging command to the Visual Studio toolbar menu. Go to the
Tools menu, select Customize, select Commands. Choose the Menu Bar radio button and select Debug from the
dropdown list next to it. Select Add Command, select Debug, select Start Without Debugging, and click the OK
button. Click the Close button. Verify that Start Without debugging has been added to your Debug menu.
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 generated automatically when you select Start Without
Debugging from the Debug menu.
Congratulations, you have just run your first Assembly Language program.
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.
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.
1. To begin stepping through your program in Debug mode, press the F10 key.
2. A yellow arrow will appear next to the first program statement (call Clrscr).The arrow indicates that the
statement is next to be executed.
3. Press the F10 key (called Step Over) to execute the current statement. Continue pressing F10 until the
program is about to execute the exit statement.
4. A small black window icon should appear on your Windows status bar. Open it and look at the contents
of the Command window. You should see the words "MASM program example" in the window.
5. Press F10 one more time to end the program.
Note: If you execute your program in Debug mode without setting any breakpoints or without stepping
through the code, the program's output window will disappear. Visual Studio does not generate a "Press any
key to continue" prompt when running in debug mode.
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.
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.
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:
Here is what you should see in the Console window, except that only your EAX register will have the same
value as ours:
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.
Click the OK button to save the command and close the External Tools dialog.
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:
You have completed the setup for building and running 16-bit assembly language programs.
Return to top
Assuming that our sample project is still open, select Project Properties from the Project menu. Expand the
entry under Configuration Properties. Then expand the entry named Microsoft Macro Assembler. This is
what you should see:
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 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.
Return to top
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 (or Visual C++ Express) starts, it reads the syntax file and
highlights MASM keywords.
Here are the required steps to set up MASM syntax highlighting in Visual Studio or Visual C++ Express:
1) Download the Usertype.dat file given here to a folder in which you have read/write permissions. If you are
using Windows Vista, 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 xx.x\Common7\IDE folder. If you are
using Windows Vista, it will display a verification window before copying the file. ("xx" may be 9.x or 10.x)
3) Open Visual Studio or Visual C++ Express, 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
The easiest way to run a batch file is to first open a Command window and then type the name of the batch
file (along with arguments) at the command prompt. To open a Command window, you must execute a
program named cmd.exe. We will make that easy for you.
Step 2: Extract the ZIP file into the c:\Irvine\Examples directory on your computer.
Copy asm32.bat to any directory on your system path. By doing this, you make it possible for MS-
Windows to recognize asm32 as a valid command when typed at the MS-Windows command prompt.(If
you want to find out which directories are on the current system path, type path and press Enter at the
system 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.
Next, install the Irvine 6th edition link libraires and include
files in the following directory: C:\Irvine
Command-line syntax:
Type the following command to assemble and link a source file named main.asm:
asm32 main
Assembling: main.asm
You might get a linker error saying that it cannot find Kernel32.lib. This file is normally installed as part of the
Windows SDK, but you can get a copy here. Copy this file into your c:\Irvine folder.
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.
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.
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.
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
Links go out of date quickly, but you can google for Windows batch files and get plenty of hits.
Return to top