A programming language that is once removed from a
computer's machine language. Machine languages consist entirely of
numbers and are almost impossible for humans to read and write. Assembly
languages have the same structure and set of commands as machine
languages, but they enable a programmer to use names instead of numbers.

Each type of CPU has its own machine language and Assembly language, so
an Assembly language program written for one type of CPU won't run on
another. In the early days of programming, all programs were written in
Assembly language. Now, most programs are written in a high-level
language such as FORTRAN or C. Programmers still use Assembly language
when speed is essential or when they need to perform an operation that
isn't possible in a high-level language.

This article is specially designed to help beginners to understand and develop
their first Assembly Program from scratch. Through step by step instructions it
will help you to use tools, setup the environment and then build sample 'Hello
World' program in Assembly language with detailed explaination.

This guide describes the basics of 32-bit x86 assembly language programming,
covering a small but useful subset of the available instructions and assembler
directives. There are several different assembly languages for generating x86
machine code. The one we will use in CS216 is the Microsoft Macro Assembler (MASM)
assembler. MASM uses the standard Intel syntax for writing x86 assembly code.
The full x86 instruction set is large and complex (Intel's x86 instruction set
manuals comprise over 2900 pages), and we do not cover it all in this guide. For
example, there is a 16-bit subset of the x86 instruction set. Using the 16-bit
programming model can be quite complex. It has a segmented memory model, more
restrictions on register usage, and so on. In this guide, we will limit our
attention to more modern aspects of x86 programming, and delve into the
instruction set only in enough detail to get a basic feel for x86 programming.