This programming assignment is not a group project. Each student will get graded on his/her own assignment. Each student must electronically submit his/her own assignment using the UNIX turnin command on the CS Department's computers. Use the project name of spim1 with the turnin command.
While this assignment is not a group project, it will be assumed that each student is part of a study group consisting of one or two other students and similarity of code between members of the study group is expected. You must include a list of the other members in your study group in a comment near the top of your source code file. Not listing any other students will indicate that you worked on this project completely by yourself and that there should be no similarity between your program and any other program in the class. Note: the next spim programming project will be done in groups of 2 or 3.
For this program, you are to write a program using the MAL assembly language to run under the SPIM/XPSIM software. This program is to allocate space for three arrays. Each array should be able to store up to 100 integer values in it. Your program is to perform the following steps:
for (i = 0; i < size; i++) { x = arr2[i]; arr3[i] = Ax2 + Bx + C; }where A, B and C are the last three digits from your Student Identification Number (i.e. SSN) incremented by 1. Thus if your Student Identification Number is 319-96-8521. The last three digits are 5, 2 and 1. The value for A is 6 (5 + 1). The value for B is 3 (2 + 1). The value for C is 2 (1 + 1). The values for A, B and C are to be hardcoded into your program.
Note: the reason for incrementing the values by 1 is that the last three digits may contain zeros.
You may earn up to 10 pts of extra credit with this assignment.
Register Name | Alternative Name | Description |
---|---|---|
$0 | the value 0 | |
$1 | $at | reserved by the assembler |
$2 - $3 | $v0 - $v1 | expression evaluation and function results |
$4 - $7 | $a0 - $a3 | the first four parameters - not preserved across procedure calls |
$8 - $15 | $t0 - $t7 | temporaries - not preserved across procedure calls |
$16 - $23 | $s0 - $s7 | saved values - preserved across procedure calls |
$24 - $25 | $t8 - $t9 | temporaries - not preserved across procedure calls |
$26 - $27 | $k0 - $k | reserved for use by the operating system |
$28 | $gp | global pointer |
$29 | $sp | stack pointer |
$30 | $s8 | saved value - preserved across procedure calls |
$31 | $ra | return address |
$f0 - $f2 | floating point function results | |
$f4 - $f10 | temporaries - not preserved across procedure calls | |
$f12 - $f14 | the first two floating point parameters - not preserved across procedure calls | |
$f16 - $18 | temporaries - not preserved across procedure calls | |
$f20 - $f30 | saved values - preserved across procedure calls |
Service | System Call Code placed in $2/$v0 | Arguments | Results |
---|---|---|---|
print_int | 1 | $a0 = integer | |
print_float | 2 | $f12 = float | |
print_double | 3 | $f12 = double | |
print_string | 4 | $a0 = address of string | |
read_int | 5 | integer (in $v0) | |
read_float | 6 | float (in $f0) | |
read_double | 7 | double (in $f0) | |
read_string | 8 | $a0 = address of string buffer $a1 = length of string buffer | |
sbrk | 9 | $a0 = amount | address (in $v0) |
exit | 10 |
The following special characters are used with character strings in SPIM. The special characters follow the C language convention:
Character | Encoding Sequence |
---|---|
Newline | \n |
Tab | \t |
Double quote | \" |