A86/A386 and D86/D386 features
A86 main page ---
Eric's home page ---
The following features make A86 and A386 the best:
A86 is blazingly fast -- many times faster than any competing assembler.
typical computer (Pentium II or better, with source files already
A86 assembles at a rate of over 100,000 lines per second.
That's per second. NOT per minute, per second.
A86 is simple to use. You can feed it a program containing
just machine instructions, without the red tape (NAME, ASSUME,
SEGMENT PARA PUBLIC, PROC, ENDP, END, PUBLIC, EXTRN, etc. etc.)
necessary with other assemblers. The output of A86 can be a
.COM file, ready to execute immediately. You don't have to go
through a linker. Or, if you want to go through a linker, A86
will produce a correct .OBJ file even if no red tape directives
are given-- the default settings are compatible with most high-level
languages. (If you have programs written for another
assembler containing the red tape directives, you may leave
them in: A86 knows about them, and is programmed to act upon
them when assembling .OBJ files, and ignore them if assembling
In spite of its simplicity, A86 encourages modular programming,
even in its .COM mode, with separately-developed source files.
This is because A86 assembles multiple source files in its
invocation line; and because A86 assembles source files faster
than other people's linkers can link their object files. You
get all the advantages of relocation/linkage systems (building
up libraries of reliable program modules that you can piece
together), without the disadvantages (excessive,
time-and-source-code-wasting, confusing red tape).
A86 has ample capacity for large programming projects.
Its symbol table capacity is approximately 3000 10-letter
symbols, plus room for 15K bytes of compressed macro definition
text. (10 letters is an average symbol length; A86 recognizes
up to 127 letters in a symbol.) Plus, A86's generic local label
facility effectively doubles your symbol table capacity.
A86 has language extension features that, once you start using,
you'll never want to do without. These include multiple
operands to PUSH and POP; conditional returns; MOV from one
segment register to another; assembly time assertion checking;
based structures; and IF (flag) (statement).
A86's macro processor is the best, achieving an optimal balance
between ease of use and raw power. Its looping and text
concatenation abilities let you define sophisticated macros,
whose calls look just like the machine instructions that
surround them; without the clumsy invocation syntax required by
other macro processors of A86's power.
A86 provides clear, English error messages, given right at the
point in the source code where A86 detected the error. The
messages are actually inserted into your source file, where you
can read them and correct your code at the same time. You can
remove the messages yourself, or A86 will remove them for you
when it reassembles the file. (Fear not: your original source
is preserved in x.OLD if you want it. Or you can disable this
feature and send error messages to a .ERR file.)
A86 provides a full complement of assembly time expression
arithmetic operators, compatible with Intel/IBM assemblers.
A86 also provides 4-function floating point arithmetic in
assembly time expressions used for floating point
initializations (an A86-exclusive feature).
A86 assembles the floating point instruction set of the
8087/287/387/IIT coprocessors, and the extended instruction
set of the 186/286/NEC series, including the NEC-unique
instructions. The 32-bit version,
assembles all the new instructions through the Pentium III
and AMD Athlon processors.
A86 has a built-in source file library feature. Any undefined
procedures or macros in your program are automatically searched for in a
special library file A86.LIB, and the associated source files
are automatically assembled. This makes access to library
routines as effortless as it is in the "C" programming
language. A sample A86.LIB file is included in the
shareware version of the package. Only registered users should
have the tool A86LIB, with which you can create your own library
A86 has a powerful listing facility, allowing you complete
flexibility over the format of your listings, and including
an extremely sophisticated algorithm for automatically generating
page breaks at sensible places.
A86 works with an associated symbolic debugger,
the finest development environment available for the PC.
Click here for purchase information.
The primary design criterion for D86/D386 is ease of use. This is
reflected in the most notable features of D86 and D386:
You don't need to ask D86 what the values of registers and
flags are. They are there, automatically, at a fixed location
on the screen.
You don't need to ask D86 where in your program you are
stopped. A disassembly is always generated, at another fixed
location on the screen. The disassembly gives a hefty chunk of
your program, not just the single instruction you are at. A
cursor next to the disassembly marks the current location. The
disassembly chunk remains fixed as you step though it, allowing
you to follow the flow of the program much more easily. If you
wrote the program using A86, the disassembly is symbolic,
giving instruction operands by name, and labelling disassembly
locations when possible.
You don't need to ask D86 what is on the machine stack. A
display of the top elements of the stack is always generated,
at yet another fixed location on the screen.
You can set up windows into memory, displaying memory contents
in a variety of types. The types can even be mixed, to display
complicated structures. The windows will stay at the same
location until you turn them off, allowing you to watch what
your program is doing to those memory locations.
D86 will generate
complete window of the state of the floating-point coprocessor. The
values of the stack
elements are in a readable decimal format, with suppression of
unneccessary zeroes, and scientific notation only if
necessary. The 32-bit version D386 also includes display Windows
for the MMX registers, SIMD registers, and 3DNow packed values,
whenever it is running on a processor that supports any of those
You can, at any time, enable a help-window, to guide you
through debugger commands. You will be astounded by the
sophistication of this help-facility, especially since other
debuggers offer no on-line help whatsoever.
All of the above-mentioned windows, except for the last two,
exist on the screen at the same time. You don't have to switch
You can single-step your program with single keystrokes, rather
than sequences of arcane commands. There are several flavors
of single-step keys, clustered together on the function-keypad.
This, combined with the automatic nature of the display, allows
you to single-step very quickly. You feel like you are
actually watching your program run.
Much of D86's command language is simply the A86 assembly
language itself. You can type in any A86 instruction, to be
executed immediately. You use this to set registers and
variables, perform arithmetic, jump to another location, etc.
The immediate-execution feature makes D86 the most effective
tool available for teaching 86 architecture: the student can
watch the effects of instructions on registers, flags, and
You can patch programs in memory, using the full power of the
A86 assembly language.
Click here for purchase information.
A86 main page ---
Eric's home page ---