Your task is to explain how each MIPS instruction is related to the C program, t
ID: 3690921 • Letter: Y
Question
Your task is to explain how each MIPS instruction is related to the C program, translate what C program does in MIPS file. For each statement in the main() and MinMaxIt() functions of the C program, explain why the compiler produced the corresponding set of instructions
C file
MIPS code:
.file 1 "G1.c"
.globl A
.data
.align 2
A:
.word 11
.word 2
.word 33
.word 4
.word 15
.word 6
.word 7
.word 8
.word 9
.word 10
.rdata
.align 2
$LC0:
.ascii "MinMaxIt = "
.sdata
.align 2
$LC1:
.ascii " "
.align 2
$LC2:
.ascii " "
.text
.align 2
.globl main
.ent main
main:
.frame $fp,32,$31 # vars= 8, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,32
sw $31,28($sp)
sw $fp,24($sp)
move $fp,$sp
jal __main
addu $2,$fp,20
la $4,A
li $5,10 # 0xa
addu $6,$fp,16
move $7,$2
jal MinMaxIt
la $4,$LC0
jal print_str
lw $4,16($fp)
jal print_int
la $4,$LC1
jal print_str
lw $4,20($fp)
jal print_int
la $4,$LC2
jal print_str
move $2,$0
move $sp,$fp
lw $31,28($sp)
lw $fp,24($sp)
addu $sp,$sp,32
j $31
.end main
.align 2
.globl MinMaxIt
.ent MinMaxIt
MinMaxIt:
.frame $fp,16,$31 # vars= 0, regs= 4/0, args= 0, extra= 0
.mask 0x40e00000,-4
.fmask 0x00000000,0
subu $sp,$sp,16
sw $fp,12($sp)
sw $23,8($sp)
sw $22,4($sp)
sw $21,0($sp)
move $fp,$sp
sw $4,16($fp)
sw $5,20($fp)
sw $6,24($fp)
sw $7,28($fp)
lw $2,16($fp)
lw $21,0($2)
lw $3,16($fp)
lw $22,0($3)
lw $2,16($fp)
addu $23,$2,4
$L3:
lw $2,20($fp)
sll $2,$2,2
lw $3,16($fp)
addu $2,$3,$2
sltu $2,$23,$2
bne $2,$0,$L6
j $L4
$L6:
lw $2,0($23)
slt $2,$2,$21
beq $2,$0,$L7
lw $21,0($23)
$L7:
lw $2,0($23)
slt $2,$22,$2
beq $2,$0,$L5
lw $22,0($23)
$L5:
addu $23,$23,4
j $L3
$L4:
lw $2,28($fp)
sw $22,0($2)
lw $3,24($fp)
sw $21,0($3)
move $2,$0
move $sp,$fp
lw $fp,12($sp)
lw $23,8($sp)
lw $22,4($sp)
lw $21,0($sp)
addu $sp,$sp,16
j $31
.end MinMaxIt
.align 2
.globl __main
.ent __main
__main:
.frame $fp,8,$31 # vars= 0, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,8
sw $fp,0($sp)
move $fp,$sp
move $2,$0
move $sp,$fp
lw $fp,0($sp)
addu $sp,$sp,8
j $31
.end __main
.align 2
.globl dummy
.ent dummy
dummy:
.frame $fp,8,$31 # vars= 0, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,8
sw $fp,0($sp)
move $fp,$sp
sw $4,8($fp)
move $2,$0
move $sp,$fp
lw $fp,0($sp)
addu $sp,$sp,8
j $31
.end dummy
.align 2
.globl print_int
.ent print_int
print_int:
.frame $fp,16,$31 # vars= 8, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,16
sw $fp,8($sp)
move $fp,$sp
sw $4,16($fp)
li $2,1 # 0x1
sw $2,0($fp)
lw $3,0($fp)
lw $2,16($fp)
#APP
add $a0,$2,$zero
add $v0,$3,$zero
syscall
#NO_APP
lw $2,16($fp)
move $sp,$fp
lw $fp,8($sp)
addu $sp,$sp,16
j $31
.end print_int
.align 2
.globl print_hex
.ent print_hex
print_hex:
.frame $fp,40,$31 # vars= 16, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,40
sw $31,36($sp)
sw $fp,32($sp)
move $fp,$sp
sw $4,40($fp)
lw $4,40($fp)
addu $5,$fp,16
jal itox
addu $4,$fp,16
jal print_str
lw $2,40($fp)
move $sp,$fp
lw $31,36($sp)
lw $fp,32($sp)
addu $sp,$sp,40
j $31
.end print_hex
.align 2
.globl print_str
.ent print_str
print_str:
.frame $fp,16,$31 # vars= 8, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,16
sw $fp,8($sp)
move $fp,$sp
sw $4,16($fp)
li $2,4 # 0x4
sw $2,0($fp)
lw $3,0($fp)
lw $2,16($fp)
#APP
add $a0,$2,$zero
add $v0,$3,$zero
syscall
#NO_APP
move $2,$0
move $sp,$fp
lw $fp,8($sp)
addu $sp,$sp,16
j $31
.end print_str
.align 2
.globl itox
.ent itox
itox:
.frame $fp,24,$31 # vars= 16, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
subu $sp,$sp,24
sw $fp,16($sp)
move $fp,$sp
sw $4,24($fp)
sw $5,28($fp)
li $2,7 # 0x7
sw $2,4($fp)
sw $0,0($fp)
$L15:
lw $2,0($fp)
slt $2,$2,8
bne $2,$0,$L18
j $L16
$L18:
lw $2,24($fp)
andi $2,$2,0xf
sw $2,8($fp)
lw $2,8($fp)
slt $2,$2,10
beq $2,$0,$L19
lw $3,28($fp)
lw $2,4($fp)
addu $3,$3,$2
lbu $2,8($fp)
addu $2,$2,48
sb $2,0($3)
j $L20
$L19:
lw $3,28($fp)
lw $2,4($fp)
addu $3,$3,$2
lbu $2,8($fp)
addu $2,$2,55
sb $2,0($3)
$L20:
lw $2,24($fp)
sra $2,$2,4
sw $2,24($fp)
lw $2,4($fp)
addu $2,$2,-1
sw $2,4($fp)
lw $2,0($fp)
addu $2,$2,1
sw $2,0($fp)
j $L15
$L16:
lw $2,28($fp)
addu $2,$2,8
sb $0,0($2)
lw $2,24($fp)
move $sp,$fp
lw $fp,16($sp)
addu $sp,$sp,24
j $31
.end itox
.align 2
.globl print_stack
.ent print_stack
print_stack:
.frame $fp,40,$31 # vars= 16, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,40
sw $31,36($sp)
sw $fp,32($sp)
move $fp,$sp
sw $4,40($fp)
li $2,42 # 0x2a
sw $2,28($fp)
addu $2,$fp,40
sw $2,16($fp)
lw $2,16($fp)
sw $2,20($fp)
lw $4,20($fp)
jal print_hex
la $4,$LC2
jal print_str
lw $2,16($fp)
addu $2,$2,-80
sw $2,16($fp)
sw $0,24($fp)
$L22:
lw $2,24($fp)
slt $2,$2,82
bne $2,$0,$L25
j $L23
$L25:
lw $2,16($fp)
sw $2,20($fp)
lw $4,20($fp)
jal print_hex
la $4,$LC1
jal print_str
lw $2,16($fp)
lw $2,0($2)
sw $2,20($fp)
lw $4,20($fp)
jal print_hex
la $4,$LC2
jal print_str
lw $2,16($fp)
addu $2,$2,4
sw $2,16($fp)
lw $2,24($fp)
addu $2,$2,1
sw $2,24($fp)
j $L22
$L23:
lw $2,28($fp)
move $sp,$fp
lw $31,36($sp)
lw $fp,32($sp)
addu $sp,$sp,40
j $31
.end print_stack
Explanation / Answer
is equal to
A:
.word 11
.word 2
.word 33
.word 4
.word 15
.word 6
.word 7
.word 8
.word 9
.word 10
print_int:
.frame $fp,16,$31 # vars= 8, regs= 1/0, args= 0, extra= 0
.mask 0x40000000,-8
.fmask 0x00000000,0
print_stack:
.frame $fp,40,$31 # vars= 16, regs= 2/0, args= 16, extra= 0
.mask 0xc0000000,-4
.fmask 0x00000000,0
subu $sp,$sp,40
sw $31,36($sp)
sw $fp,32($sp)
move $fp,$sp
sw $4,40($fp)
li $2,42 # 0x2a
sw $2,28($fp)
addu $2,$fp,40
sw $2,16($fp)
lw $2,16($fp)
sw $2,20($fp)
lw $4,20($fp)
jal print_hex
la $4,$LC2
jal print_str
lw $2,16($fp)
addu $2,$2,-80
sw $2,16($fp)
sw $0,24($fp)
$L22:
lw $2,24($fp)
slt $2,$2,82
bne $2,$0,$L25
j $L23
$L25:
lw $2,16($fp)
sw $2,20($fp)
lw $4,20($fp)
jal print_hex
la $4,$LC1
jal print_str
lw $2,16($fp)
lw $2,0($2)
sw $2,20($fp)
lw $4,20($fp)
jal print_hex
la $4,$LC2
jal print_str
lw $2,16($fp)
addu $2,$2,4
sw $2,16($fp)
lw $2,24($fp)
addu $2,$2,1
sw $2,24($fp)
j $L22
$L23:
lw $2,28($fp)
move $sp,$fp
lw $31,36($sp)
lw $fp,32($sp)
addu $sp,$sp,40
j $31
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.