0% found this document useful (0 votes)
65 views17 pages

Cdss Assignment 2

The document discusses the functions of an assembler, linker, and loader. An assembler converts assembly language into machine code. A linker combines multiple object files into a single executable program by resolving symbols. A loader performs tasks like allocating memory, linking code and data, relocating addresses, and loading the machine code into memory to prepare it for execution. The document also describes absolute and relocating loaders. An absolute loader directly places code at specified addresses, while a relocating loader can adjust addresses as needed to allow code to be loaded anywhere in memory.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
65 views17 pages

Cdss Assignment 2

The document discusses the functions of an assembler, linker, and loader. An assembler converts assembly language into machine code. A linker combines multiple object files into a single executable program by resolving symbols. A loader performs tasks like allocating memory, linking code and data, relocating addresses, and loading the machine code into memory to prepare it for execution. The document also describes absolute and relocating loaders. An absolute loader directly places code at specified addresses, while a relocating loader can adjust addresses as needed to allow code to be loaded anywhere in memory.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 17

DAYANANDA SAGAR UNIVERSITY

ASSIGNMENT 2

TOPIC: INTRODUCTION TO ASSEMBLER,LINKER,LOADER

SUBJECT: CDSS

SUBMITTED BY: SHIVANANDA B USN: ENG17CS0207


1. explain function of assembler ,linker,loader
 Assembler

An assembler is a program that converts assembly language into machine code. It takes the basic
commands and operations from assembly code and converts them into binary code that can be recognized
by a specific type of processor.

Assemblers are similar to compilers in that they produce executable code. However, assemblers are more
simplistic since they only convert low-level code (assembly language) to machine code. Since each
assembly language is designed for a specific processor, assembling a program is performed using a simple
one-to-one mapping from assembly code to machine code. Compilers, on the other hand, must convert
generic high-level source code into machine code for a specific processor.

Most programs are written in high-level programming languages and are compiled directly to machine
code using a compiler. However, in some cases, assembly code may be used to customize functions and
ensure they perform in a specific way. Therefore, IDEs often include assemblers so they can build
programs from both high and low-level languages.

Linker:
For most compilers, each object file is the result of compiling one input source code file. When a program
comprises multiple object files, the linker combines these files into a unified executable program,
resolving the symbols as it goes along.

Linkers can take objects from a collection called a library:

Some linkers do not include the whole library in the output they only include its symbols that ale
referenced from other object files or libraries. Libraries exist for diverse purposes, and one or more
system libraries are usually linked in by default.

The linker also takes care of arranging the objects in a program’s address space. This may involve
relocating code that assumes a specific base address to another base. Since a compiler seldom knows
where an object will reside, it often assumes a fixed base location (for example, zero). Relocating machine
code may involve targeting of absolute jumps, loads and stores

loader

The loader is responsible for the activities such as allocation,linking,relocation,loading.

ALLOCATION: it allocates the space for program in the memory, by calculating the size of the program.

LINKING: it resolves the symbolic references (code/data) between the object modules by assigning all
the user subroutine and library subroutine addresses.

RELOCATION: There are some address dependent locations in the program such as address constants
must be adusted acording to allocated space such activity done by loader.

LOADING:finally it places the machine instructions and data of corresponding programs and subroutines
into the memory. Thus program now becomes ready for execution

2. explain about absolute loader and bootstrap,relocation loader

Absolute loader
Absolute Loader is a kind of loader in which relocated object files are created, loader accepts these files
and places them at specified locations in the memory. This type of loader is called absolute because no
relocation information is needed rather it is obtained from the programmer or assembler.

The starting address of every module is known to the programmer this corresponding address is stored in
the object file, then task of loader becomes very simple and that is to simply place the executable form of
the machine instructions at the locations mentioned in the object file.

The programmer should take care of two things :

LOADERS

First, Specification of starting address of each module to be used.

If some modification is done in some module then the length of that module may vary.

This causes a change in the starting address of immediate next modules, its then programmer duty to
make necessary changes in the starting addresses of respective modules.

Second, while branching from one segment to another the absolute starting address of respective
module is to be known by the programmer so that such address can be specified at respective JMP
instruction.

The record in the object code is of the following form

Header record

Text record

End record

The absolute loader accepts this object module from assembler and by reading the information about the
starting address, it will place the subroutine at specified address in the memory.

Ex: H^COPY ^001000^00107A

T^001000^1E^141033^482039……… T^002039^1E^041030^001030^E0205D….. E^001000

Memory

Locations CONTENT

0000 xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx

0010

1000 14103348 20390010 36281030 30101548

1010

:
2030 xxxxxxxx xxxxxxxx XX041030 001030E0

The object code is divided into 1byte(hex notation) at one mem locations

For first text record:

1000- 14

1001 10

1002 33

1003 48

100F->48

Bootstramp loader

