Assignment 3, due Sep 12

Solutions

Part of the homework for CS:2630, Fall 2019
by Douglas W. Jones
THE UNIVERSITY OF IOWA Department of Computer Science

  1. Framework: Consider this SMAL code
    STRING1:ASCII   "this is an example string",0
    ENDMARK:
    LENGTH: H       ENDMARK-STRING
    STRING2:ASCII	"this is another example string",0
    POINT1: W       STRING1
    POINT2: W       STRING2
    

    Rewrite the above code with ALIGN directives insterted where they should be to assure that all halfwords and words are properly aligned. (1 point, 0.2 point penalty for each missing or extra align)

    STRING1:ASCII   "this is an example string",0
    ENDMARK:
            ALIGN   2
    LENGTH: H       ENDMARK-STRING
    STRING2:ASCII	"this is another example string",0
            ALIGN   4
    POINT1: W       STRING1
    POINT2: W       STRING2
    

  2. Framework: Consider this sequence of words, given in hex, in consecutive memory locations on a Hawk computer:
    113201D1
    C213F2F3
    000662F4
    000010E5
    

    a) Disassemble these words into a sequence of hawk instructions, and give those instructions in SMAL Hawk notation. (1.0 points, 0.1 points penalty per error in opcode, register or field.)

    Hint: All the instructions are found in Chapter 4, Appendix B of the Hawk Manual is the primary resource for this kind of problem, in general, the Hawk emulator can solve this problem for you, but you will be expected to be able to disassemble code by hand using Appendix B on exams.

            LIS     R1,1
            ADD     R2,R1,R1
            MOVE    R3,R2
            ADDSI   R3,2
            ADDI    R4,R2,6 ; alternately, LEACC   R4,R2,6
            LIL     R5,#10
    

    b) What registers does the above code change, and what values does it leave in those registers, when it is done. (0.5 points, 0.1 point penalty per error)

    Hint: Again, you will be expected to be able to solve this with pencil, paper and the Hawk manual, but you can check your work using the Hawk emulator.

    It sets
    R1 = 1
    R2 = 2
    R3 = 4
    R4 = 8
    R5 = 16

  3. Background: Many older machines had an absolute-load instruction that looked something like the following:
            LOADA   rd,address
    

    Here, rd is the destination register, address is a 32-bit literal memory address, and the instruction loads the word from that memory address into the destination register.

    A problem: Write a SMAL Hawk macro that implements this. (0.5 points, 0.1 per missing or confused element)

            MACRO   LOADA rd,address
              LIW   rd,address
              LOADS rd,rd
            ENDMAC
    

    Note: The first line can be MACRO LOADA =rd.=address (with equals signs added). If you do this, the error messages will change, for example, if you pass something that isn't a register for the rd parameter. By default, the text of each parameter is passed without interpretation. If a formal parameter in the macro header is preceeded with an equals sign, it asks the assembler to evaluate the parameter first, then pass its value (as a decimal number, possibly with an added relocation base) instead of the text.