Assembler is a program for converting instructions written in low-level assembly code into relocatable machine code and generating along information for the loader. It is necessary to convert user-written programs into machinery code. This is called a translation of a high-level language to a low-level that is machinery language. This type of translation is performed with the help of system software. An Assembler can be defined as a program that translates an assembly language program into a machine language program. Self-assembler is a program that runs on a computer and produces the machine codes for the same computer or same machine. It is also known as a resident assembler. A cross-assembler is an assembler that runs on a computer and produces machine codes for other computers.
The assembler generates instructions by evaluating the mnemonics (symbols) in the operation field and finding the value of symbols and literals to produce machine code. On the basis of this functionality, assembler has two types:
Assembler divides tasks into two passes:
Firstly, We will take a small assembly language program to understand the working in their respective passes. Assembly language statement format:
[Label] [Opcode] [operand]
Example: M ADD R1, ='3'
where, M - Label; ADD - symbolic opcode;
R1 - symbolic register operand; (='3') - Literal
Assembly Program:
Label Op-code operand LC value(Location counter)
JOHN START 200
MOVER R1, ='3' 200
MOVEM R1, X 201
L1 MOVER R2, ='2' 202
LTORG 203
X DS 1 204
END 205
Let’s take a look at how this program is working:
Define Symbols and literal tables with their addresses. Note: Literal address is specified by LTORG or END.
Step-1: START 200
(here no symbol or literal is found so both table would be empty)
Step-2: MOVER R1, =’3′ 200
( =’3′ is a literal so a literal table is made)
Literal | Address |
---|---|
=’3′ | – – – |
Step-3: MOVEM R1, X 201
X is a symbol referred before its declaration so it is stored in the symbol table with a blank address field.
Symbol | Address |
---|---|
X | – – – |
Step-4: L1 MOVER R2, =’2′ 202
L1 is a label and =’2′ is a literal so store them in respective tables
Symbol | Address |
---|---|
X | – – – |
L1 | 202 |
Literal | Address |
---|---|
=’3′ | – – – |
=’2′ | – – – |
Step-5: LTORG 203
Assign an address to the first literal specified by LC value, i.e., 203
Literal | Address |
---|---|
=’3′ | 203 |
=’2′ | – – – |
Step-6: X DS 1 204
It is a data declaration statement i.e. X is assigned a data space of 1. But X is a symbol that was referred to earlier in step 3 and defined in step 6. This condition is called a Forward Reference Problem where the variable is referred prior to its declaration and can be solved by back-patching. So now the assembler will assign X the address specified by the LC value of the current step.
Symbol | Address |
---|---|
X | 204 |
L1 | 202 |
Step-7: END 205
The program finishes execution and the remaining literal will get the address specified by the LC value of the END instruction. Here is the complete symbol and literal table made by pass-1 of the assembler.
Symbol | Address |
---|---|
X | 204 |
L1 | 202 |
Literal | Address |
---|---|
=’3′ | 203 |
=’2′ | 205 |
Now tables generated by pass 1 along with their LC value will go to pass 2 of the assembler for further processing of pseudo-opcodes and machine op-codes.
Pass-2 of the assembler generates machine code by converting symbolic machine-opcodes into their respective bit configuration(machine understandable form). It stores all machine-opcodes in the MOT table (op-code table) with symbolic code, their length, and their bit configuration. It will also process pseudo-ops and will store them in the POT table(pseudo-op table). Various Databases required by pass-2:
1. MOT table(machine opcode table)
2. POT table(pseudo opcode table)
3. Base table(storing value of base register)
4. LC ( location counter)
Take a look at the flowchart to understand:
As a whole assembler works as:
Assembler is a program that converts Assembly Language into machine language . There are two types of assemblers on the basis of a number of phases used to convert to machine code.
One-Pass Assembler converts the whole conversion of assembly code into machine code in one pass or one go. On the other hand, Multi-Pass-Assembler takes multiple passes to convert assembly code into machine language.
Compiler is used to convert high-level programming language into machine language but assembler is used to convert assembly language into machine language. Both term are relevant in context to program execution.
Function of an Assembler is to convert Assembly Language into machine code that is in binary code. Function of assembler is same as Compiler that is produce executable code.
Assemblers put together parts and pieces to create finished components. They work with different parts and subassemblies to build the final products.