When a computer is first turned on or restarted, a special type of absolute loader,called bootstrap loader is
executed. This bootstrap loads the first program to be run by the computer -- usually an operating system.
The bootstrap itself begins at address 0. It loads the OS starting address 0x80. No header record or control
information, the object code is consecutive bytes of memory.

Various characteristics of bootstrap loader

The bootstrap loader is a small program and it should be fitted in the ROM.

The bootstrap loader must load the necessary portions of OS in the main memory

The initial address at which the bootstrap loader is to be loaded is generally the lowest for example at
location 0000 or at the highest location and not a intermediate location.

BOOTSTRAP LOADER FOR SIC/XE

Begin

X=0x80 (the address of the next memory location to be loaded)

BOOT START 0

CLEAR A

LDX #128 //Initialize the reg X to hex 80

LOOP JSUB GETC //read hex digit from program being loaded

RMO A,S //save in reg S

SHIFTL S,4 //move to high order 4 bits of byte


JSUB GETC //get next hex digit

ADDR S,A //combine digits to form one byte

STCH 0,X //store at address in reg X

TIXR X,X //add 1 to memory address being loaded

J LOOP //loop until end of input is reached

It uses a subroutine GETC, which is

GETC TD INPUT //test input device

JEQ GETC //loop until ready

RD INPUT //read character

COMP #4 //if char is hex 04

JEQ 80 //jump to start of program just loaded

COMP #48 //compare to hex 30

JLT GETC //skip characters less than ‘0’

SUB #48 //subtract hex 30 from ASCII code

COMP #10 //if result less than 10, conversion done

JLT RETURN

SUB #7 //otherwise subtract 7 more(hex digits ‘A’ Through ‘F’.

RETURN RSUB

INPUT BYTE X’F1’

END LOOP

GETC A read one character

if A=0x04 then jump to 0x80

if A

ELSE

A A-48 (0x30)

if A

ELSE
A A-7

return

Absolute loader is simple and efficient, but the scheme has potential disadvantages One of the most
disadvantage is the programmer has to specify the actual starting address, from where the program to be
loaded. This does not create difficulty, if one program to run, but not for several programs. Further it is
difficult to use subroutine libraries efficiently.

This needs the design and implementation of a more complex loader. The loader must provide program
relocation and linking, as well as simple loading functions.

Relocation

The concept of program relocation is, the execution of the object program using any part of the available
and sufficient memory. The object program is loaded into memory wherever there is

room for it. The actual starting address of the object program is not known until load time. Relocation
provides the efficient sharing of the machine with larger memory and when several independent programs
are to be run together. It also supports the use of subroutine libraries efficiently. Loaders that allow for
program relocation are called relocating loaders or relative

loaders.

There are two methods for specifying relocation as a part of object program and those are

1. Modification record (SIC/XE program)

2. Relocation bits(SIC program)

1. Modification record:

a. For small number of relocation this method is useful. This method is used for

SIC/XE program. Relative or immediate addressing is used in this method.

b. Modification record format

Col 1: M

Col 2-7 Starting location of the address field to be modified relative to the beginning

of the program(hexadecimal)

Col 8-9 length of the address field to be modified, in half bytes(hexadecimal).

Col 10:flag +or – Col 11: Name of the segment.

COPY START 0

0000 STL RETADR 17202D

0003 LDB #LENGTH 69202D


0006 CLOOP +JSUB RDREC 4B101036

:::::

0013 +JSUB WDREC 4B10105D

:::::

0026 +JSUB WDREC 4B10106D

LOADERS

1036 RDREC CLEAR X B410

:::::

105D WDREC CLEAR X B410

:::::

OBJECT PROGRAM

H^COPY ^000000^001077

T^000000^1D^17202D^69202D……..

M^000007^05+COPY

M^000014^05+COPY

M^000027^05+COPY

E^000000

Disadvantage:This method is not well suited for SIC program . because these programs will

require lot of modified records and then the size of object program will get increased.

2. RELOCATION BITS The relocation bit method is used for simple machines.

Relocation bit is 0: no modification is necessary, and is 1: modification is needed.

This is specified in the columns 10-12 of text record (T),

The format of text record, along with relocation bits is as follows.

Text record

col 1: T

col 2-7: starting address

col 8-9: length (byte)


col 10-12: relocation bits

col 13-72: object code

Twelve-bit mask is used in each Text record (col:10-12 – relocation bits), since each text record

contains less than 12 words, unused words are set to 0, and, any value that is to be modified

during relocation must coincide with one of these 3-byte segments. For absolute loader, there are

no relocation bits column 10-69 contains object code. The object program with relocation by bit

mask is as shown below. Observe FFC - means all ten words are to be modified and, E00 -

means first three records are to be modified.

LOCCTR LABEL OPCODE OPERAND OBJ CODE RELOCATION BIT

