Machine Problem 1

22C:18, Fall 1996

Due Tuesday Oct. 1, 1995, in discussion

Douglas W. Jones

Write a SMAL Hawk program that is based on the program in problem 1 of Homework 4, except that it outputs, to the display screen, the value of t at the start of each iteration:

        unsigned int t = 100;
        while (t > 1) {
		output(t);
                if (t & 1) {
                        t = (t * 3) + 1;
                } else {
                        t = t / 2;
                }
        }
        output('STOP');
The value of t should be printed in decimal! Successive values of t should be printed 8 characters apart on the display screen, so that as the loop iterates, the screen fills with numbers.

Note, to convert binary to decimal, you will need to divide by 10! The fastest way to divide by 10 on the Hawk machine is to multiply by .1 (decimal). Note that

	.1 (decimal)
      = .0001100110011001100110011 ... (binary)
      = .1999999 ... (hexadecimal)
So, to divide by 10, do this:
;       R3 = R2 / 10
;               reciprocal multiply
;               1/10 = .0001 1001 1001 1001 1001 1001 1001 1001

        MOVE    R3,R2
        ADDSR   R3,0,3  ; times .001
        ADDSR   R3,R2,1 ; times .1001
        ADDSR   R3,R2,3 ; times .0011001
        ADDSR   R3,R2,1 ; times .10011001
        ADDSR   R3,R2,3 ; times .00110011001
        ADDSR   R3,R2,1 ; times .100110011001
        ADDSR   R3,R2,3 ; times .001100110011001
        ADDSR   R3,R2,1 ; times .1001100110011001
        ADDSR   R3,R2,3 ; times .0011001100110011001
        ADDSR   R3,R2,1 ; times .10011001100110011001
        ADDSR   R3,R2,3 ; times .00110011001100110011001
        ADDSR   R3,R2,1 ; times .100110011001100110011001
        ADDSR   R3,R2,3 ; times .001100110011001100110011001
        ADDSR   R3,R2,1 ; times .1001100110011001100110011001
        ADDSR   R3,R2,4 ; times .00011001100110011001100110011001
You are free to make rational assumptions about any details of this assignment that are not specified here!

Note that your solution must be clearly commented, and it must begin with a title and comment that includes your name, the course number, your section, the program title (MP1 is good enough)

As in most elementary programming courses, merely making the program function correctly will not (!!) give you full credit. Commentary and formatting should make the program easy to understand, and credit will be reduced for insufficient commenting, bad formatting or for excessive or distracting commenting!

To submit your solution, use the submit command; that is, if your solution is in a file named mp1.a, use the command "submit mp1.a" to submit it for grading.