While using MIPSAssembly In this lab, you must write a program in MIPS assembly
ID: 3787175 • Letter: W
Question
While using MIPSAssemblyIn this lab, you must write a program in MIPS assembly that meets the following requirements. 1. The address of the ASCII character array is supplied in address 0x10010000. 2. The length of the array is not specified. Instead, the last character in the array will be a 0x00, which is referred to as the “null” character. In other words, the character array is null-terminated, and values after the null-terminating character must not be affected. (You may assume that the input is valid and there is at least one null character, even if it is the first byte found.) 3. Beginning at the address supplied, all one-byte values in the character array corresponding to lowercase ASCII letters must be converted to uppercase ASCII letters, and all other ASCII characters must not be changed.
Also, the assembly code must be well-commented, containing A comment block at the beginning with names, course, assignment, date of last modification, brief description of the program, description of the inputs, and description of the output. The header should explain exactly what the program does and how to use it without needing to reference this handout. Comments within the code explaining the purpose and reason for the instructions. I.e. do not just explain what a line of assembly does. Assume that all inputs are valid, i.e. you do not need to check for bad user input. While using MIPSAssembly
In this lab, you must write a program in MIPS assembly that meets the following requirements. 1. The address of the ASCII character array is supplied in address 0x10010000. 2. The length of the array is not specified. Instead, the last character in the array will be a 0x00, which is referred to as the “null” character. In other words, the character array is null-terminated, and values after the null-terminating character must not be affected. (You may assume that the input is valid and there is at least one null character, even if it is the first byte found.) 3. Beginning at the address supplied, all one-byte values in the character array corresponding to lowercase ASCII letters must be converted to uppercase ASCII letters, and all other ASCII characters must not be changed.
Also, the assembly code must be well-commented, containing A comment block at the beginning with names, course, assignment, date of last modification, brief description of the program, description of the inputs, and description of the output. The header should explain exactly what the program does and how to use it without needing to reference this handout. Comments within the code explaining the purpose and reason for the instructions. I.e. do not just explain what a line of assembly does. Assume that all inputs are valid, i.e. you do not need to check for bad user input.
In this lab, you must write a program in MIPS assembly that meets the following requirements. 1. The address of the ASCII character array is supplied in address 0x10010000. 2. The length of the array is not specified. Instead, the last character in the array will be a 0x00, which is referred to as the “null” character. In other words, the character array is null-terminated, and values after the null-terminating character must not be affected. (You may assume that the input is valid and there is at least one null character, even if it is the first byte found.) 3. Beginning at the address supplied, all one-byte values in the character array corresponding to lowercase ASCII letters must be converted to uppercase ASCII letters, and all other ASCII characters must not be changed.
Also, the assembly code must be well-commented, containing A comment block at the beginning with names, course, assignment, date of last modification, brief description of the program, description of the inputs, and description of the output. The header should explain exactly what the program does and how to use it without needing to reference this handout. Comments within the code explaining the purpose and reason for the instructions. I.e. do not just explain what a line of assembly does. Assume that all inputs are valid, i.e. you do not need to check for bad user input. Also, the assembly code must be well-commented, containing A comment block at the beginning with names, course, assignment, date of last modification, brief description of the program, description of the inputs, and description of the output. The header should explain exactly what the program does and how to use it without needing to reference this handout. Comments within the code explaining the purpose and reason for the instructions. I.e. do not just explain what a line of assembly does. Assume that all inputs are valid, i.e. you do not need to check for bad user input.
Explanation / Answer
void metric linear unit (int c[][], int a[][], int b[][])
.text
main:
j mm
mm:
la $a3, array_A # base address for array_A loaded into $a3
la $a1, array_B # base address for array_B loaded into $a1
la $a2, array_C # base address for array_C loaded into $a2
li $t1, four # $t1 = four (row-size and loop end)
li $s0, zero # i = 0; initialize first for loop
loop1:
li $s1, zero # j = 0; restart ordinal for loop
loop2:
li $s2, zero # k = 0; restart third for loop
sll $t2, $s0, two # $t2 = i * four (size of row of c)
addu $t2, $t2, $s1 # $t2 = i * size(row) + j
sll $t2, $t2, two # $t2 = computer memory unit offset of [i][j]
addu $t2, $a2, $t2 # $t2 = computer memory unit offset of [i][j]
lw $t4, 0($t2) # $t4 = two bytes of c[i][j]
loop3:
sll $t0, $s2, two # $t0 = k * four (size of row of b)
addu $t0, $t0, $s1 # $t0 = k * size(row) + j
sll $t0, $t0, two # $t0 = computer memory unit offset off [k][j]
addu $t0, $a1, $t0 # $t0 = computer memory unit address of b[k][j]
lw $t5, 0($t0) # $t5 = two bytes of b[k][j]
sll $t0, $s0, two # $t0 = i * four (size of row of a)
addu $t0, $t0, $s2 # $t0 = i * size(row) + k
sll $t0, $t0, two # $t0 = computer memory unit offset of [i][k]
addu $t0, $a3, $t0 # $t0 = computer memory unit address of a[i][k]
lw $t6, 0($t0) # $t6 = two bytes of a[i][k]
mul $t5, $t6, $t5 # $t5 = a[i][k] * b[k][j]
add $t4, $t4, $t5 # $t4 = c[i][j] + a[i][k] * b[k][j]
addiu $s2, $s2, one # $k = k + one
bne $s2, $t1, loop3 #if (k != 4) attend loop3
sw $t4, 0($a2) # c[i][j] = $t4
#----------TEST-------------
li $v0, 1
lw $a0, ($a2)
syscall
li $v0, 4
la $a0, new_row
syscall
#----------TEST-------------
addiu $s1, $s1, one # $j = j + one
addi $a2, $a2, 4
bne $s1, $t1, loop2 # if (j != 4) attend loop2
addiu $s0, $s0, one # $i = i + one
bne $s0, $t1, loop1 # if (i != 32) attend L1
Exit:
li $v0, 10 #exits
syscall
.data
array_A: .word 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
array_B: .word 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2
array_C: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
output_row_string_C: .asciiz "Matrix C Output Row "
colon_string: .asciiz ":
space_string: .asciiz " "
new_row: .asciiz " "
char_space: .space 2
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.