Key Current User-Visible Features ¶
Key Internal Features ¶
Nearly feature-complete lexing and parsing of (preprocessed) NASM syntax. Limited lexing and parsing of GAS (GNU assembler) syntax? (in progress). AMD64 support (enabled using "BITS 64" and "-m amd64" option) 64-bit (and larger) integer constants allowed (including math operations). Internationalization support via GNU gettext. A simple 2-pass optimizer (it's a bit better than the NASM one). The "real" NASM preprocessor (imported from NASM's source tree). Binary object file? output (NASM style). COFF object file? output, for use with DJGPP. Win32 object file? output (including Win64/AMD64 support). ELF32 and ELF64 object file output. No debugging information included at this point. Portability; currently compilable on:
UNIX and compatibles (FreeBSD and Linux tested, GNU configure based autoconfiguration) DOS (using DJGPP) Windows (using Visual C++ or CygWin).
A NASM syntax parser written in yacc. This simplifies the source code and increases performance: yacc-generated parsers are almost always faster than hand-written ones. Also, yacc (and its GNU implementation, bison) is an extremely well-tested and well-documented tool. Architecture-specific instruction parsers hand-written for simplicity and size, as well as to make it easy to add additional architectures while retaining the same front-end syntax. The blend of yacc for syntax and a hand-written parser for instructions strikes a great balance between the strengths and weaknesses of each approach. A NASM syntax lexer written in re2c. A highly efficient scanner generator (almost always faster than lex/flex), it's also very embeddable due to its code generation methodology, allowing a number of re2c scanners to be used in various places in yasm without any worries about naming conflicts. A GAS syntax? lexer and parser written in re2c and yacc, respectively. Many of the modular interfaces at least superficially finished. This is still an area that needs a lot of work. A small set of portable equivalants of useful functions that are standard on some systems (detected via configure), such as the queue(3) set of functions, strdup, strcasecmp, and mergesort. A decent (and growing) set of assembler test input files to test the entire assembler as well as specific modules
http://www.tortall.net/projects/yasm/