Due date: See Class Webpage
mkdir ~/cs255/pj7 cp /home/cs255001/Handouts/pj7/* ~/cs255/pj7 |
// How the variables are used:
//
// input A: array of integers that needs to be sorted
// N: size of array A
//
// Done: integer (functioning as a boolean: 0 = false, 1 = true)
// Help: integer (help variable for swapping)
void BubbleSort(int[] A, int N)
{
Done = 0; // 0 represents false
k = 1;
while (Done == 0)
{
Done = 1; // 1 represents true.
for (i = 0; i < N-k; i++)
{
if (A[i] > A[i+1])
{
Help = A[i];
A[i] = A[i+1];
A[i+1] = Help;
Done = 0; // Not sorted...
}
}
k = k + 1;
}
}
|
Basically, the bubble sort algorithm swaps two adjacent elements A[i] and A[i+1] when the latter is smaller. When two adjacent element are exchanged, the Done variable is set to FALSE , indicating that another iteration is necessary.
The main program is stored in the file pj7.s
The main program will call (i.e., executes a bsr BubbleSort instruction) the BubbleSort subroutine twice, each time with a different array.
The main program calls the BubbleSort with 2 parameters:
|
The type of the elements of the array is int.
The main program passes the parameters as follows:
|
Here are the code segments that shows you how the main program calls the BubbleSort subroutine:
movw r0, #:lower16:A // Pass address of the array A in r0
movt r0, #:upper16:A
mov r1, #5 // Pass size of the array in r1
bl BubbleSort // Call BubbleSort to sort array A (5 elements)
....
movw r0, #:lower16:B // Pass address of the array B in r0
movt r0, #:upper16:B
mov r1, #10 // Pass size of the array in r1
bl BubbleSort // Sort array B (10 elements)
|
Therefore, your BubbleSort subroutine must use as parameters:
|
Note:
|
Right now, the bubblesort.s looks like this:
.global BubbleSort
BubbleSort:
//*****************************************************
// Write your bubble sort assembler subroutine here
//
// BubbleSort: input r0 = address of int array
// r1 = # elements in the array
//*****************************************************
// Write your bubble sort function here.....
// Make sure you RETURN to the caller !!!
.data
// *************************************************************************
// If you need local variables, you can define them below this line
// *************************************************************************
.end
|
You must write the BubbleSort function in ARM assembler code and put the code after the BubbleSort (and before the .data directive)
|
This is also the file that you must turn in.
1. First: press the CONTROL key and select pj7.s
2. THEN: press the CONTROL key and select bubblesort.s
NOTE: the ORDER of clicking is VERY IMPORTANT
DO NOT click on bubblesort.s first !!!!
(A wrong order will cause EGTAPI to generate the output "bubblesort.arm"
and not "pj7.arm")
3. Finally: click "Compile"
NOTE: You MUST see the digit "1" next to the "pj7.s" file before
you click "compile" or else, EGTAPI will generate a
WRONG assembler output filename !!!
|
If you have a hard time using the CONTROL + click to compile the project, you can also compile the programs in this project, by opening the Terminal in EGTAPI and type the follow commands:
cd ~/cs255/pj7 // Execute this once
/home/cs255001/bin/as255 pj7.s bubblesort.s
|
|
I am sure you will have bugs in your program with this assignment.
|
The breakpoints are very helpful in finding errors in assembler programs.
|
Open the Terminal in EGTAPI and type in these commands:
cd ~/cs255/pj7
/home/cs255001/turnin bubblesort.s pj7 // If you're in section 1
or
/home/cs255002/turnin bubblesort.s pj7 // If you're in section 2
|
You do not need to turn in the pj7.s file !!!
As usual, I want the source (so I can read it). DO NOT turn in the executable or the object code !
/home/cs255001/req-ext pj7 // If you're in section 1
or
/home/cs255002/req-ext pj7 // If you're in section 2
|
You request will be successful if you have not exceeded the maximum number of "free" (no-questions-asked) requests allowed