Assembly Language Programming. Due: Description: This project will be done in pa
ID: 3795379 • Letter: A
Question
Assembly Language Programming.
Due: Description:
This project will be done in parts that will increase in complexity. Each portion is to be submitted online separately. In the assembly file for each section you must place a pair of comments identifying yourself and the section that you are working on.
# Name: Jerry Heuring # Project 1: Section 1
Details:
Section 1:
Using the MARS or SPIM simulator develop a program that will evaluate the following expression:
3 * n + n * (n – 1) – 15
where n is stored in a data location and is set to 15. Your program should use the system calls to print the result and to exit the program.
Section 2:
Using the MARS or SPIM simulator develop a program that will implement the following conditional statement.
If ( n is even) { n = n / 2;
} else {
n = 3 * n + 1;
}
In this case, n is to be input by the user (assume they input a non-negative value), the conditional is performed, and the resulting n is to be output. Again, use the system calls for input, output, and exiting the program. Hint: There is a remainder pseudoinstruction for the MIPS architecture that you can use to determine if the value is even or odd or you can look at bit 0 to determine if the value is even or odd.
Section 3:
You are to take the conditional from the previous section and build a loop around it to find the Collatz sequence. The structure of this would be:
while (n > 1) {
If (n is even) {
n = n / 2;
} else {
n = 3 * n + 1;
}
cout << n;
}
Section 4:
You are to write a leaf subprogram that will output the following information: Your Name
Your favorite sports team
The main program should call your leaf routine and then exit using the system call.
Section 5:
Write a program with a leaf subprogram that will take two values in $a0 and $a1 and compute their greatest common divisor. The greatest common divisor should be returned in the $v0 register. The main program should input the values for $a0 and $a1 using system calls, call your subprogram, and then output the result using a system call.
Submission:
There are locations for you to submit the assignment available in BlackBoard. You need to upload only the .asm (assembly language) file. There is a different location for EACH section.
Explanation / Answer
Here is the code for the section 1 of the above question.
Here we evaluate the equation by dividing it into different parts or sub operation, and then evaluating them using different registers.
Code:
.data
n: .word 15
msg1: .asciiz "Result of the expression 3 * n + n * (n – 1) – 15 ="
.text
lw $s0, n
mul $s0, $s0, 3 # 3*n
lw $s1, n
sub $s1, $s1, 1 # n-1
lw $s2, n
mul $s2, $s2, $s1 # n*(n-1)
sub $s2 ,15 # n * (n – 1) – 15
addi $s0 , $s0 , $s2 # 3 * n + n * (n – 1) – 15
#Printing message
li $v0, 4
la $a0, msg1
syscall
#Printing result
li $v0, 1
la $a0, $s2
syscall
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.