View Full Version : The Yasm Modular Assembler Project

شنبه 09 مهر 1384, 05:55 صبح
Key Current User-Visible Features ¶ (http://www.tortall.net/projects/yasm/#KeyCurrentUserVisibleFeatures)

Nearly feature-complete lexing and parsing of (preprocessed) NASM syntax (http://www.tortall.net/projects/yasm/wiki/NasmSyntax).

Limited lexing and parsing of GAS (GNU assembler) syntax? (http://www.tortall.net/projects/yasm/wiki/GasSyntax) (in progress).

AMD64 (http://www.tortall.net/projects/yasm/wiki/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 (http://www.gnu.org/software/gettext/gettext.html).

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? (http://www.tortall.net/projects/yasm/wiki/BinaryObject) output (NASM style).

COFF object file? (http://www.tortall.net/projects/yasm/wiki/CoffObject) output, for use with DJGPP.

Win32 object file? (http://www.tortall.net/projects/yasm/wiki/Win32Object) output (including Win64/AMD64 support).

STABS debug format (http://www.tortall.net/projects/yasm/wiki/StabsDebug).

ELF32 and ELF64 object file (http://www.tortall.net/projects/yasm/wiki/ElfObject) 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 (http://www.delorie.com/djgpp/))

Windows (using Visual C++ (http://msdn.microsoft.com/vstudio/) or CygWin (http://www.cygwin.com/)).

Key Internal Features ¶ (http://www.tortall.net/projects/yasm/#KeyInternalFeatures)

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 (http://www.tortall.net/projects/yasm/wiki/NasmSyntax) 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? (http://www.tortall.net/projects/yasm/wiki/GasSyntax) 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) (http://www.freebsd.org/cgi/man.cgi?query=queue&sektion=3) set of functions, strdup, strcasecmp (http://www.freebsd.org/cgi/man.cgi?query=strcasecmp&sektion=3), and mergesort (http://www.freebsd.org/cgi/man.cgi?query=mergesort&sektion=3).

A decent (and growing) set of assembler test input files to test the entire assembler as well as specific modules