Department of Electrical and Computer Engineering

The University of Texas at Austin

EE 306, Fall 2015
Programming Assignment 1
Due: October 18th, 11:59 pm
Yale N. Patt, Instructor
TAs: Esha Choukse, Ali Fakhrzadehgan, Steven Flolid, Nico Garofano, Sabee Grewal, William Hoenig,
    Adeesh Jain, Kamyar Mirzazad, Matthew Normyle, Stephen Pruett, Siavash Zangeneh, Zheng Zhao

You must do every programming assignment by yourself. You are permitted to get help ONLY from the TAs and the instructor. When you have completed the program, and tested it sufficiently so that you are comfortable that it works on any input (i.e., values initially stored in locations starting with x3050), submit it for grading according to the submission instructions at the end of this handout.


Convert a string of lower case characters to upper case.

Your Job: In this assignment, you are asked to write a program in LC-3 machine language that converts a string of lower case letters into uppercase and stores the resulting value in memory.

For Example:

Input Output
abcdefg ABCDEFG

The addressability of the LC-3 is 16 bits; i.e., each memory location contains 16 bits of data. An ASCII code, however, is only 8 bits. To simplify your job we will only store one 0-extended ASCII code in each memory location. Your program should assume that the first character of the input string is stored in memory location x3050. Your program should store the output string in successive memory locations starting with address x3050. You may assume that the string contains only lower case alphabetic characters. That is, the string will NOT contain any spaces, punctuation, or other nasty characters. The string can be any length. We have stored a special character at the end of the string called the "NULL" character, which your program can use to detect the end of the string. The NULL character is ASCII code x00.

Your program should start at memory location x3000, and should halt the machine after storing the output. So for example, if the memory locations starting at x3050 initially contain the following values:

Address Data
x3050 0000 0000 0110 0001
x3051 0000 0000 0110 0010
x3052 0000 0000 0110 0011
x3053 0000 0000 0110 0100
x3054 0000 0000 0110 0101
x3055 0000 0000 0110 0110
x3056 0000 0000 0110 0111
x3057 0000 0000 0000 0000

Then after your program completes executions, the memory locations starting at x3050 should contain:

Address Data
x3050 0000 0000 0100 0001
x3051 0000 0000 0100 0010
x3052 0000 0000 0100 0011
x3053 0000 0000 0100 0100
x3054 0000 0000 0100 0101
x3055 0000 0000 0100 0110
x3056 0000 0000 0100 0111
x3057 0000 0000 0000 0000

Then your program should halt the machine.

Inside the Lab 1 folder, there will be a file named toUpper.bin. Please write your code in this file.

Hint 1: What is the difference between the ASCII code for lower case 'a' and upper case 'A'? Is this true of every character?

Hint 2: Given that your program must begin at address x3000 and that the input string begins at x3050, what is the maximum length your program can be? Is this a problem?

Hint 3: Familiarize yourself with the software and documentation, and the submission instructions well before the deadline so that you can get help from a TA if you cannot figure out the mechanics by yourself. It is unreasonable to expect Professor Patt or a TA to help you submit your program at 11:45pm on the day the program is due simply because you left this for the last minute, and have discovered that you do not know how to do it by yourself.

Simulator/Testing Hint: You can test your program by setting the value of memory locations starting with x3050 before you run your program on the LC-3 simulator. On Windows machines, you can click on "Simulate" on the menubar and select "Set Value". You can also just press F4 and the "Set Value" dialog box will pop up. Finally, double-clicking on the contents of a memory location will also cause the "Set Value" dialog box to pop up.

Make sure you set a breakpoint before you run your program so that your program will stop just before it executes the trap instruction. This will allow you to examine the contents of the locations starting at x3050 after your program has finished executing, but before control is turned over to the operating system to halt your program.

Follow the following steps: Note: We understand that to test your program, you must first create a .obj file. The .obj file is not to be submitted for grading. We will create a .obj file from your .bin file when we grade your program.