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