COPY START 0000

0000 FIRST STL RETADR 140033 1

0003 CLOOP JSUB RDREC 481039 1

0006 LDA LENGTH 000036 1

0009 COMP ZERO 280030 1

000C JEQ ENDFIL 300015 1

000F JSUB WRREC 481061 1

0012 J CLOOP 3C0003 1

LOADERS

Page 7

0015 ENDFIL LDA EOF 00002A 1

0018 STA BUFFER 0C0039 1

001B LDA THREE 00002D 1

001E STA LENGTH 0C0036 1

0021 JSUB WRREC 481061 1

0024 LDA RETADR 080033 1

0027 RSUB 4C0000 0

002A EOF BYTE C’EOF’ 454F46 0


002D THREE WORD 3 000003 0

0030 ZERO WORD 0 000000 0

For example :

Text record: T^000000^1E^140033^481039…………………….^00002D

1111 .1111 1110 (FFE)

So new text record after adding relocation bit:

T^000000^1E^FFE^140033^481039…………………….^00002D

T^00001E^15^0C0036…………^000000

1110 0000 0000

So new text record after adding relocation bit:

T^00001E^15^E00^0C0036…………^000000

3. explain about single pass,two pass and multi pass assembler with code example
and object file

Multi_Pass Assembler:

For a two pass assembler, forward references in symbol definition are not allowed:

ALPHA EQU BETA

BETA EQU DELTA

DELTA RESW 1

Symbol definition must be completed in pass 1.

Prohibiting forward references in symbol definition is not a serious inconvenience.Forward references


tend to create difficulty for a person reading the program.Implementation Issues for Modified Two-Pass
Assembler:

Implementation Issues when forward referencing is encountered in Symbol Defining statements :

For a forward reference in symbol definition, we store in the SYMTAB:

The symbol name

The defining expression

The number of undefined symbols in the defining expression


The undefined symbol (marked with a flag *) associated with a list of symbols

depend on this undefined symbol.

When a symbol is defined, we can recursively evaluate the symbol expressions depending on the
newly defined symbol.

Multi-Pass Assembler Example Program

Explain the algorithm for one pass assembler.

ALGORITHM:

begin

read first input line

if OPCODE = „START‟ then

begin

save #[OPERAND] as starting address

initialize LOCCTR as starting address

read next input line

end {if start}

else initialize LOCCTR to 0

while OPCODE = „END‟ do


begin

if there is not a comment line then

begin

if there is a symbol in the label field then

begin

search SYMTAB for LABEL

if found then

begin

if symbol value as null

set symbol value as LOCCTR and search

the linked list with the corresponding operand PTR addresses and generated operand

addresses as corresponding symbol values

set symbol value as LOCCTR in symbol table and delete the linked list

end

else

insert {LABEL,LOCCTR} into SYMTAB

end

search OPTAB for OPCODE

if found then

begin

search SYMTAB for OPERAND address

if found then

if symbol value not equal to null then

store symbol value as OPERAND address

else

insert at the end of the linked list

with a node with address as LOCCTR


else

insert{symbol name, null}

add 3 to LOCCTR

end

else if OPCODE=‟WORD‟ then

add 3 to LOCCTR and convert comment to object code

UNIT 2: ASSEMBLER

else if OPCODE=‟RESW‟ then

add 3* #[OPERAND] to LOCCTR

else if OPCODE=‟RESB‟ then

add #[OPERAND] to LOCCTR

else if OPCODE=‟BYTE‟ then

begin

find length of constant in bytes

add length to LOCCTR

convert constant to object code

end

if object code will not fit into current text record then

begin

write text record to object program

initialize new text record

end

add object code to text record

end

write listing line

read next input line

end
write last text record to object program

write end record to object program

write last listing line

end{Pass 1}

ii) Two pass assembler :


 Processing the source program into two passes.
 The internal tables and subroutines that are used only during pass 1.
 The SYMTAB, LITTAB and OPTAB are used by both passes.
 The main problems to assemble a program in one pass involves forward references.
 Pass 2: Generate data values defined by BYTE, WORD, etc.
 Process the assembler directives not done in Pass 1
 Write the object program and the assembly listing

4. Explain about following


A. symbols,assembler directory
B. LTORG,ORG,EQU
LTORG

The LTORG directive instructs the assembler to assemble the current literal pool immediately.

