Solution for Spring 2002 CSCI 255 Homework 5

Problem 1

Draw a block diagram of a 512M×16 RAM. The only real work here is figuring out the number of address and data pins.

Remember that, M is 220 in computer architecture. Since 512 is 29, then 512M is 229. Consequently, the number of address pins is 29. The number address pins is 16, the width of a word of memory.
Here's a solution provided by Kate Wittman. In class I drew the RAM with separate sets of input and output pins. This drawing only has one set of data pins which is a bit closer to reality because in almost all real RAM chips there is a single set of data pins that are used for both input and output.
512M×16 RAM

Problem 2

An LC-2 program, expressed in binary, appears below:


0010001100000000
0010010000001110
0000010000001100
0001001001100000
0000100000001000
0001001001000001
0001010010111111
0100000000000010
0001001001000001
0001001001100001
0001010010111111
0100000000000010
0011001100000001
1111000000100101
0000000000001000

Your assignment is to "decode" the instructions of this program into LC-2 instructions and to give some reasonable guess about the purpose of the program.

Assume that the program is loaded into memory at location x3000 and that a word of "input" data for the program is stored at location x3100. This input data is loaded from location x3100 on the first instruction of the program.

0010001100000000x3000 LD R1,x3100
0010010000001110x3001 LD R2,x300E
0000010000001100x3002 BRz x300C
0001001001100000x3003 ADD R1,R1,#0
0000100000001000x3004 BRn x3008
0001001001000001x3005 ADD R1,R1,R1
0001010010111111x3006 ADD R2,R2,-1
0100000000000010x3007 BR x3002
0001001001000001x3008 ADD R1,R1,R1
0001001001100001x3009 ADD R1,R1,#1
0001010010111111x300A ADD R2,R2,#-1
0100000000000010x300B JMP x3002
0011001100000001x300C ST R1,x3101
1111000000100101x300D TRAP x21
0000000000001000x300E .FILL #8

Although the last word in the program is the instruction BR x3008, in this example that word is being used to load the constrant value 8. Consequently, it is better to translate the word as .FILL #8.

The program performs a byte swap. The two halves of the word stored at memory location x3100 are swapped and the result is stored at memory location x3101. For example, if memory location x3100 contained x1234 when the program starts, memory location x3101 will contain x3412 when the program stops.