These are other non-regular options,
in case the previous didn't satisfy you (why?),
that I don't recommend in the usual (?) case,
but that could be quite useful if the assembler must be integrated
in the software you're designing (i.e. an OS or development environment).
Win32Forth is a free 32-bit ANS FORTH system
that successfully runs under Win32s, Win95, Win/NT.
It includes a free 32-bit assembler (either prefix or postfix syntax)
integrated into the reflective FORTH language.
Macro processing is done with
the full power of the reflective language FORTH;
however, the only supported input and output contexts is Win32For itself
(no dumping of .obj file,
but you could add that feature yourself, of course).
Find it at
ftp://ftp.forth.org/pub/Forth/Compilers/native/windows/Win32For/.
SHASM is an assembler written in GNU Bash Version 2, which may work
in other recent unix-style "shell" command interpreters.
It is a trivially extensible, utterly flexible collection of unix
shell routines for assembling arbitrary binary files, including 80386
machine language programs.
SHASM uses echo -e \000, (implicit) "let"-style expressions including
bitwise Booleans, arrays, and perhaps other non-Bourne features of Bash.
SHASM does NOT call externals such as sed, dd, expr and so on.
All it needs is the shell, although it does need a cushy shell.
It is (of course) slower than other assemblers.
It has its own syntax
(well, as most of cLIeNUX does :).
Fairly good documentation is included.
Check it out:
ftp://linux01.gwdg.de/pub/cLIeNUX/interim/shasm.TGZ.
Probably you'll not use it, but at least it deserves your interest
as a crazy idea.
The Table Driven Assembler (TDASM) is a free portable
cross assembler for any kind of assembly language.
It should be possible to use it as a compiler to any target microprocessor
using a table that defines the compilation process.
It is available from http://www.penguin.cz/~niki/tdasm/.
Terse
is a programming tool that provides THE most compact
assembler syntax for the x86 family!
However, it is evil proprietary software.
It is said that there was a project for a free clone somewhere,
that was abandoned after worthless pretenses that the syntax
would be owned by the original author.
Thus, if you're looking for
a nifty programming project related to assembly hacking,
I invite you to develop a terse-syntax frontend to NASM,
if you like that syntax.
As an interesting historic remark, on
comp.compilers,
1999/07/11 19:36:51, the moderator wrote:
"There's no reason that assemblers have to have awful syntax. About
30 years ago I used Niklaus Wirth's PL360, which was basically a S/360
assembler with Algol syntax and a a little syntactic sugar like while
loops that turned into the obvious branches. It really was an
assembler, e.g., you had to write out your expressions with explicit
assignments of values to registers, but it was nice. Wirth used it to
write Algol W, a small fast Algol subset, which was a predecessor to
Pascal. As is so often the case, Algol W was a significant
improvement over many of its successors. -John"
HLA is a
High
Level
Assembly language.
It uses a high level language like syntax
(similar to Pascal, C/C++, and other HLLs) for variable declarations,
procedure declarations, and procedure calls. It uses a modified
assembly language syntax for the standard machine instructions.
It also provides several high level language style control structures
(if, while, repeat..until, etc.) that help you write much more readable code.
HLA is free, but runs only under Win32.
You need MASM and a 32-bit version of MS-link,
because HLA produces MASM code and uses MASM for final
assembling and linking. However it comes with
m2t (MASM to TASM)
post-processor program that converts the HLA MASM output to a form
that will compile under TASM. Unfortunately, NASM is not supported.
TALC
is another free MASM/Win32 based compiler
(however it supports ELF output, does it?).
TAL stands for
Typed
Assembly
Language.
It extends traditional untyped assembly languages with typing annotations,
memory management primitives, and a sound set of typing rules, to guarantee
the memory safety, control flow safety,and type safety of TAL programs.
Moreover, the typing constructs are expressive enough to encode
most source language programming features including records and structures,
arrays, higher-order and polymorphic functions, exceptions, abstract data types,
subtyping, and modules. Just as importantly,
TAL is flexible enough to admit many low-level compiler optimizations.
Consequently, TAL is an ideal target platform for type-directed compilers
that want to produce verifiably safe code
for use in secure mobile code applications
or extensible operating system kernels.
You may find more about them,
together with the basics of x86 assembly programming, in the
Raymond Moon's x86 assembly FAQ.
Note that all DOS-based assemblers should work inside the Linux DOS Emulator,
as well as other similar emulators, so that if you already own one,
you can still use it inside a real OS.
Recent DOS-based assemblers also support COFF and/or other object file formats
that are supported by the GNU BFD library,
so that you can use them together with your free 32-bit tools,
perhaps using GNU objcopy (part of the binutils) as a conversion filter.