Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int rmOdd(int *src, int n, int *dest)
- {
- int i, j = 0;
- for (i = 0; i < n; i++) {
- if (src[i]%2 == 0) {
- dest[j] = src[i];
- j++;
- }
- }
- return j;
- }
- .text
- .globl rmOdd
- # params: src=$a0, n=$a1, dest=$a2
- rmOdd:
- # prologue
- addi $sp, $sp, -4
- sw $fp, ($sp)
- la $fp, ($sp)
- addi $sp, $sp, -4
- sw $ra, ($sp)
- addi $sp, $sp, -4
- sw $s0, ($sp)
- addi $sp, $sp, -4
- sw $s1, ($sp)
- # function body
- move $t1, $a0 #src
- move $t2, $a1 #n
- move $t3, $a2 #dest
- li $t4, 1 #i = 1
- li $t5, 1 #j = 1
- loop_1:
- bge $t4, $t2, end_loop1 #if i >= n
- mul $t6, $t4, 4 #i = i*4
- add $t6, $t6, $t1 #i = i*4+src
- lw $t6, ($t6) #t4 = src[i]
- rem $t7, $t6, 2 #if src[i] % 2 != 0
- bnez $t7, i_increment
- mul $t8, $t5, 4 #j = j*4
- add $t8, $t8, $t3 #j = j*4+dest
- lw $t8, ($t8)
- move $t6, $t8 #src[i] = dest[j]
- addi $t5, $t5, 1
- i_increment:
- addi $t4, $t4, 1
- j loop_1
- end_loop1:
- move $v0, $t5
- # epilogue
- lw $s1, ($sp)
- addi $sp, $sp, 4
- lw $s0, ($sp)
- addi $sp, $sp, 4
- lw $ra, ($sp)
- addi $sp, $sp, 4
- lw $fp, ($sp)
- addi $sp, $sp, 4
- jr $ra
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement