Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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