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

Transcript of Chapter 11 Implementing an Assembler and a Linker Using C++ and Java.

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