Skip to content
An assembler for the Little Computer 3 (LC-3) instruction set.
C Assembly C++
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
test_cases
.gitignore
README.txt
assemble.c
compile
generate_instruction.c
instruction.c
lc3asm.h
main.c
parse.c
symbol.c

README.txt

================================
LC-3 Assembler
================================
README
Author: Neelabh Gupta (nsgupta2@illinois.edu)

About
--------------------------------
This is an assembler for the LC-3 ISA. It was developed as an honors project for the ECE 190 (Introduction to Computing Systems) Spring 2012 class (https://wiki.engr.illinois.edu/display/ece190sp12/Home) at the University of Illinois at Urbana-Champaign. It is completely written in the C language, uses only the standard C libraries, and conforms to the C99 standard.
Developed by Neelabh Gupta (nsgupta2@illinois.edu).

NOTE: This project should only be used for educational purposes. For practical use, use the assembler provided by the official LC-3 tools (see below).


About the LC-3
--------------------------------
LC-3, or Little Computer 3, is a simple computer built by Yale N. Patt and Sanjay J. Patel for use in teaching fundamentals of programming and computer architecture to students. Their specification of the instruction set, the overall architecture of the LC-3, and a hardware implementation can be found in the second edition of their textbook, "Introduction to Computing Systems: From Bits and Gates to C and Beyond".

- The main textbook website containing links to all resources can be found here: http://highered.mcgraw-hill.com/sites/0072467509/index.html
- The LC-3 ISA (instructions, opcodes and formats) can be found in Appendix A, available for download here: http://highered.mcgraw-hill.com/sites/dl/free/0072467509/104653/PattPatelAppA.pdf
- The LC-3 tools, containing a C compiler, assembler (lc3as), bin to obj convertor (lc3convert), the simulator and other tools can be found here: http://highered.mcgraw-hill.com/sites/0072467509/student_view0/lc-3_simulator.html
- The Wikipedia page for LC-3 is also useful: http://en.wikipedia.org/wiki/LC-3


Functionality:
--------------------------------
Takes an assembly language file <filename.asm> and assembles it into LC-3 ISA machine code. The machine code is in "filename.bin" and its corresponding hexadecimal code is in "filename_hex.bin". Assembly stops and an appropriate error message is printed when an error in the assembly code is encountered.


Initial Setup:
--------------------------------
The source files can be compiled using the "compile" file in the root of the source folder. Its just a line containing the gcc command with appropriate arguments.

First make the compile script executable:
$> chmod 700 compile

Compile the source code:
$> ./compile

The output file is named "nglc3asm". Place this executable somewhere on your PATH, so that you don't need to type its path every time you run it.


Usage:
--------------------------------
To run the program,
$> ./nglc3asm <path/to/filename.asm>

In case of an error during assembly, an error message will be printed on screen indicating the error occurred, and the assembly process stops.

If the assembly was successful, a success message will be printed on the screen.
The output files will be:
path/to/filename.bin        - the main binary code produced
path/to/filename_hex.bin    - the machine code in hexadecimal
path/to/filename.sym        - the file containing the symbol table

All these files are human-readable - open them in any text-editor. To generate an object file, use a binary to .obj convertor. The standard LC-3 tools include a tool named "lc3convert".

On a system where the LC-3 tools are installed, type the following command:
$> lc3convert path/to/filename.bin

This will produce a .obj file, which can then be loaded onto the LC-3 simulator (provided by LC-3 tools).


Organization of source code:
--------------------------------
LC-3_Assembler/
   - README.txt                      - This readme
   - compile                         - script to compile all source files
   - lc3asm.h                        - header file acting as a "glue"
   - main.c                          - contains the main function
   - assemble.c                      - source file
   - generate_instruction.c          - source file
   - instruction.c                   - source file
   - parse.c                         - source file
   - symbol.c                        - source file
   - test_cases/                     - Directory containing some sample assembly source code, and the expected outputs of the assembler


Assembler Specific Notes
--------------------------------
.STRINGZ assembler directive can have string arguments having escape sequences ("\n", etc). The parsed escape sequences are:
'\a', '\b', '\f', '\n', '\r', '\t', '\v', '\\', '\?', '\'', '\"'

Numbers in instructions can be given in the following format:
If the operand is a decimal integer, it should be preceded with a "#". For example, ADD R0, R0, #7
If the operand is a hexadecimal integer, it should be preceded with an "x". For example, .ORIG x3000


Future Improvements
--------------------------------
- Show line numbers for errors.
- This assembler stops when it encounters the first error. The assembler should keep moving and find all errors.
- Create a ".obj" file output which can be loaded directly into the simulator without the need for "lc3convert".
You can’t perform that action at this time.