chapter 11 implementing an assembler and a linker using c++ and java

38
Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Upload: courtney-owens

Post on 01-Apr-2015

233 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Chapter 11

Implementing an Assembler and a Linker Using C++ and Java

Page 2: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

An assembler must handle

Page 3: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java
Page 4: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java
Page 5: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Assembler pseudocode—pass 1

Page 6: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Pass 2

Page 7: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Symbol tableHow to implement?

Page 8: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Relationship of opcode index (position of its mnemonic in an

alphabetized table) and the opcode

Page 9: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Computing an opcode from its table index

Page 10: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Opcode table in Java

Page 11: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Implement the symbol table using the SymbolTable class

Page 12: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java
Page 13: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Assembler should check for duplicate labels when making an entry into the symbol table.

Page 14: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Text files

Contain ASCII codes exclusively.

A “.mas” file is an example of a text file.

Page 15: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Binary files

• Do not contain ASCII codes exclusively.

• “.mob” and “.mac” files are binary files.

• No translation of end-of-line markers occurs during input or output of binary files.

Page 16: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Creates text file.

Page 17: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Creates binary file

Page 18: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Creates text file

Page 19: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Creates binary file

Page 20: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Binary input file in Java

Page 21: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Binary input file in C++

Page 22: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Reading the input text file

Page 23: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Creating an R entry

Page 24: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

assemble method in Assembler class constructs machine word

Page 25: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Constructing the machine word requires shifting. For example,

for a 4-bit opcode:

Machine_word = (short)(opcode <<12) | operand_value;

Page 26: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java
Page 27: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

To handle endian problem (e.g., if assembler written in Java and linker in C++ on a PC).

Page 28: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Using reverseOrder

Use

Page 29: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java
Page 30: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Linker should detect these errors

Page 31: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

As linker loads modules, it keeps track of its module’s starting address

Page 32: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Implement the P, E, R, and S tables using classes.

Page 33: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java
Page 34: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Implement the text buffer using a class.

Page 35: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java
Page 36: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Linker pseudocode—phase 1

Page 37: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java
Page 38: Chapter 11 Implementing an Assembler and a Linker Using C++ and Java

Processing modules from a library