Updated: 2003-09-23 11:46

# Project 2 - LMC Programming

## DAT 2343 - Fall 2000

### Synopsis

1. From the given program description, write your own pseudo-code algorithm.
2. Implement your pseudo-code algorithm using LMC mnemonic instructions.
3. Assemble by hand your mnemonic instructions into LMC numeric codes.
4. Enter your codes and test your program in the LMC simulator under Windows.
5. Hand in an envelope containing a diskette with three files, and two printouts.

### Program Description and Sample Input

Write the pseudo-code algorithm and LMC program that solves the following problem:

You are given three integers that represent vacation days.  The three integers may arrive in any order, and they may have any value from 000 to 999.  Your program is to first output the three numbers in order from smallest to largest.  Next, output all the non-vacation days between the last vacation day (the largest integer of the three) and the first vacation day (the smallest integer of the three).  As you print all the non-vacation days, you must arrange not to print out the middle integer of the three, as it is also a vacation day.  You must print out all the non-vacation days from the largest day down to the smallest day, skipping over the middle vacation day.

Here's another way to express the same problem:

1. Your program should read three numbers (after all, the LMC can only input numbers!) and store them in memory.
2. Output the three numbers in order, from smallest to largest.
3. Output all the integers between the largest and the smallest number, except the number that is the middle number of the three.  (Do not output the largest or the smallest either!)  Output the numbers in descending order, skipping over the middle number.

The method you choose to produce the output is entirely up to you.  The internals of the algorithm are not specified; you simply have to produce output that matches the given specifications.

#### Sample Input and Output

Input:  005 001 008
Output: 001 005 008 007 006 004 003 002
Input:  013 016 010
Output: 010 013 016 015 014 012 011
Input:  101 100 102
Output: 100 101 102
Input:  999 998 998
Output: 998 998 999
Input:  000 000 000
Output: 000 000 000

### Pseudo-Code and LMC Mnemonics

Write a pseudo-code algorithm that implements the given program specifications.  Pick proper names for your variables.  Use good names that reflect the functions of the variables in the original problem. You will be handing this in.  (My pseudo-code was about 25 lines long.  I tested the logic of my pseudo-code by turning it into a C program that was about 30 lines long.  You can try running it here.)

Translate your pseudo-code into LMC mnemonic instructions.  Pay attention to the details of your algorithm and the placement of each statement.  Do not optimize your LMC code!  (My resulting LMC program occupied about 65 mailboxes.  Yours may differ.)

Your translated code must be in the usual labels/mnemonics/operands/comments format.  Do not optimize your code!  Translate each pseudo-code statement separately.  You will be handing this in.

#### LMC Mnemonics Notes

1. LMC variable names and labels must start with a letter and may not contain blanks. (These are the same rules used in most programming languages.)
2. No numeric arguments/operands are allowed to instruction mnemonics when writing LMC mnemonic instruction assembly language - write mnemonic instructions with labels only.  (For example, always write "LDA SUM" and never "LDA 23".)  "DAT" pseudo-operations are the only lines that are allowed to contain numbers (data).
3. When writing mnemonic assembly language code using labels, ensure that all labels used have defined locations.  You may insert labels that are never actually used, for commenting purposes; but, do this sparingly as it can confuse people who read your code.
4. You can't use the same name for two different variables and/or labels.  All names must be unique (These are the same rules used in most programming languages.)
5. Do not use the ORG pseudo-instruction.  Code should begin at mailbox location zero.

### Assembly and Debugging

Hand-assemble your LMC mnemonic instructions into the equivalent LMC numeric codes.  (Assign locations to all the instructions; build a label table; translate the mnemonics into LMC numeric codes.)

Download one of the LMC Simulator programs (see below) that simulate the "Little Man Computer". This program should be run from Windows 95/98. Run the simulator and enter your numeric codes into the correct mailboxes. Run, test, and debug your program using the simulator.

When your program works correctly, use the simulator to save the LMC numeric codes on a diskette, using the exact file name given below.

Be sure to resave your modified numeric codes if you make changes to the codes while in the simulator, and remember to modify your mnemonic instructions and your pseudo-code to reflect any such changes before you hand in your project.  The mnemonic instructions you hand in must match the numeric codes used in the simulator and saved on disk, and the pseudo-code must match the mnemonic instructions!

