#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
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.