Objectives: -write assembly language programs to: -define procedures and call th
ID: 3882555 • Letter: O
Question
Objectives:
-write assembly language programs to:
-define procedures and call them.
-create loops
-use syscall operations to display integers and strings on the console window
-use syscall operations to read integers from the keyboard.
Assignment Description:
Implement a MIPS assembly language program that defines main, readArray and removeEvenOdd procedures.
The readArray takes an array of integers as its parameter, reads in integers from a user to fill the array and also print each value as long as it is with the number of elements specified by the parameter "howMany" and "length".
The removeEvenOdd procedure takes parameters of an array of integers, its length, and even value, an asks a user how many integers to read in and calls the readyArray procedure. Then it should go through the array to see if each number is even (divisible by 2) if the parameter even is 0. In that case, such even integer in the array is changed to 1. If the parameter even is 1, then it changes every odd integer in the array to 0. Then it prints out the updated content of the array.
The main procedure asks a user to specify whether to remove even or odd numbers by asking them to enter an integer. Then it calls the removeEvenOdd procedure. It repeats these two steps twice.
Please see the following C program to understand how it should work.
If your program causes an infinite loop, press Control and 'C' keys at the same time to stop it.
Name your source code file assignment6.s.
The following shows how it looks like in a C program:
The following is a sample output (user input is in bold):
Enter zero to remove even numbers or non-zero to remove odd numbers
0
Specify how many numbers should be stored in the array (at most 8):
8
Enter an integer:
1
Enter an integer:
-12
Enter an integer:
53
Enter an integer:
-4
Enter an integer:
5
Enter an integer:
32
Enter an integer:
1
Enter an integer:
7
The array content:
1
-12
53
-4
5
32
1
7
After removing even integers
1
1
53
1
5
1
1
7
Enter zero to remove even numbers or non-zero to remove odd numbers
1
Specify how many numbers should be stored in the array (at most 8):
5
Enter an integer:
1
Enter an integer:
-5
Enter an integer:
-2
Enter an integer:
3
Enter an integer:
2
The array content:
1
-5
-2
3
2
After removing odd integers
0
0
-2
0
2
Explanation / Answer
.file 1 ""
.section .mdebug.abi32
.previous
.nan legacy
.module fp=32
.module nooddspreg
.abicalls
.rdata
.align 2
$LC0:
.ascii "The array content:"
.align 2
$LC1:
.ascii "Enter an integer: "
.align 2
$LC2:
.ascii "%d"
.align 2
$LC3:
.ascii "%d "
.text
.align 2
.globl readArray
.set nomips16
.set nomicromips
.ent readArray
.type readArray, @function
readArray:
.frame $fp,40,$31 # vars= 8, regs= 2/0, args= 16, gp= 8
.mask 0xc0000000,-4
.fmask 0x00000000,0
.set noreorder
.cpload $25
.set nomacro
addiu $sp,$sp,-40
sw $31,36($sp)
sw $fp,32($sp)
move $fp,$sp
.cprestore 16
movz $31,$31,$0
sw $4,40($fp)
sw $5,44($fp)
sw $6,48($fp)
sw $0,24($fp)
lw $2,%got($LC0)($28)
nop
addiu $4,$2,%lo($LC0)
lw $2,%call16(puts)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,puts
1: jalr $25
nop
lw $28,16($fp)
b $L2
nop
$L4:
lw $2,%got($LC1)($28)
nop
addiu $4,$2,%lo($LC1)
lw $2,%call16(puts)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,puts
1: jalr $25
nop
lw $28,16($fp)
addiu $2,$fp,28
move $5,$2
lw $2,%got($LC2)($28)
nop
addiu $4,$2,%lo($LC2)
lw $2,%call16(__isoc99_scanf)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,__isoc99_scanf
1: jalr $25
nop
lw $28,16($fp)
lw $2,24($fp)
nop
sll $2,$2,2
lw $3,40($fp)
nop
addu $2,$3,$2
lw $3,28($fp)
nop
sw $3,0($2)
lw $2,24($fp)
nop
sll $2,$2,2
lw $3,40($fp)
nop
addu $2,$3,$2
lw $2,0($2)
nop
move $5,$2
lw $2,%got($LC3)($28)
nop
addiu $4,$2,%lo($LC3)
lw $2,%call16(printf)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,printf
1: jalr $25
nop
lw $28,16($fp)
lw $2,24($fp)
nop
addiu $2,$2,1
sw $2,24($fp)
$L2:
lw $3,24($fp)
lw $2,48($fp)
nop
slt $2,$3,$2
beq $2,$0,$L6
nop
lw $3,24($fp)
lw $2,44($fp)
nop
slt $2,$3,$2
bne $2,$0,$L4
nop
$L6:
nop
move $sp,$fp
lw $31,36($sp)
lw $fp,32($sp)
addiu $sp,$sp,40
j $31
nop
.set macro
.set reorder
.end readArray
.size readArray, .-readArray
.rdata
.align 2
$LC4:
.ascii "at most 8):"
.align 2
$LC5:
.ascii
.align 2
$LC6:
.ascii
.text
.align 2
.globl removeEvenOdd
.set nomips16
.set nomicromips
.ent removeEvenOdd
.type removeEvenOdd, @function
removeEvenOdd:
.frame $fp,40,$31 # vars= 8, regs= 2/0, args= 16, gp= 8
.mask 0xc0000000,-4
.fmask 0x00000000,0
.set noreorder
.cpload $25
.set nomacro
addiu $sp,$sp,-40
sw $31,36($sp)
sw $fp,32($sp)
move $fp,$sp
.cprestore 16
movz $31,$31,$0
sw $4,40($fp)
sw $5,44($fp)
sw $6,48($fp)
sw $0,24($fp)
sw $0,28($fp)
lw $2,%got($LC4)($28)
nop
addiu $4,$2,%lo($LC4)
lw $2,%call16(puts)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,puts
1: jalr $25
nop
lw $28,16($fp)
addiu $2,$fp,28
move $5,$2
lw $2,%got($LC2)($28)
nop
addiu $4,$2,%lo($LC2)
lw $2,%call16(__isoc99_scanf)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,__isoc99_scanf
1: jalr $25
nop
lw $28,16($fp)
lw $2,28($fp)
nop
move $6,$2
lw $5,44($fp)
lw $4,40($fp)
lw $2,%got(readArray)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,readArray
jalr $25
nop
lw $28,16($fp)
b $L8
nop
$L12:
lw $2,48($fp)
nop
bne $2,$0,$L9
nop
lw $2,24($fp)
nop
sll $2,$2,2
lw $3,40($fp)
nop
addu $2,$3,$2
lw $2,0($2)
nop
andi $2,$2,0x1
bne $2,$0,$L9
nop
lw $2,24($fp)
nop
sll $2,$2,2
lw $3,40($fp)
nop
addu $2,$3,$2
li $3,1
]sw $3,0($2)
b $L10
nop
$L9:
lw $2,48($fp)
nop
beq $2,$0,$L10
nop
lw $2,24($fp)
nop
sll $2,$2,2
lw $3,40($fp)
nop
addu $2,$3,$2
lw $2,0($2)
nop
andi $2,$2,0x1
beq $2,$0,$L10
nop
lw $2,24($fp)
nop
sll $2,$2,2
lw $3,40($fp)
nop
addu $2,$3,$2
sw $0,0($2)
$L10:
lw $2,24($fp)
nop
addiu $2,$2,1
sw $2,24($fp)
$L8:
lw $2,28($fp)
lw $3,24($fp)
nop
slt $2,$3,$2
beq $2,$0,$L11
nop
lw $3,24($fp)
lw $2,44($fp)
nop
slt $2,$3,$2
bne $2,$0,$L12
nop
$L11:
lw $2,48($fp)
nop
bne $2,$0,$L13
nop
lw $2,%got($LC5)($28)
nop
addiu $4,$2,%lo($LC5)
lw $2,%call16(puts)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,puts
jalr $25
nop
lw $28,16($fp)
$L14
$L13:
lw $2,%got($LC6)($28)
nop
addiu $4,$2,%lo($LC6)
lw $2,%call16(puts)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,puts
1: jalr $25
nop
lw $28,16($fp)
$L14:
sw $0,24($fp)
b $L15
nop
$L17:
lw $2,24($fp)
nop
sll $2,$2,2
lw $3,40($fp)
nop
addu $2,$3,$2
lw $2,0($2)
nop
move $5,$2
lw $2,%got($LC3)($28)
nop
addiu $4,$2,%lo($LC3)
lw $2,%call16(printf)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,printf
1: jalr $25
nop
lw $28,16($fp)
lw $2,24($fp)
nop
addiu $2,$2,1
sw $2,24($fp)
$L15:
lw $2,28($fp)
lw $3,24($fp)
nop
slt $2,$3,$2
beq $2,$0,$L18
nop
lw $3,24($fp)
lw $2,44($fp)
nop
slt $2,$3,$2
bne $2,$0,$L17
nop
$L18:
nop
move $sp,$fp
lw $31,36($sp)
lw $fp,32($sp)
addiu $sp,$sp,40
j $31
nop
.set macro
.set reorder
.end
.size
.rdata
.align 2
$LC7:
.ascii
.ascii
.text
.align 2
.globl main
.set nomips16
.set nomicromips
.ent main
.type main, @function
main:
.frame $fp,56,$31
.mask 0xc0010000,-4
.fmask 0x00000000,0
.set noreorder
.cpload $25
.set nomacro
addiu $sp,$sp,-56
sw $31,52($sp)
sw $fp,48($sp)
sw $16,44($sp)
move $fp,$sp
movz $31,$31,$0
.cprestore 16
move $10,$sp
move $16,$10
li $10,8 # 0x8
sw $10,24($fp)
lw $10,24($fp)
nop
addiu $11,$10,-1
sw $11,28($fp)
move $11,$10
move $9,$11
move $8,$0
srl $11,$9,27
sll $4,$8,5
$4,$11,$4
sll $5,$9,5
move $4,$10
move $7,$4
move $6,$0
srl $4,$7,27
sll $2,$6,5
$2,$4,$2
sll $3,$7,5
move $2,$10
sll $2,$2,2
addiu $2,$2,3
addiu $2,$2,7
srl $2,$2,3
sll $2,$2,3
subu $sp,$sp,$2
addiu $2,$sp,16
addiu $2,$2,3
srl $2,$2,2
sll $2,$2,2
sw $2,32($fp)
lw $2,%got($LC7)($28)
nop
addiu $4,$2,%lo($LC7)
lw $2,%call16(puts)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,puts
1: jalr $25
nop
lw $28,16($fp)
addiu $2,$fp,36
move $5,$2
lw $2,%got($LC2)($28)
nop
addiu $4,$2,%lo($LC2)
lw $2,%call16(__isoc99_scanf)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,__isoc99_scanf
1: jalr $25
nop
lw $28,16($fp)
lw $2,32($fp)
lw $3,36($fp)
nop
move $6,$3
lw $5,24($fp)
move $4,$2
lw $2,%got(removeEvenOdd)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,removeEvenOdd
1: jalr $25
nop
lw $28,16($fp)
nop
lw $2,%got($LC7)($28)
nop
addiu $4,$2,%lo($LC7)
lw $2,%call16(puts)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,puts
1: jalr $25
nop
lw $28,16($fp)
addiu $2,$fp,36
move $5,$2
lw $2,%got($LC2)($28)
nop
addiu $4,$2,%lo($LC2)
lw $2,%call16(__isoc99_scanf)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,__isoc99_scanf
1: jalr $25
nop
lw $28,16($fp)
lw $2,32($fp)
lw $3,36($fp)
nop
move $6,$3
lw $5,24($fp)
move $4,$2
lw $2,%got(removeEvenOdd)($28)
nop
move $25,$2
.reloc 1f,R_MIPS_JALR,removeEvenOdd
1: jalr $25
nop
lw $28,16($fp)
nop
move $sp,$16
move $sp,$fp
lw $31,52($sp)
lw $fp,48($sp)
lw $16,44($sp)
addiu $sp,$sp,56
j $31
nop
.set macro
.set reorder
.end main
.size main, .-main
.ident
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.