Assembly Language
Assembly Language
Assembler
Assembly language is converted into executable machine code by a utility program
referred to as an assembler; the conversion process is referred to as assembly, or
assembling the code.
Assembler Directives
Assembler directives are pseudo instructions
o They will not be translated into machine instructions.
o They only provide instruction/direction/information to the assembler.
Basic assembler directives :
o START : Specify name and starting address for the program
o END : Indicate the end of the source program.
o EQU : The EQU directive is used to replace a number by a symbol. For
example: MAXIMUM EQU 99. After using this directive, every appearance
of the label “MAXIMUM” in the program will be interpreted by the
assembler as the number 99 (MAXIMUM = 99). Symbols may be defined
this way only once in the program. The EQU directive is mostly used at the
beginning of the program.
Instruction formats
Addressing modes · Direct addressing (address of operand is given in instruction
itself) · Register addressing (one of the operand is general purpose register) ·
Register indirect addressing (address of operand is specified by register pair) ·
Immediate addressing (operand - data is specified in the instruction itself) ·
Implicit addressing (mostly the operation operates on the contents of
accumulator)
Literal
It is convenient for the programmer to be able to write the value of a constant operand
as a part of the instruction that uses it. Such an operand is called a literal. In this
assembler language notation, a literal is identified with the prefix „=‟, which is followed
by a specification of the literal value.
One-pass assemblers
A one pass assembler passes over the source file exactly once, in the same pass
collecting the labels, resolving future references and doing the actual assembly. The
difficult part is to resolve future label references (the problem of forward referencing)
and assemble code in one pass
Two-pass assemblers
The two pass assembler performs two passes over the source program.
In the first pass, it reads the entire source program, looking only for label definitions. All
the labels are collected, assigned address, and placed in the symbol table in this pass,
no instructions as assembled and at the end the symbol table should contain all the
labels defined in the program. To assign address to labels, the assembles maintains a
Location Counter (LC).
In the second pass the instructions are again read and are assembled using the symbol
table. Basically, the assembler goes through the program one line at a time, and
generates machine code for that instruction. Then the assembler proceeds to the next
instruction. In this way, the entire machine code program is created. For most
instructions this process works fine, for example for instructions that only reference
registers, the assembler can compute the machine code easily, since the assembler
knows where the registers are.
A one pass assembler passes over the source file exactly once, in the same pass
collecting the labels, resolving future references and doing the actual assembly. The
difficult part is to resolve future label references (the problem of forward referencing)
and assemble code in one pass. The one pass assembler prepares an intermediate file,
which is used as input by the two pass assembler.
A two pass assembler does two passes over the source file (the second pass can be over
an intermediate file generated in the first pass of the assembler). In the first pass all it
does is looks for label definitions and introduces them in the symbol table (a dynamic
table which includes the label name and address for each label in the source program).
In the second pass, after the symbol table is complete, it does the actual assembly by
translating the operations into machine codes and so on.