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

I need to translate this to Y86 code: typedef struct elem { int data; struct ele

ID: 648341 • Letter: I

Question

I need to translate this to Y86 code:

typedef struct elem {

int data;

struct elem *left;

struct elem *right;

} node;

node* search(node *tree, int val) {

   if(!tree) {

return NULL;

   }

   if(val == tree->data) {

return tree;

   } else if(val < tree->data) {

return search(tree->left, val);

   } else if(val > tree->data){

return search(tree->right, val);

   }

}

void matrix_xor(int size, int A[size][size], int B[size][size], int C[size][size]) {

   int i, j, k, sum;

   for(i=0;i<size;i++){

for(j=0;j<size;j++){

   sum=0;

   for(k=0;k<size;k++)

sum=sum+(A[i][k]^B[k][j]);

   C[i][j]=sum;

}

}

}

Explanation / Answer

s i m p l e :

p u s h l %ebp # s a v e f rame p o i n t e r

r rm o v l %esp , %ebp # c r e a t e new f rame p o i n t e r

mrmovl 8(%ebp ) , %edx # g e t xp

mrmovl 0(%edx ) , %ebx # g e t ? xp

mrmovl 12(%ebp ) , %eax # g e t y

a d d l %ebx , %eax # t = ? xp + y

rmmovl %eax , 0(%edx ) # s t o r e i n ? xp

p o p l %ebp # r e s t o r e f rame p o i n t e r

r e t # r e t u r n t o c a l l e r

s i m p l e :

p u s h l %ebp

r rm o v l %esp , %ebp

mrmovl 8(%ebp ) , %edx

mrmovl 0(%edx ) , %ebx

mrmovl 12(%ebp ) , %e ax

a d d l %ebx , %e ax

rmmovl %eax , 0(%edx )

p o p l %ebp

r e t

l e n 2 : p u s h l %ebp # s a v e f r ame p o i n t e r

r rm o v l %esp , %ebp # c r e a t e new f r ame p o i n t e r

mrmovl 8(%ebp ) , %edx # g e t a

mrmovl 0(%edx ) , %e ax # g e t ?a

x o r l %ecx , %e cx # l e n = 0

jmp L26

L24 : mrmovl 0(%edx ) , %e ax # g e t ?a

i r m o v l $1 , %e s i

a d d l %e s i , %e cx # l e n++

L26 : i r m o v l $4 , %e s i

a d d l %e s i , %edx # a++

a n d l %eax , %e ax # ?a == 0?

j n e L24

r rm o v l %ecx , %e ax # t h e r e t u r n v a l u e

r rm o v l %ebp , %e s p # c l e a n f r ame

p o p l %ebp # r e s t o r e f r ame p o i n t e r

r e t # r e t u r n t o c a l l e r

s i m p l e :

p u s h l %ebp # s a v e f rame p o i n t e r

r rm o v l %esp , %ebp # c r e a t e new f rame p o i n t e r

mrmovl 8(%ebp ) , %edx # g e t xp

mrmovl 0(%edx ) , %ebx # g e t ? xp

mrmovl 12(%ebp ) , %eax # g e t y

a d d l %ebx , %eax # t = ? xp + y

rmmovl %eax , 0(%edx ) # s t o r e i n ? xp

p o p l %ebp # r e s t o r e f rame p o i n t e r

r e t # r e t u r n t o c a l l e r

s i m p l e :

p u s h l %ebp

r rm o v l %esp , %ebp

mrmovl 8(%ebp ) , %edx

mrmovl 0(%edx ) , %ebx

mrmovl 12(%ebp ) , %e ax

a d d l %ebx , %e ax

rmmovl %eax , 0(%edx )

p o p l %ebp

r e t

l e n 2 : p u s h l %ebp # s a v e f r ame p o i n t e r

r rm o v l %esp , %ebp # c r e a t e new f r ame p o i n t e r

mrmovl 8(%ebp ) , %edx # g e t a

mrmovl 0(%edx ) , %e ax # g e t ?a

x o r l %ecx , %e cx # l e n = 0

jmp L26

L24 : mrmovl 0(%edx ) , %e ax # g e t ?a

i r m o v l $1 , %e s i

a d d l %e s i , %e cx # l e n++

L26 : i r m o v l $4 , %e s i

a d d l %e s i , %edx # a++

a n d l %eax , %e ax # ?a == 0?

j n e L24

r rm o v l %ecx , %e ax # t h e r e t u r n v a l u e

r rm o v l %ebp , %e s p # c l e a n f r ame

p o p l %ebp # r e s t o r e f r ame p o i n t e r

r e t # r e t u r n t o c a l l e r