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

#include <stdio.h> int BinaryDiff(int, int); int main(void) { int H[9] = {1, 2,

ID: 3559730 • Letter: #

Question

#include <stdio.h>

int BinaryDiff(int, int);

int main(void) {

   int H[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

int V[9] = {10, 11, 12, 13, 14, 15, 16, 17, 19};

   int PixPhase[9], i, x=0, y, z;   

   for (i=1;i<=8;i++) {

       PixPhase[i] = BinaryDiff((H[i-1] * 13), V[i]) + (BinaryDiff(H[i], V[i]) * 4);

       x += PixPhase[i];

   }   

   y = x/8;

   z = x%8;   

   printf("Quotient: %d ", y);

   printf("Remainder: %d/8", z);   

return(0);

}

int BinaryDiff(int x, int y){

   int i, result=0;

   char binOne[31], binTwo[31];   

   for (i=31;i>=0;i--) {

       binOne[i] = '0' + ((x>>i) & 1); //put char with ASCII code for either 0 or 1 by adding 1 for the ith bit to ASCII of '0'

       binTwo[i] = '0' + ((y>>i) & 1);

   if (binOne[i] != binTwo[i])

       result++;

   }

   return (result);

}

Explanation / Answer

.data
H_array: .word 1,2,3,4,5,6,7,8,9
#H_array: .word 0,0,0,0,0,0,0,0,0
V_array: .word 10,11,12,13,14,15,16,17,19
#V_array: .word 0,0,0,0,0,0,0,0,1
PixelPhase_array: .word 0,0,0,0,0,0,0,0,0
x_value: .word 0
Newline:
.asciiz " "
quotient:
   .asciiz " Quotient "
remainder:
   .asciiz " Remainder "
.text
main:
addiu $sp, $sp, -24
sw $fp, 0($sp)
sw $ra, 4($sp)
addiu $fp, $sp, 24

li $t0,1 # i =1
li $t1,8
la $t2,H_array
la $t3,V_array
la $t4,PixelPhase_array
addi $t4,$t4,4 #pixelphase[1]
addi $t3,$t3,4 #V_array[1]
Loop: bgt $t0,$t1,Done
lw $t5,0($t2) #H_array[i-1]
add $t6,$t5,$t5 #2*H[i-1]
add $t6,$t6,$t6 #4*H[i-1]
add $t7,$t6,$t6 #8*H[i-1]
add $t7,$t7,$t6 #12*H[i-1]
add $a0,$t7,$t5 #13*H[i-1]
lw $a1,0($t3)
jal BitDiff
sw $a2,0($t4)
lw $a0,4($t2) #H_array[i]
lw $a1,0($t3)
jal BitDiff
add $a2,$a2,$a2 #BinaryDiff(H[i], V[i]) * 2
add $a2,$a2,$a2 #BinaryDiff(H[i], V[i]) * 4
lw $a0,0($t4)
add $a2,$a0,$a2
sw $a2,0($t4) #update pixel phase
  
la $a0,x_value
lw $a1,0($a0)
add $a2,$a2,$a1
sw $a2,0($a0)

addi $t4,$t4,4 #pixelphase[1]
addi $t3,$t3,4 #V_array[1]
addi $t2,$t2,4 #H_array[i]   
addi $t0,$t0,1
b Loop
Done:
   la $a0,x_value
lw $a2,0($a0)
srl $a2,$a2,3 #division by 8
la $a0,quotient
li $v0, 4 # service 4 is print string
syscall

li $v0, 1 # service 1 is print integer
add $a0, $a2, $zero # load desired value into argument register $a0, using pseudo-op
syscall

   la $a0,x_value
lw $a2,0($a0)
andi $a2,$a2,7 #remainder after division by 8 will be the last 3 bits in the binary notataion
la $a0,remainder
li $v0, 4 # service 4 is print string
syscall
li $v0, 1 # service 1 is print integer
add $a0, $a2, $zero # load desired value into argument register $a0, using pseudo-op
syscall
  
lw $ra, 4($sp)
lw $fp, 0($sp)   
addiu $sp, $sp, 24   
jr $ra
  
.text
BitDiff:
  
addiu $sp, $sp, -24
sw $fp, 0($sp)   
sw $ra, 4($sp)   
sw $a0, 8($sp)   
sw $a1, 12($sp)   
addiu $fp, $sp, 24   
xor $a0,$a1,$a0
li $a1,32
li $a2,0
loop1:
andi $a3,$a0,1
add $a2,$a2,$a3
srl $a0,$a0,1
subi $a1,$a1,1
bgt $a1,$0,loop1
li $v0, 1 # service 1 is print integer
add $a0, $a2, $zero # load desired value into argument register $a0, using pseudo-op
#syscall   

end:
lw $a1, 12($sp)
lw $a0, 8($sp)   
lw $ra, 4($sp)   
lw $fp, 0($sp)   
addiu $sp, $sp, 24   
jr $ra