YASM Release Notes
Milestone 2.2 (0.2.2)
Release Date: 6/6/03
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 6/6/03. Its target
audience includes people who:
- want to keep track of YASM's progress in terms of stability and feature
- 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.
As YASM is still under development, there are some caveats and features
that do not yet work or are not yet fully functional:
- The optimizer is very basic 2-pass style (even so it should be slightly
better than NASM's 2-pass optimizer).
- The preprocessor does not know about objfmt or arch specific macros
for directives (e.g. changing BITS xx into [BITS xx] or
changing ORG yy into [ORG yy]). As a workaround, use the
basic  forms.
- Opcodes LGDT, LIDT, SGDT, SIDT, FSTENV, FSAVE, INVLPG, FXSAVE, FXRSTOR,
PREFETCHNTA, PREFETCHT0, PREFETCHT1, PREFETCHT2, PREFETCH, and PREFETCHW are
While we have not yet finished all the milestone goals for a Milestone 3
release (although we are getting close), we decided to release a 0.2.2 update
with support for FAR calls, a major feature missing in previous releases and
very useful for OS development.
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).
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
- 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).
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
Assemble test.asm (using "real" NASM preprocessor) to Win32 object file
test.obj, with include directory "include":
yasm -Iinclude -f win32 test.asm