The Microsoft Assembler (MASM) is a popular assembler for Windows platforms. Unsurprisingly, there has been very few
The Microsoft Assembler (MASM) is a popular assembler for Windows platforms. Unsurprisingly, there has been very few
notable projects in MASM in the last decade. Small, fast code just isn't as important as it used to be. Still, it is
notable projects in MASM in the last decade.
a very interesting exercise to learn MASM and use it. It's difficult to get binary sizes smaller than you can with
raw assembly. Additionally, if you're in the world of reverse engineering, programming in assembly keeps your
Small, fast code just isn't as important as it used to be. Still, it is a very interesting exercise to learn MASM and use it. It's difficult to get binary sizes smaller than you can with raw assembly. Additionally, if you're in the world of reverse engineering, programming in assembly keeps your languages consistent.
languages consistent.
## Table of Contents
## Table of Contents
@ -30,41 +29,41 @@ languages consistent.
12. [Alignment](#alignment)
12. [Alignment](#alignment)
13. [Project Organization](#project-organization)
13. [Project Organization](#project-organization)
## Getting Started
## Getting Started
You're going to want to get some development tools. Of course, it goes without saying you're going to need some flavor
You'll want to get some development tools. Of course, it goes without saying: you're going to need some flavor
of Windows to run this stuff. Once you've acquired Windows, you will need the assembler and an IDE (optionally).
of Windows to run this stuff. Once you've configured Windows, you will need the assembler and optionally an IDE.
### The Assembler
### The Assembler
The most popular variant of MASM is [MASM32](http://www.masm32.com). It's more or less an all in one package for
The most popular variant of MASM is [MASM32 SDK](http://www.masm32.com). It's more or less an all in one package for
coding assembly programs on Windows. One caveat - you'll need Windows 2000 or greater. This guide will focus on
coding assembly programs on Windows. One caveat - you'll need Windows 2000 or greater. This guide will focus on
MASM32 primarily. Suggestions here should be easily ported to other variants.
MASM32 primarily. Suggestions here should be easily ported to other variants.
### IDEs
### IDEs
Thanks to the popularity of MASM, there are a few IDE choices if you choose to go that route. They are helpful, in that
Thanks to the popularity of MASM, there are a couple IDE choices if you choose to go the route of using one. They are helpful, in that
they handle assembling and linking for you. However, it's honestly something you can handle with a script.
they handle assembling and linking for you. However, it's honestly something you can handle with a script.
#### WinAsm Studio
#### WinAsm Studio
[WinAsm Studio](http://www.winasm.net) is arguably the most popular IDE for writing assembly code on Windows
[WinAsm Studio](http://www.winasm.net) is arguably the most popular IDE for writing assembly code on Windows
(as far as I've known). As it stands, I've had difficulty creating a new account on their forum to download the
(as far as I'm aware). As it stands, I've had difficulty creating a new account on their forum to download the
IDE. Unfortunately, they "account wall" the download so if you can't make an account you won't get the download. It's
IDE. Unfortunately, they "account wall" the download so if you can't make a forum account, you won't get the download. (It's
quite silly.
quite silly.)
#### VisualMASM
#### VisualMASM
[VisualMASM](http://www.visualmasm.com/) is another popular IDE. It's tailored to MASM and has the look and feel of
[VisualMASM](http://www.visualmasm.com/) is another popular IDE. It's tailored to MASM and has the look and feel of
a modern IDE. The most frustrating aspect is that there's no option to create a blank project. So if you're using
a modern IDE. The most frustrating aspect is that there's no option to create a blank project. So if you're using
a template, you're going to need to delete the base code that comes with the project to get anywhere. I have
a template, you're going to need to delete the base code that comes with the project to start. I have
[an issue](https://github.com/ThomasJaeger/VisualMASM/issues/5) on the VisualMASM github to address this.
[an issue](https://github.com/ThomasJaeger/VisualMASM/issues/5) on the VisualMASM repo in GitHub to address this.
### VIM Plugins
### VIM Plugins
VIM has pretty good support for assembly programming out of the box. I couldn't find any plugins that made programming
[VIM](http://www.vim.org/scripts/script.php?script_id=966) has pretty good support for assembly programming out of the box. I couldn't find any plugins that made programming any easier.
any easier.
### Visual Studio Code Extensions
### Visual Studio Code Extensions
@ -79,7 +78,7 @@ There is a `.CHM` version of these tutorials available on the [WinAsm website](h
## Styleguide
## Styleguide
The styleguide is a work in progress. As I find more pretty ways to write assembly code I will put them here. I've
The styleguide is a work in progress. As I find more pretty ways to write assembly code I will put them here. I've
gathered over my time writing MASM code that every developer does things differently. This makes it incredibly
realized over my time writing MASM code that every developer does things differently. This makes it incredibly
frustrating to try and read another developer's code.
frustrating to try and read another developer's code.
_PS: It would be really cool if someone wrote a linter that checked for these things. Maybe I'll get around to it
_PS: It would be really cool if someone wrote a linter that checked for these things. Maybe I'll get around to it