Department of Electrical and Computer Engineering

The University of Texas at Austin

EE 306, Fall 2014
Problem Set 5
Due: November 10th, before class
Aater Suleman, Instructor
TAs: Owais Khan, Cagri Eryilmaz and Chirag Sakhuja

Instructions:
You are encouraged to work on the problem set in groups and turn in one problem set for the entire group. Remember to put all your names on the solution sheet. Also, remember to put the name of the TA and the time for the discussion section you would like the problem set turned back to you. Show your work.


  1. (Adapted from 6.16) Shown below are the partial contents of memory locations x3000 to x3006.

      15 0
    x3000 0 0 1 0 0 0 0                  
    x3001 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 1
    x3002 1 0 1 1 0 0 0                  
    x3003                                
    x3004 1 1 1 1 0 0 0 0 0 0 1 0 0 1 0 1
    x3005 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0
    x3006                                


    The PC contains the value x3000, and the RUN button is pushed.

    As the program executes, we keep track of all values loaded into the MAR. Such a record is often referred to as an address trace. It is shown below.

    MAR Trace
    x3000
    x3005
    x3001
    x3002
    x3006
    x4001
    x3003
    x0021

    Your job: Fill in the missing bits in memory locations x3000 to x3006.


  2. (Adapted from 9.2)
    1. How many TRAP service routines can be implemented in the LC-3? Why?

    2. Why must a RET instruction be used to return from a TRAP routine? Why won't a BRnzp (unconditional BR) instruction work instead?

    3. How many accesses to memory are made during the processing of a TRAP instruction?


  3. Assume that you have the following table in your program:

    
    MASKS	.FILL x0001
    	.FILL x0002
    	.FILL x0004
    	.FILL x0008
    	.FILL x0010
    	.FILL x0020
    	.FILL x0040
    	.FILL x0080
    	.FILL x0100
    	.FILL x0200
    	.FILL x0400
    	.FILL x0800
    	.FILL x1000
    	.FILL x2000
    	.FILL x4000
    	.FILL x8000
    
    1. Write a subroutine CLEAR in LC-3 assembly language that clears a bit in R0 using the table above. The index of the bit to clear is specified in R1. R0 and R1 are inputs to the subroutine.

    2. Write a similar subroutine SET that sets the specified bit instead of clearing it.

    3. Hint: You should remember to save and restore any registers your subroutine uses (the "callee save" convention). Use the RET instruction as the last instruction in your subroutine (R7 contains the address of where in the caller to return to.)


  4. Suppose we are writing an algorithm to multiply the elements of an array (unpacked, 16-bit 2's complement numbers), and we are told that a subroutine "mult_all" exists which multiplies four values, and returns the product. The mult_all subroutine assumes the source operands are in R1, R2, R3, R4, and returns the product in R0. For purposes of this assignment, let us assume that the individual values are small enough that the result will always fit in a 16-bit 2's complement register.

    Your job: Using this subroutine, write a program to multiply the set of values contained in consecutive locations starting at location x6001. The number of such values is contained in x6000. Store your result at location x7000. Assume there is at least one value in the array(i.e., M[x6000] is greater than 0).

      Hint: Feel free to include in your program

      
      PTR	.FILL x6001
      CNT	.FILL x6000
      


  5. (Adapted from 9.13)
    The following program is supposed to print the number 5 on the screen. It does not work. Why? Answer in no more than ten words, please.
    
    	.ORIG	x3000
    	JSR	A
    	OUT			;TRAP  x21
    	BRnzp	DONE
    A	AND	R0,R0,#0
    	ADD	R0,R0,#5
    	JSR	B
    	RET
    DONE	HALT
    ASCII	.FILL	x0030
    B	LD	R1,ASCII
    	ADD	R0,R0,R1
    	RET
    	.END
    

  6. (Adapted from 8.16)
    What does the following LC-3 program do?
    
    	.ORIG X3000
    	LD R0,ASCII
    	LD R1,NEG
    AGAIN	LDI R2,DSR
    	BRzp AGAIN
    	STI R0,DDR
    	ADD R0,R0,#1
    	ADD R2,R0,R1
    	BRnp AGAIN
    	HALT
    ASCII	.FILL X0041
    NEG	.FILL XFFB6
    DSR	.FILL XFE04
    DDR	.FILL XFE06
    	.END
    

  7. (Adapted from 9.5)
    The following LC-3 program is assembled and then executed. There are no assemble time or run-time errors. What is the output of this program? Assume all registers are initialized to 0 before the program executes.
    
    	.ORIG X3000
    	ST R0, X3007
    	LEA R0, LABEL
    	TRAP X22
    	TRAP x25
    LABEL	.STRINGZ "FUNKY"
    LABEL2	.STRINGZ "HELLO WORLD"
    	.END
    

  8. The memory locations given below store students' exam scores in form of a linked list. Each node of the linked list uses three memory locations to store

    1. Address of the next node
    2. Starting address of the memory locations where name of the student is stored
    3. Starting address of the memory locations where the his/her exam score is stored

    in the given order. The first node is stored in locations x4000 ~ x4002. The ASCII code x0000 is used as a sentinel to indicate the end of the string. Both the name and exam score are stored as strings.
    Write down the student's name and score in the order that it appears in the list.
    
        Address	    Contents
        x4000	    x4016
        x4001	    x4003
        x4002	    x4008
        x4003	    x004D
        x4004	    x0061
        x4005	    x0072
        x4006	    x0063
        x4007	    x0000
        x4008	    x0039
        x4009	    x0030
        x400A	    x0000
        x400B	    x0000
        x400C	    x4019
        x400D	    x401E
        x400E	    x004A
        x400F	    x0061
        x4010	    x0063
        x4011	    x006B
        x4012	    x0000
        x4013	    x0031
        x4014	    x0038
        x4015	    x0000
        x4016	    x400B
        x4017	    x400E
        X4018	    x4013
        x4019	    x004D
        x401A	    x0069
        x401B	    x006B
        x401C	    x0065
        x401D	    x0000
        x401E	    x0037
        x401F	    x0036
        x4020	    x0000
    

    1. The program below counts the number of zeros in a 16-bit word. Fill in the missing blanks below to make it work.
      	    .ORIG x3000
      	    AND   R0, R0, #0
      	    LD	  R1, SIXTEEN
      	    LD	  R2, WORD
      A	    BRn   B
      	    ________________
      B	    ________________
      	    BRz   C
      	    ________________
      	    BR	  A	; note: BR = BRnzp
      C	    ST	  R0, RESULT
      	    HALT
      
      SIXTEEN     .FILL #16
      WORD	    .BLKW #1
      RESULT	    .BLKW #1
      	    .END
    2. After you have the correct answer above, what one instruction can you change (without adding any instructions) that will make the program count the number of ones instead?

  9. Suppose we use the unused opcode 1101 to specify a new instruction. We will require 3 states after decode (state 32) to complete the job. The control signals required to carry out the work of the new instruction are shown below. All control signals not shown below are 0.
    1. What does this new instruction do?
    2. There are two different formats for specifying the operands of this instruction. Fill them out below.