In: Computer Science
write mips assembly
mips assembly (x+a) (bx^2+cx+d) using the pesedo- code with loop ,program should claclute six T[i] and display aproper message about roots .the the program should store all T[i] as memory array
a = [1, 1, 1, 1, 1, 1];
b = [1, 2, 4, 8, 16, 32];
c = [-6, -4, -2, 2, 4, 6];
d = [-1, -3, -5, -7, -9, -11];
for (i=0 ; i<=6; i++) {
T[i] =-4 *b [i] * d[i] +c[i] * c[i];
if (T[i] <0)
display "tow roots are imaginary";
else
display "tow roots are real ";
}
.LC0:
.string "tow roots are imaginary"
.LC1:
.string "tow roots are real "
main:
push rbp
mov rbp, rsp
sub rsp, 160
mov DWORD PTR [rbp-64], 1
mov DWORD PTR [rbp-60], 1
mov DWORD PTR [rbp-56], 1
mov DWORD PTR [rbp-52], 1
mov DWORD PTR [rbp-48], 1
mov DWORD PTR [rbp-44], 1
mov DWORD PTR [rbp-96], 1
mov DWORD PTR [rbp-92], 2
mov DWORD PTR [rbp-88], 4
mov DWORD PTR [rbp-84], 8
mov DWORD PTR [rbp-80], 16
mov DWORD PTR [rbp-76], 32
mov DWORD PTR [rbp-128], -6
mov DWORD PTR [rbp-124], -4
mov DWORD PTR [rbp-120], -2
mov DWORD PTR [rbp-116], 2
mov DWORD PTR [rbp-112], 4
mov DWORD PTR [rbp-108], 6
mov DWORD PTR [rbp-160], -1
mov DWORD PTR [rbp-156], -3
mov DWORD PTR [rbp-152], -5
mov DWORD PTR [rbp-148], -7
mov DWORD PTR [rbp-144], -9
mov DWORD PTR [rbp-140], -11
mov DWORD PTR [rbp-4], 0
.L5:
cmp DWORD PTR [rbp-4], 6
jg .L2
mov eax, DWORD PTR [rbp-4]
cdqe
mov edx, DWORD PTR [rbp-96+rax*4]
mov eax, DWORD PTR [rbp-4]
cdqe
mov eax, DWORD PTR [rbp-160+rax*4]
imul edx, eax
mov eax, 0
sub eax, edx
sal eax, 2
mov ecx, eax
mov eax, DWORD PTR [rbp-4]
cdqe
mov edx, DWORD PTR [rbp-128+rax*4]
mov eax, DWORD PTR [rbp-4]
cdqe
mov eax, DWORD PTR [rbp-128+rax*4]
imul eax, edx
lea edx, [rcx+rax]
mov eax, DWORD PTR [rbp-4]
cdqe
mov DWORD PTR [rbp-32+rax*4], edx
mov eax, DWORD PTR [rbp-4]
cdqe
mov eax, DWORD PTR [rbp-32+rax*4]
test eax, eax
jns .L3
mov edi, OFFSET FLAT:.LC0
mov eax, 0
call printf
jmp .L4
.L3:
mov edi, OFFSET FLAT:.LC1
mov eax, 0
call printf
.L4:
add DWORD PTR [rbp-4], 1
jmp .L5
.L2:
mov eax, 0
leave
ret