Syntax
LTORG
Usage
The assembler assembles the current literal pool at the end of every code section. The end of a code
section is determined by the AREA directive at the beginning of the following section, or the end of the
assembly.
These default literal pools can sometimes be out of range of some LDR, VLDR,
and WLDR pseudo-instructions. Use LTORG to ensure that a literal pool is assembled within range.
Large programs can require several literal pools. Place LTORG directives after unconditional branches or
subroutine return instructions so that the processor does not attempt to execute the constants as
instructions.
The assembler word-aligns data in literal pools.
EQU - The equate directive is used to substitute values for symbols or labels. The format is 'label: EQU
value', so whenever the assembler encounters 'label', it replaces this with 'value'. This is especially handy
for improving program readability. For instance, we could write 'ldx #$0032', or we could use 'portb:
EQU $0032' followed later by 'ldx #portb'. The latter 'ldx' instruction is more readable than the former.
The EQU directive only tells the assembler to substitute a value for a symbol or label, and doesn't involve
any type of ROM or RAM. EQU directives are typically placed at the beginning of an assembly program.
Examples:

portb:EQU$0032; port B is located at address $0032

portb_ddrEQUportb + 2; port B Data Direction Register = $0034

kb:EQU$1024; kb = 1024 bytes


ORG - The origin directive sets the location counter to the value specified. Subsequent statements are
assigned memory locations starting with the new location counter value. The location counter is a counter
in the assembler program that is used to assign storage addresses for the program. For instance, it will set
the location in memory where the constants are stored, and where the executable machine code begins. As
the program is assembled, the location counter keeps track of the current location in storage. Note that the
location counter is a software construct defined in the assembler program, and exists only during the
assembly process. It is NOT the same as the program counter, which is an actual register in the HCS12
that keeps track of the address of the current instruction as an executable is running on the HCS12. Note
that unlike labels, ORG must be indented (it must have whitespace in the leading columns).
Example:

ORG$2000; note that ORG is INDENTED

C. Data structure in assembler

ASSEMBLER ALGORITHM AND DATA STRUCTURES


Our simple assembler uses two major internal data structure; the Operation Code table (OPTAB) and the
Symbol Table (SYMTAB). OPTAB is used to look up mnemonic operation codes and translate them to
their machine language equivalents. SYMTAB is used to store values(addresses)assigned to labels.
We also need a Location counter LOCCTR. This is a variable that is used to help in the assignment of
addresses. LOCCTR is initialized to the beginning address specified in the START statement . After each
source statement is processed, the length of the assembled instructions or date area to be generated is
added to LOCCTR. Thus whenever we reach a label in the source program , the current value of
LOCCTR gives the address to be associated with that label.

The Operation code Table must contain the mnemonic operation code and its machine language
equivalent. In more complex assembles , this table also contains information about instruction format and
length.During Pass 1 , OPTAB is used to look up and validate opearation coded in the source program. In
pass 2 , it is used to translate the operation codes to machine language. Actually , in our simple SIC
assembler , both of these processes could be done together in either PASS 1 or PASS 2. However , for a
machine that has instructions of different lengths, we must search OPTAB in the first pass to find the
instructions length for incrementing LOCCTR. Likewise , we must have the information from OPTAB is
PASS 2 to tell us which instruction format to use in assembling the instruction ,and my peculiarities of the
object code instruction. We have chosen to retain this structure in the current discussion because it is
typical of most real assembles.

5.
1. Explain difference between 1 pass Assembler and load and go assembler.
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 one pass assembler prepares an
intermediate file, which is used as input by the go assembler.

2. Explain different addressing mode in SIC and SICXE

Absolute (Direct) Mode

The address of the operand is embedded in the instruction code.


Example: (SPIM)
beta: .word 2000
lw $11, beta# load word (32 -bit quantity) at address beta into
register $11 # address of the word is embedded in the instruction
code # (register $11 will receive value 2000)

Indirect Mode

The effective address of the operand is the contents of a register or main memory location,
location whose address appears in the instruction. Indirection is noted by placing the
name of the register or the memory address given in the instruction in parentheses. The
register or memory location that contains the address of the operand is a pointer. When an
execution takes place in such mode, instruction may be told to go to a specific address.
Once it's there, instead of finding an operand, it finds an address where the operand is
located.

Immediate Mode

The operand is an immediate value is stored explicitly in the instruction: Example: SPIM
( opcode dest, source)

li $11, 3 // loads the immediate value of 3 into register $11 li $9, 8 // loads the immediate
value of 8 into register $9

Example : (textbook uses instructions type like, opcode source, dest) move #200, R0; //
move immediate value 200 in register R0

Index Mode

The address of the operand is obtained by adding to the contents of the general register
(called index register) a constant value. The number of the index register and the constant
value are included in the instruction code. Index Mode is used to access an array whose
elements are in successive memory locations. The content of the instruction code,
represents the starting address of the array and the value of the index register, and the
index value of the current element. By incrementing or decrementing index register
different element of the array can be accessed.

3. How literals are handled by Assembler.

The assembler assembles the data item specified in a literal into a literal pool, The literals
processed by the assembler are collected and placed in a special area called the literal pool.
You can control the positioning of the literal pool. Unless otherwise specified, the literal
pool is placed at the end of the first control section.
A.\

You might also like