Assembly Language Programming
Introduction
Programs written in high-level languages are traditionally converted by compilers into assembly language, which is turned into machine language programs – sequences of 1’s and 0’s – by an assembler.
Even today, with very good quality compilers available, there is the need for programmers to understand assembly language.
First, it provides programmers with a better understanding of the compiler and its constraints.
Second, on occasion, programmers find themselves needing to program directly in assembly language in order to meet constraints in execution speed or space.
ACSL chose to define its own assembly language rather than use a “real” one in order to eliminate the many sticky details associated with real languages. The basic concepts of our ACSL topic description are common to all assembly languages.
Execution starts at the first line of the program and continues sequentially, except for branch instructions (BG, BE, BL, BU), until the end instruction (END) is encountered.
The result of each operation is stored in a special word of memory, called the “accumulator” (ACC).
The initial value of the ACC is 0. Each line of an assembly language program has the following fields:
LABEL OPCODE LOC1
Run
The LABEL field, if present, is an alphanumeric character string beginning in the first column.
A label must begin with an alphabetic character(A through Z, or a through z), and labels are case-sensitive.
Valid OPCODEs are listed in the chart below; they are also case-sensitive and uppercase.
Opcodes are reserved words of the language and (the uppercase version) many not be used a label.
The LOC field is either a reference to a label or immediate data.
For example, LOAD A would put the contents referenced by the label A into the ACC;
LOAD =123 would store the value 123 in the ACC.
Only those instructions that do not modify the LOC field can use the “immediate data” format.
In the following chart, they are indicated by an asterisk in the first column.