Write a MIPS Assembly Language program which requests a filename from from the u
ID: 3593494 • Letter: W
Question
Write a MIPS Assembly Language program which requests a filename from from the user. The file must contain integers which are on separate lines. The program then reads the file,
Accumulate the sum of the products which is output as the final value.
Execution should look similar to the following:
What file contains your information? plugh.txt
Final output = n1 * n2 + n3 * n4 + ...
Upload your source code and report.
Suppose that the input file contains 10 data values: n0, n1, ..., n9. Then the output might look like (where values, not labels are output and sp = p0 + p1 + p2 + p3 + p4):
n0 * n1 = p0
n2 * n3 = p1
n4 * n5 = p2
n6 * n7 = p3
n8 * n9 = p4
Final Output = sp
Explanation / Answer
Solution:
code:
.file 1 ""
.section .mdebug.abi32
.previous
.nan legacy
.module fp=32
.module nooddspreg
.abicalls
.rdata
.align 2
$LC0:
.ascii "r"
.align 2
$LC1:
.ascii "D:\test.txt"
.align 2
$LC2:
.ascii "Cannot open file "
.align 2
$LC3:
.ascii "%i"
.align 2
$LC4:
.ascii "%d"
.text
.align 2
.globl main
.set nomips16
.set nomicromips
.ent main
.type main, @function
main:
.frame $fp,56,$31 # vars= 24, regs= 2/0, args= 16, gp= 8
.mask 0xc0000000,-4
.fmask 0x00000000,0
.set noreorder
.cpload $25
.set nomacro
addiu $sp,$sp,-56
sw $31,52($sp)
sw $fp,48($sp)
move $fp,$sp
.cprestore 16
movz $31,$31,$0
sw $0,24($fp)
lw $2,%got($LC0)($28)
nop
addiu $5,$2,%lo($LC0)
lw $2,%got($LC1)($28)
nop
addiu $4,$2,%lo($LC1)
lw $2,%call16(fopen)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,fopen
1: jalr $25
nop
lw $28,16($fp)
sw $2,36($fp)
lw $2,36($fp)
nop
bne $2,$0,$L2
nop
lw $2,%got($LC2)($28)
nop
addiu $4,$2,%lo($LC2)
lw $2,%call16(puts)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,puts
1: jalr $25
nop
lw $28,16($fp)
move $4,$0
lw $2,%call16(exit)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,exit
1: jalr $25
nop
$L2:
sw $0,40($fp)
sw $0,44($fp)
li $2,1 # 0x1
sw $2,28($fp)
b $L3
nop
$L8:
sw $0,32($fp)
lw $2,28($fp)
nop
beq $2,$0,$L4
nop
addiu $2,$fp,44
move $6,$2
lw $2,%got($LC3)($28)
nop
addiu $5,$2,%lo($LC3)
lw $4,36($fp)
lw $2,%call16(__isoc99_fscanf)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,__isoc99_fscanf
1: jalr $25
nop
lw $28,16($fp)
sw $2,32($fp)
sw $0,28($fp)
b $L5
nop
$L4:
addiu $2,$fp,40
move $6,$2
lw $2,%got($LC3)($28)
nop
addiu $5,$2,%lo($LC3)
lw $4,36($fp)
lw $2,%call16(__isoc99_fscanf)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,__isoc99_fscanf
1: jalr $25
nop
lw $28,16($fp)
sw $2,32($fp)
li $2,1 # 0x1
sw $2,28($fp)
$L5:
lw $3,32($fp)
li $2,-1 # 0xffffffffffffffff
beq $3,$2,$L11
nop
lw $2,28($fp)
nop
beq $2,$0,$L3
nop
lw $3,44($fp)
lw $2,40($fp)
nop
mult $3,$2
lw $2,24($fp)
mflo $3
addu $2,$2,$3
sw $2,24($fp)
$L3:
lw $2,36($fp)
nop
bne $2,$0,$L8
nop
b $L7
nop
$L11:
nop
$L7:
lw $2,28($fp)
nop
beq $2,$0,$L9
nop
lw $2,44($fp)
lw $3,24($fp)
nop
addu $2,$3,$2
sw $2,24($fp)
$L9:
lw $4,36($fp)
lw $2,%call16(fclose)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,fclose
1: jalr $25
nop
lw $28,16($fp)
lw $5,24($fp)
lw $2,%got($LC4)($28)
nop
addiu $4,$2,%lo($LC4)
lw $2,%call16(printf)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,printf
1: jalr $25
nop
lw $28,16($fp)
move $2,$0
move $sp,$fp
lw $31,52($sp)
lw $fp,48($sp)
addiu $sp,$sp,56
j $31
nop
.set macro
.set reorder
.end main
.size main, .-main
Please, please upvote and ask your doubts in the comments.
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.