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

Please, some one who can help me to change the c to MIPS, and can compile and ru

ID: 3701891 • Letter: P

Question

Please, some one who can help me to change the c to MIPS, and can compile and run one the Mars 4 thank you so much

#include<stdio.h>

int number;

void print(int a[]);,

void change(int *n, int *m);

int main()

{

int t[7]={1,1,1,0,2,2,2};

int i, flag;

print(t);

while(t[0]+t[1]+t[2]!=6 || t[4]+t[5]+t[6]!=3)

{

flag=1;

for(i=0; flag&&i<5; i++)

if(t[i]==1 && t[i+1]==2 && t[i+2]==0)

{

change(&t[i], &t[i+2]);

print(t);

flag=0;}

for(i=0; flag&&i<5; i++)

if(t[i]==0 && t[i+1]==1 && t[i+2]==2)

{

change(&t[i], &t[i+2]);

print(t);

flag=0;

}

for(i=0; flag&&i<6; i++)

if(t[i]==1 && t[i+1]==0 && (i==0||t[i-1]!=t[i+2]))

{

change(&t[i], &t[i+1]);

print(t);

flag=0;

}

for(i=0; flag&&i<6; i++)

if(t[i]==0 && t[i+1]==2 && (i==5||t[i-1]!=t[i+2]))

{

change(&t[i], &t[i+1]);

print(t);

flag=0;

}

}

return 0;

}

void print(int a[])

{

int i;

printf("No. %2d:……………………….. ", number++);

printf(" ");

for(i=0; i<=6; i++)

printf(" | %c",a[i]==1?'*':(a[i]==2?'@':' '));

printf(" | ……………………….. ");

}

void change(int *n, int *m)

{

int term;

term=*n;

*n=*m;

*m=term;

}

Explanation / Answer

.LC0:

.string "%d"

main:

push rbp

mov rbp, rsp

sub rsp, 48

mov DWORD PTR [rbp-48], 1

mov DWORD PTR [rbp-44], 1

mov DWORD PTR [rbp-40], 1

mov DWORD PTR [rbp-36], 0

mov DWORD PTR [rbp-32], 2

mov DWORD PTR [rbp-28], 2

mov DWORD PTR [rbp-24], 2

lea rax, [rbp-48]

mov rsi, rax

mov edi, OFFSET FLAT:.LC0

mov eax, 0

call printf

jmp .L2

.L20:

mov DWORD PTR [rbp-8], 1

mov DWORD PTR [rbp-4], 0

jmp .L3

.L6:

mov eax, DWORD PTR [rbp-4]

cdqe

mov eax, DWORD PTR [rbp-48+rax*4]

cmp eax, 1

jne .L4

mov eax, DWORD PTR [rbp-4]

add eax, 1

cdqe

mov eax, DWORD PTR [rbp-48+rax*4]

cmp eax, 2

jne .L4

mov eax, DWORD PTR [rbp-4]

add eax, 2

cdqe

mov eax, DWORD PTR [rbp-48+rax*4]

test eax, eax

jne .L4

mov eax, DWORD PTR [rbp-4]

lea edx, [rax+2]

lea rax, [rbp-48]

movsx rdx, edx

sal rdx, 2

add rdx, rax

lea rax, [rbp-48]

mov ecx, DWORD PTR [rbp-4]

movsx rcx, ecx

sal rcx, 2

add rax, rcx

mov rsi, rdx

mov rdi, rax

call change

mov eax, DWORD PTR [rbp-4]

cdqe

mov eax, DWORD PTR [rbp-48+rax*4]

mov esi, eax

mov edi, OFFSET FLAT:.LC0

mov eax, 0

call printf

mov DWORD PTR [rbp-8], 0

.L4:

add DWORD PTR [rbp-4], 1

.L3:

cmp DWORD PTR [rbp-8], 0

je .L5

cmp DWORD PTR [rbp-4], 4

jle .L6

.L5:

mov DWORD PTR [rbp-4], 0

jmp .L7

.L10:

mov eax, DWORD PTR [rbp-4]

cdqe

mov eax, DWORD PTR [rbp-48+rax*4]

test eax, eax

jne .L8

mov eax, DWORD PTR [rbp-4]

add eax, 1

cdqe

mov eax, DWORD PTR [rbp-48+rax*4]

cmp eax, 1

jne .L8

mov eax, DWORD PTR [rbp-4]

add eax, 2

cdqe

mov eax, DWORD PTR [rbp-48+rax*4]

cmp eax, 2

jne .L8

mov eax, DWORD PTR [rbp-4]

lea edx, [rax+2]

lea rax, [rbp-48]

movsx rdx, edx

sal rdx, 2

add rdx, rax

lea rax, [rbp-48]

mov ecx, DWORD PTR [rbp-4]

movsx rcx, ecx

sal rcx, 2

add rax, rcx

mov rsi, rdx

mov rdi, rax

call change

mov eax, DWORD PTR [rbp-4]

cdqe

mov eax, DWORD PTR [rbp-48+rax*4]

mov esi, eax

mov edi, OFFSET FLAT:.LC0

mov eax, 0

call printf

mov DWORD PTR [rbp-8], 0

.L8:

add DWORD PTR [rbp-4], 1

.L7:

cmp DWORD PTR [rbp-8], 0

je .L9

cmp DWORD PTR [rbp-4], 4

jle .L10

.L9:

mov DWORD PTR [rbp-4], 0

jmp .L11

.L15:

mov eax, DWORD PTR [rbp-4]

cdqe

mov eax, DWORD PTR [rbp-48+rax*4]

cmp eax, 1

jne .L12

mov eax, DWORD PTR [rbp-4]

add eax, 1

cdqe

