Assembly Language Software Development

Assembly Language Processes that We Have Developed

  • Device Drivers
  • Interrupt Service Routines
  • Real Time Embedded Systems

Assemblers that We Have Used

  • 360/370
  • Z80/8080
  • x86
  • 68000

The use of assembly language began in the 1950s to free programmers from the nuts of bolts of memorizing machine language opcodes, calculating address references, and other minutia involved in writing machine language programs. Assembly languages used user friendly mnemonic opcodes and user friendly address labels that created programs for which there is a one to one correspondence between an assembly language program and its equivalent machine language program. A computer program called an assembler translates an assembly language program into the equivalent machine language program.

Processes that May Benefit from Being Written in Assembly Language

  • CPU bound processes in need of performance enhancement, such as device drivers or interrupt service routines
  • Processes that use machine instructions unique to a given processor
  • Processes that run on a processor that does not have a high level language written for it

Assembler programs are unique to a specific processor and may only assemble a program for a specific type of processor. The algorithm implemented for a specific processor may have be reimplemented for a different type of processor. Assembly language programs were not likely to be portable from one processor to other processors. High level programming language began to be introduced in the late 1950s and 1960s allowing the programmer to begin writing software that could be written and compiled for one processor and recompiled for another processor. The resultant machine language program was probably not as robust and had a reduced performance from the program written in assembly language, but development time was greatly reduced. Sometimes the reduction in performance of the high level language was negligible, especially for I/O bound processes. The delay, caused by waiting for I/O to complete, could likely be measured on the order of milliseconds or more, while the degradation of performance from programs using high level languages was on the order of microseconds or tens of microseconds. Often the slop, or latency, in the I/O process was greater than the degradation of performance in programs written in a high level language. Today, the productivity of high level languages have greatly improved and the degradation in performance has become less and less.

Assembly languages are defined for each type of processor and are documented in data books published by the processor's manufacturer or designer. Today, families of processors share the same machine language and therefore can use the same assemblers. Indeed, often an assembly language is often shared by multiple processor manufacturers. Still assembly languages may be useful in improving the performance of CPU bound processes, like interrupt service routines that do not involve suspending for I/O to complete. Sometimes, the use of a processor's registers instead of using memory on the data bus can reduce the time involved in completing short processes. In addition, some processors may have special machine instructions that are not be utilized by machine language programs produced by the compiler when compiling code produced by the use of high level languages. Assembly language programs may be useful in enhancing performance of these types of applications, such has device drivers, real time applications, interrupt service routines, and embedded applications.