The average computer scientist programs in assembly very rarely. However, some familiarity with assembly level programming is necessary to develop the fundamental understanding of how high-‐level programs get executed (which itself is necessary to understand high-‐end performance issues). In this lab, students will gain familiarity with basic low-‐ level programming.
In this lab you will construct an assembly routine that puts the ASCII representation of an input string in memory at a specified location. The LC-‐3 machine language provides several useful TRAP calls for I/O (Patt 2e Appendix A, p 541). For example, GETC (TRAP x20) gets one character from the keyboard and places its ASCII code in R0. OUT (TRAP x21) performs the opposite function – it takes the contents of R0 and outputs the specified character (using ASCII encoding) to the display.
The LC-‐3 provides two output TRAPS for strings: PUTS (TRAP x22) and PUTSP (TRAP x24). Both of these expect (in R0) a starting address for a string, and output the encoded string to the display. Your task is to produce two programs that provide the “opposite” function of PUTS and PUTSP – that is, they take a string as input and place the string into memory at a location specified in R0. You will create two separate stand-‐alone programs: one for GETS and one for GETSP. The programs do not need to be implemented as subroutines or TRAP calls.
Using the LC-‐3 simulator, you will construct an assembly-‐level program that prompts the user for a string (the end of the string will be delimited by the character x0A, the ASCII character “Enter”). You will store the ASCII string representation of this input (including a terminating NULL character) in memory. The “Enter” character should not be considered part of the string and thus should not be stored. For the purposes of demonstration, I would like you to store the string at address x3100 (add the appropriate code to your program) and show that you have successfully stored the string by printing it back to the display using PUTS or PUTSP. Your program will be located in memory at location .ORIG x3000.
The following is an example output for both GETS.asm and GETSP.asm:
Enter string to echo: Go Raiders! Go Raiders! -----Halting the processor -----
WHAT TO TURN IN
Use the course web site to turn in your well-‐commented Assembly code (.asm files) – one should be named GETS.ASM and the other GETSP.ASM. Note: Well-‐commented means “easy to follow high-‐level flow and design decisions”. You do not have to comment every line of code, but you should have high-‐level comments for each 3-‐10 lines that represent a functional block of code or high-‐level idea.
A key element of assembly language programming is documenting your code in such a way that your intended algorithm is easy to understand. As such, a significant portion of the points for this lab are based upon your comments/documentation.
Points we be assigned out of a maximum of 50 as follows:
20 points: Project correctly implements GETS.
15 points: Project correctly implements GETSP.
15 points: In-‐line documentation (comments) and programming style (no spaghetti code).