YASM Release Notes
Milestone 3 (0.3.0)
Release Date: 9/4/03
Welcome to the third 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 9/4/03. Its target audience includes people who:
- want to try out (and help test) a NASM-syntax AMD64 assembler;
- 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.
New features in this release:
The primary new feature in this milestone is ELF support for both 32-bit
and 64-bit (AMD64) targets. YASM at this point should be usable for Win32,
DJGPP, and general UNIX-like OS targeted projects. Some of the new features
- Full support for ELF, including support for both AMD64 and 32-bit x86
targets; note: for AMD64 output, the machine type must be set to "amd64"
using the "-m" command line option, e.g. "yasm -m amd64 -f elf test.asm".
- Full warnings for integer overflow.
- Full support for AMD64 RIP-relative addressing; the two forms supported
are "[rip+val]" (direct index) and "[sym wrt rip]" (relocated relative).
- Many AMD64 bugfixes including correct operand size handling (and o64
override); thanks to the many bug reports to help improve YASM in this
Features available in previous version of YASM include:
- Full support for COFF (DJGPP) and Win32 object format output.
- "Real" NASM preprocessor (imported from NASM tree).
- Support for AMD64 instruction set, registers, and addressing modes
(mostly untested). This is enabled using the "[BITS 64]" directive and "-m
amd64" command line option; see the AMD64 tests for the x86 architecture and
ELF64 tests for more details.
- Numerous bug fixes and code cleanups.
- Most code licensed under 2-clause BSD license, although some portions
are still LGPL-licensed (NASM preprocessor module).
- Support for the -I option to specify include directories.
- Support for CALL/JMP FAR, including proper handling of "location EQU
seg:off; jmp location".
- YASM defaults to reading from standard input if no files are specified.
When an input file is specified, YASM behaves like NASM.
- A number of command line options are different. Run "yasm --help" for a
quick command line option summary.
As YASM is still under development, there are some caveats and features
that do not yet work or are not yet fully functional. The following are the
known issues at the time of release:
- Changing the machine to "amd64" does not automatically default to bits 64
mode; specify BITS 64 in the assembly source as a workaround.
- ORG value is not automatically translated into [ORG value]; use the
latter as a workaround.
- The optimizer is very basic 2-pass style (even so it should be slightly
better than NASM's 2-pass optimizer).
A number of download forms are available. For Windows and DOS users, we
recommend downloading the prebuilt binaries. The source tarball contains all
sources needed to build YASM on UNIX-compatible systems, Windows, and DOS.
On UNIX-compatible operating systems, YASM builds using the standard
"./configure; make; make install" commands. GNU make is not required. While
YASM development requires a larger toolchain (see the HACKING file), building
YASM should not require more than just a C compiler.
For Windows and DOS systems, we recommend simply downloading the prebuilt
executables. However, for those that want to build YASM directly using DJGPP,
CygWin, or Visual C++ 6.0, Makefiles and all required specialized files are
provided in the Mkfiles/ directory of the distribution tarball.
Command Line Option Help:
Assemble test.asm (using "real" NASM preprocessor) to Win32 object file
yasm -f win32 test.asm
Assemble test2.asm to AMD64 ELF object file test2.o:
yasm -m amd64 -f elf test2.asm