YASM Release Notes
Milestone 2.1 (0.2.1)
Release Date: 4/1/03
Target Audience
Welcome to the second milestone release of The YASM
Modular Assembler. As this is only a milestone, it's really not for
general use yet, so there are certain to be many bugs and missing features.
This release is intended to provide a stable snapshot of YASM development as
of 4/1/03. Its target audience includes people who:
- want to keep track of YASM's progress in terms of stability and feature
set;
- want to test YASM with their own code to help test it;
- want to get started on YASM development from a new release;
- are just interested in the YASM project.
What's New in the 0.2.1 Update
After the Milestone 2 release, a few issues were discovered in the build
process and a very useful feature (the -I option) was added. In order to have
a stable Milestone 2 release, we decided to release the 0.2.1 update, which
supersedes the original Milestone 2. Changes in this update include:
- Added support for NASM-like -I and -P options to the preprocessor to
specify include directories and pre-included files respectively (thanks to
Michael Urman for his quick work).
- Fixed a number of issues with libtool/libltdl and module building (these
issues only affected UNIX builds).
- Made the "real" NASM preprocessor the default preprocessor. This was
not the case in the original Milestone 2 release (despite an example to the
contrary in the release notes).
What's New in Milestone 2
As it's been over a year since Milestone 1 (we will be releasing more often
in the future!), quite a lot has changed. Although still limited, YASM is
usable for most Win32 or DJGPP targeted projects. Some of the new features
include:
- Revamped (faster and better) NASM-compatible parser.
- Full support for COFF (DJGPP) and Win32 object format output.
- "Real" NASM preprocessor (imported from NASM tree).
- Support for AMD x86-64 instruction set, registers, and addressing modes
(mostly untested). This is enabled using the "[BITS 64]" directive; see the
x86-64 tests for the x86 architecture for more details.
- Numerous bug fixes and code cleanups.
- Most code relicensed under 2-clause BSD license, although major portions
are still LGPL-licensed (NASM preprocessor, long integer support).
As YASM is still under development, there are some caveats and features
that do not yet work or are not yet fully functional:
- There is no support at present for the use of -I to specify include
directories (even when using the embedded NASM preprocessor). See below for a
workaround using the external NASM preprocessor.
- The optimizer is very basic 2-pass style (even so it should be slightly
better than NASM's 2-pass optimizer).
- SEG, WRT, and ':' (segment:offset notation) don't work (generally used in
16-bit code).
Important Differences from NASM
YASM defaults to reading from standard input and writing to standard output
if no files are specified. When an input file is specified, YASM behaves like
NASM.
Running YASM
Version Information:
yasm --version
Commandline Help:
yasm --help
Assemble test.asm (using "real" NASM preprocessor) to Win32 object file
test.obj, with include directory "include":
yasm -Iinclude -f win32 test.asm