EE 361 Homework 3

Homework 3

Due Date: 9/21 (fri.)

Assignment:

Problem A (1 pt). Consider the following C language for-loop:

     for (i = 0; i < 100; i++) j = j + i;
The following is a MIPS assembly language implementation of the for-loop assuming that $3 and $4 are used to store i and j, respectively.
       add     $3,$0,$0     # i = 0;

Loop:  slti    $1,$3,100    # $1 = 1 if i < 100
       beq     $1,$0,Skip   # if $1 == 0 (i.e., i >= 100) then skip for-loop

       add     $4,$4,$3     # j = j + i;
       addi    $3,$3,1      # i++;
       beq     $0,$0,Loop   # go back to beginning of for-loop
Skip:
Write the machine code for the MIPS assembly language instructions. You may use decimal numbers (positive and negative ones) to fill in the fields. Note that all instructions and their machine code versions can be found in the back cover of the textbook.

Problem B. (1 pt.)

Consider the following C function:

     ordered(int i, int j, int k) /*  returns 1 if i, j, and k are nondecreasing*/
     { if  (i <= j && j <= k) return 1;
       else return 0;
     }
Write a MIPS assembly language implementation of this function assuming

Textbook Problem 3.6. You don't need to use the simulator as suggested in the problem (1 pt)

Textbook Problem 3.9. (1 pt).


Objective: Introduction to mcc compiler.

Preliminaries:

  1. Open netscape. If you're using UNIX then you can run netscape in background by typing:

           netscape &
    

  2. telnet into wiliki

Problem C (5 pts). The mcc compiler.

For this problem , you will be using the mcc compiler to compile some simple C programs. There are five subproblems to work on.

First, create the following simple C program:

main()
{
int x1, x2;
for (x1 = 0; x1 < x2; x1++) x2 = 2*x2;
}

and name it "test.c". Now compile the program by typing

mcc test.c

This will create a new assembly language file "test.s", which the compiled version of "test.c". Now examine "test.s" using an editor, e.g., "vi". Notice it is a mix of

Now save this program by renaming it "testP.s" (P for plain) by typing

mv test.s testP.s

The mcc compiler has an "-O" option which stands for "Optimization." The compiler will run slower but will reduce the size of the resulting assembly language program. Compile test.c using this option by typing

mcc -O test.c

Again this will create another assembly language program "test.s".