Image goes here
Assignment 4
CptS 260 - Intro to Computer Architecture
Washington State University

CptS 260 Assignment 4

Assigned: Sept. 24, 2007
Due: Oct. 5, 2007, 11:59:59 PM

Turning in your assignment

When finished, submit your file named four.asm using the the Project turn-in link at the left side of the CptS 260 web pages. (Click the link and follow the directions.) You may turn in the assignment as many times as you like before the deadline. Only the last will be graded.

The problem: recursive quicksort of a list of numbers

For this problem you will write two functions plus a main routine to test them. The two functions are readnums and sort.

Function readnums takes two arguments: in $a0 the maximum number of numbers to read and in $a1 the address of a buffer to hold the numbers. readnums should assume that the buffer address is a multiple of 4. readnums repeatledly uses the sys instruction to read a number from the keyboard, stopping when either the buffer is full (the maximum number of items specified in $a0 have been placed in it), OR the number 0 is entered. When the number 0 is entered it is NOT placed in the buffer. readnums returns the number of entries it placed in the buffer in $v0. Be sure that readnums can handle the cases that $a0 is initially 0 and that the user enters 0 as the first number. In both cases it must return 0 in $v0. Properly designed code will NOT need to treat these two cases specially.

Function sort takes two arguments as well. For this function $a0 is the number entries (4-byte, two's complement numbers) in the buffer pointed to by $a1. sort rearranges the entries in the buffer so that they appear in increasing order. You are to implement sort using the recursive quicksort algorithm with in-place partitioning. If you don't remember this from CptS 122, look it up! You should test your code, at a minimum, on the following cases: $a0==0, $a0==1, input buffer already sorted in increasing order, input buffer sorted in decreasing order. (To save time in testing you may want to set up some buffers in the .data segment that contain your test cases so you don't have to repeatedly type in a lot of numbers.)

Your main function should contain calls to readnums and sort to thoroughly test them. We will look at your tests and also apply tests of our own to your readnums and sort functions. Make sure that you preserve all callee-save registers and that your functions do not write anything in the data segment outside the buffer provided as a parameter.

Design your code by writing high-level pseudo-code first. Include the pseudo-code as comments at the heads of the functions in your program file. Of course, also include comments on the assembler code itself. The hardest part of this assignment is the in-place partioning step (and even that is not too bad). Don't try to be fancy in your choice of pivot elements -- using the first array element is perfectly acceptable in this assignment even though it is not ideal in practice.

(c) 2004-2006 Carl H. Hauser           E-mail questions or comments to Prof. Carl Hauser