Submit a diskette and print-outs according to the Hand In format given below.

### LMC Simulator under Windows

The simulator comes in two versions.  The basic version, available on Alan Pinck's site, is known to work reasonably under Windows 95/98.  The enhanced version was enhanced by Algonquin student Christopher Hyne and permits editing and other features.  I recommend you try the enhanced simulator first; if it misbehaves, tell me what went wrong and return to the basic simulator.

The Enhanced Simulator can read the data files saved by the Basic Simulator; but, the Basic Simulator can only read files saved in "old format".  (You will be asked which format you want when you use the "save" feature of the Enhanced Simulator.)  You may submit files on diskette in either format.  Enhanced format is easier to read, since it is one mailbox per line.

#### Enhanced Simulator (FoSoLMC.EXE)

If you have Visual Basic 6.0 on your computer, you should only need the actual program executable, given above. If you don't have Visual Basic 6.0 or the Visual Basic Runtime Libraries on your computer you will need to download and install them using the (large!) Setup Kit available here.

The above links are local Algonquin copies of the original files kept on Christopher Hyne's FoSoLMC site.

#### Basic Simulator (SonOfLMC.EXE)

Use this Basic Simulator if you can't get the Enhanced Simulator to work.

The Basic Simulator doesn't have editing and other enhancements built in.  It requires certain Dynamic Link Libraries which are commonly installed on many systems (all Algonquin College lab computers should have these files). Specifically, this program was created using Visual Basic version 4 and needs VB40032.DLL.

If your computer does not have any of the required files, you can download a .ZIP version of the entire package including all support files from:

The available files include: SonOfLMC.ZIP... the complete executable package (4Mb) Son_P1.ZIP, Son_P2.ZIP, Son_P3.ZIP, Son_P4.ZIP... all the same files as the above but broken up into 4 collections, each of which should fit on a 1.4Mb disk.

### Hand In

Summary: Hand in 3 text files on one diskette; 2 printouts on paper.

Submit your Project in a labelled, unsealed, but closed envelope.  (If you seal an envelope, it becomes useless as an envelope after I unseal it!)

Create and include in the envelope a copy of a diskette containing three text-only files:

1. File 1: A PSEUDO.TXT text file containing my Assignment Submission label information followed by your pseudo-code algorithm.
2. File 2: A PROGRAM.TXT text file containing my Assignment Submission label information followed by the five-column (plus comments) LMC code and mnemonic instructions of your LMC program.  (Make sure the columns line up!)
3. File 3: A P2CODES.LMC "save" text file from the LMC simulator containing just the saved LMC numeric codes of your assembled program.  I accept both Enhanced and Basic save formats.  I will load this code into my own simulator and test it.

Print both the PSEUDO.TXT and PROGRAM.TXT files from the diskette and include the two printouts in the envelope:

1. Printout 1: Print a clear paper copy of your PSEUDO.TXT file for submission in the envelope along with your diskette.
2. Printout 2: Print a clear paper copy of your PROGRAM.TXT file for submission in the envelope along with your diskette.

Please keep master copies of the diskette and printouts; don't hand in your only copies.

#### Text Files Only

For full marks:

1. Follow my Assignment Submission Standards.  Put labels on everything, including the diskette!
2. All the submission files on the diskette must be plain text only.  Plain text is readable in Windows Wordpad, Notepad, or DOS EDIT (or Unix/Linux vi).  Check the format of your files before you submit them.  Do not submit Word, WordPerfect, or HTML documents.
3. Use the exact file names given.  The automated program I use to mark these assignments will not find misspelled files on your diskette.  Do not place files in a subdirectory on the diskette.
4. Ensure that the documents print neatly - pay attention to margins, line length, and consistent indentation.  Align the columns carefully.

## Problems?

As with all questions and comments on course content, please post any problems you encounter to the course discussion news group.

 Web Author: Ian! D. Allen idallen@idallen.ca      Updated: 2003-09-23 11:46 Support free and non-commercial Internet. This site works best in Any Browser, a campaign for non-specific WWW. This work is licensed under a Creative Commons License.