Version 8 of Assembler

Updated 2013-11-26 08:35:59 by suchenwi

An Assembler is a program that converts a human-readable (and, more particularly, human-writable) form of machine instructions (often called Assembly Language or Assembler) into a machine-readable form.

For the Tcl Assembly language corresponding to its bytecodes, see TAL.

There are often several different machine-readable forms of output possible.

  • Linkable, absolute location formats
  • Nonlinkable, absolute location formats
  • Linkable, relocatable formats
  • Nonlinkable, relocatable formats

The key question with regard to the machine-readable format is, What are the capabilities of the tool chain programs that come after the assembler? There must be a loader (which loads the code into the executing machine's memory); there might be a linker (which combines different programs together into a single loadable program). The loader might be an absolute or relocating loader. These two processing programs are often underspecified and ignored, but they are crucially important to real program operation. -- escargo 9 Aug 2004

DKF: The #1 feature of assemblers is that they work out jump offsets and addresses for you. (I've done it by hand for the Z80, but it is very difficult.)

The second feature of assemblers for some modern processors is that they can do certain kinds of ugly low-level peephole optimizations. Exactly how much varies, but even so.

Third obvious feature is that they save you from having to look up each machine code word to use the instruction. :^)

CL has been thinking about writing an explanation of why Tcl and assembly language can be good partners, a practice briefly described in, for example, "Programming down to the Silicon" [L1 ].

In the meantime, here's a reference to the Mac OS X Assembler Guide [L2 ].

IA-32/x86 assembler in Tcl

Assembly code example

See also Playing Assembler for some 8080 memories...