This is a linker for a made up assembly language. The machine has a memory with 216 16-bit words, a program counter register, PC and an accumulator registerm, ACC, both with 16 bits. There are three instruction types:
- Opcode
- Opcode Address
- Opcode Address Address
For more info on the machine, check the assembler.
This program depends on cmake, make and g++ to build. It uses C++11. Please install cmake, make and C++11 before proceeding.
To compile the project, follow the steps below.
First, run cmake to generate the makefiles:
cmake -B build
Then, go into the build dir, and run make (you may add -j<cores>
to speed up compilation):
cd build && make
After that, the program is compiled and available in the src folder of the build dir.
cd src && ls ligador
You may copy it to the folder you would like to use and run it as following. The o_files may be the absolute or relative paths to the assembled object files that compose the program. They must have an .o extension. The ligador
will generate an .obj file in the same folder as the first object file if it succeeds:
./ligador <o_files>
The assembly language expects the PUBLIC
and EXTERN
directives to be used in the TEXT
section only.
This linker operates on files with the following format
H: main
H: 6
H: 010100
H: U externSymbol 1 3
H: D publicSymbol 5
T: 01 00 13 00 14 05
There may be as many use table lines and definition table lines as there are public and extern directives. First the source code of all the modules is concatenated and the offsets are applied. Then, the use table is resolved.
The project was developed through an TDD approach, thus, it contains a thorough test suite, which is built with the executable. To run it, access the tests folder in the build dir and run the following command:
./ligador_tst
This repository doesn't accept contributions until December 2021. If you must contribute, please reach out for the author.
- Mateus Berardo - Initial Work - MatTerra
Also check out the contributors.
The author reserves all rights to the code hereby provided. It is strictly prohibited to copy or modify the code provided. It is allowed to use the code for educational purposes only and only if the author is credited. For any other use or more permissive conditions, contact the author. Any exceptions made by the author for third-parties does not mean changes in this license's terms for other people.
- Billie Thompson - README template - PurpleBooth