mov eax, DWORD PTR [rbp-48+rax*4]

test eax, eax

jne .L12

cmp DWORD PTR [rbp-4], 0

je .L13

mov eax, DWORD PTR [rbp-4]

sub eax, 1

cdqe

mov edx, DWORD PTR [rbp-48+rax*4]

mov eax, DWORD PTR [rbp-4]

add eax, 2

cdqe

mov eax, DWORD PTR [rbp-48+rax*4]

cmp edx, eax

je .L12

.L13:

mov eax, DWORD PTR [rbp-4]

lea edx, [rax+1]

lea rax, [rbp-48]

movsx rdx, edx

sal rdx, 2

add rdx, rax

lea rax, [rbp-48]

mov ecx, DWORD PTR [rbp-4]

movsx rcx, ecx

sal rcx, 2

add rax, rcx

mov rsi, rdx

mov rdi, rax

call change

mov eax, DWORD PTR [rbp-4]

cdqe

mov eax, DWORD PTR [rbp-48+rax*4]

mov esi, eax

mov edi, OFFSET FLAT:.LC0

mov eax, 0

call printf

mov DWORD PTR [rbp-8], 0

.L12:

add DWORD PTR [rbp-4], 1

.L11:

cmp DWORD PTR [rbp-8], 0

je .L14

cmp DWORD PTR [rbp-4], 5

jle .L15

.L14:

mov DWORD PTR [rbp-4], 0

jmp .L16

.L19:

mov eax, DWORD PTR [rbp-4]

cdqe

mov eax, DWORD PTR [rbp-48+rax*4]

test eax, eax

jne .L17

mov eax, DWORD PTR [rbp-4]

add eax, 1

cdqe

mov eax, DWORD PTR [rbp-48+rax*4]

cmp eax, 2

jne .L17

cmp DWORD PTR [rbp-4], 5

je .L18

mov eax, DWORD PTR [rbp-4]

sub eax, 1

cdqe

mov edx, DWORD PTR [rbp-48+rax*4]

mov eax, DWORD PTR [rbp-4]

add eax, 2

cdqe

mov eax, DWORD PTR [rbp-48+rax*4]

cmp edx, eax

je .L17

.L18:

mov eax, DWORD PTR [rbp-4]

lea edx, [rax+1]

lea rax, [rbp-48]

movsx rdx, edx

sal rdx, 2

add rdx, rax

lea rax, [rbp-48]

mov ecx, DWORD PTR [rbp-4]

movsx rcx, ecx

sal rcx, 2

add rax, rcx

mov rsi, rdx

mov rdi, rax

call change

mov eax, DWORD PTR [rbp-4]

cdqe

mov eax, DWORD PTR [rbp-48+rax*4]

mov esi, eax

mov edi, OFFSET FLAT:.LC0

mov eax, 0

call printf

mov DWORD PTR [rbp-8], 0

.L17:

add DWORD PTR [rbp-4], 1

.L16:

cmp DWORD PTR [rbp-8], 0

je .L2

cmp DWORD PTR [rbp-4], 5

jle .L19

.L2:

mov edx, DWORD PTR [rbp-48]

mov eax, DWORD PTR [rbp-44]

add edx, eax

mov eax, DWORD PTR [rbp-40]

add eax, edx

cmp eax, 6

jne .L20

mov edx, DWORD PTR [rbp-32]

mov eax, DWORD PTR [rbp-28]

add edx, eax

mov eax, DWORD PTR [rbp-24]

add eax, edx

cmp eax, 3

jne .L20

mov eax, 0

leave

ret

.LC1:

.string "No. %2d:……………………….. "

.LC2:

.string " | %c"

.LC3:

.string " | ……………………….. "

print:

push rbp

mov rbp, rsp

sub rsp, 32

mov QWORD PTR [rbp-24], rdi

mov eax, DWORD PTR number[rip]

lea edx, [rax+1]

mov DWORD PTR number[rip], edx

mov esi, eax

mov edi, OFFSET FLAT:.LC1

mov eax, 0

call printf

mov edi, 32

call putchar

mov DWORD PTR [rbp-4], 0

jmp .L23

.L28:

mov eax, DWORD PTR [rbp-4]

cdqe

lea rdx, [0+rax*4]

mov rax, QWORD PTR [rbp-24]

add rax, rdx

mov eax, DWORD PTR [rax]

cmp eax, 1

je .L24

mov eax, DWORD PTR [rbp-4]

cdqe

lea rdx, [0+rax*4]

mov rax, QWORD PTR [rbp-24]

add rax, rdx

mov eax, DWORD PTR [rax]

cmp eax, 2

jne .L25

mov eax, 64

jmp .L27

.L25:

mov eax, 32

jmp .L27

.L24:

mov eax, 42

.L27:

mov esi, eax

mov edi, OFFSET FLAT:.LC2

mov eax, 0

call printf

add DWORD PTR [rbp-4], 1

.L23:

cmp DWORD PTR [rbp-4], 6

jle .L28

mov edi, OFFSET FLAT:.LC3

call puts

nop

leave

ret

change:

push rbp

mov rbp, rsp

mov QWORD PTR [rbp-24], rdi

mov QWORD PTR [rbp-32], rsi

mov rax, QWORD PTR [rbp-24]

mov eax, DWORD PTR [rax]

mov DWORD PTR [rbp-4], eax

mov rax, QWORD PTR [rbp-32]

mov edx, DWORD PTR [rax]

mov rax, QWORD PTR [rbp-24]

mov DWORD PTR [rax], edx

mov rax, QWORD PTR [rbp-32]

mov edx, DWORD PTR [rbp-4]

mov DWORD PTR [rax], edx

nop

pop rbp

ret