Symbolic Macro Assembly LanguageSMAL32, the 32-bit version
Part of
the Cross Development Support Tool Collection
|
Permission to copy this material without fee is granted, provided that this copyright notice is included in the copy, and that authorship is attributed to Douglas W. Jones and any other authors whose revisions are included in the copy.ACM CR Categories and Subject Descriptors: D.3.2 [Programming Languages]: Language Classifications - macro and assembly languages; D.4.9 [Operating Systems]: Systems Programs and Utilities - linkers; loaders
SMAL32 is a symbolic macro assembly language for 32 bit computers. The assembler has no built-in knowledge of any machine's instruction set. In addition to providing the basic assembly functions the SMAL32 assembler provides a powerful macro facility and a linkage editor facility supporting separate assembly, subprogram libraries, and shared common blocks. Assembler and linker output may be either absolute or relocatable, and the object language is encoded in an easily interpreted textual form.
SMAL32 is a variant of Machine Independent SMAL, originally developed at the University of Iowa as a tool for teaching and research. Assemblers in the SMAL family are written in highly machine independent Pascal or C, and have been successfully transported between a number of Pascal and C implementations.
Thanks are due to all of my students in Introduction to Systems Software, and Introduction to Computer Architecture who have worked with various versions of the SMAL assembler starting in the early 1980's. Eric Wedel, in particular, produced the first 32 bit version of SMAL, supporting the National 32000 family of machines.
SMAL32 provides assembly language support for a generic 32 bit machine, minus any special provisions to support any specific machine. The SMAL32 assembler supports the assembly format and directives of Machine Independent SMAL, a symbolic macro assembly language developed at the University of Iowa as a tool for teaching and research. It is a complete macro assembly language and linkage editor system in a form which may be easily transported to run on different host systems.
The object code produced by the SMAL32 assembler is relocatable, and it includes support for external symbols and FORTRAN common blocks. Additionally, the assembler serves as a linker for SMAL32 object files; as such, it produces an absolute or relocatable textual object code which may be easily hand loaded, or loaded by a loader written in about 60 lines of mid-level language code.
The SMAL32 assembler should run on any machine supporting 32 bit two's complement integers. The C version supports standard ASCII with 8 bit characters only. It does not dynamically allocate storage on the heap, but it uses recursion; this may limit the languages into which it may easily be translated.
This document is an adaptation of: