C/C++

Модификация кода под язык ассемблера. Помогите, пожалуйста

Код, который нужно переделать под _asm:

#include < stdio.h >
#include < conio.h >
#include < math.h >
void main()
{
int b,c;
float x,y,s,e;
printf("Введите x, e \n");
scanf("%f%f",&x,&e);
c=1; b=0;
s=x;
y=x;
do {
b=b+2; c=c+2;
y=-y*x*x/(c*b);
s=s+y;
}
while (y>e);
printf("Сумма = %f\n", s);
printf("Сумма с коррекцией = %f", (exp(x) - exp(-x))/2);
getch();
}
Можно скомпилировать и программой ida (дизассемблер) посмотреть, получившийся код. Вот что у меня вышло:
; int __cdecl main(int argc, const char **argv, const char **envp)
public main
main proc near
endbr64
push rbp
mov rbp, rsp
sub rsp, 30h
mov rax, fs:28h
mov [rbp-8], rax
xor eax, eax
lea rdi, unk_2010
call sub_10A0
lea rdx, [rbp-1Ch]
lea rax, [rbp-20h]
mov rsi, rax
lea rdi, aFF ; "%f%f"
mov eax, 0
call sub_10E0
mov dword ptr [rbp-14h], 1
mov dword ptr [rbp-18h], 0
movss xmm0, dword ptr [rbp-20h]
movss dword ptr [rbp-0Ch], xmm0
movss xmm0, dword ptr [rbp-20h]
movss dword ptr [rbp-10h], xmm0

loc_124E:
add dword ptr [rbp-18h], 2
add dword ptr [rbp-14h], 2
movss xmm0, dword ptr [rbp-10h]
movss xmm1, cs:dword_2070
xorps xmm1, xmm0
movss xmm0, dword ptr [rbp-20h]
mulss xmm1, xmm0
movss xmm0, dword ptr [rbp-20h]
mulss xmm0, xmm1
mov eax, [rbp-14h]
imul eax, [rbp-18h]
cvtsi2ss xmm1, eax
divss xmm0, xmm1
movss dword ptr [rbp-10h], xmm0
movss xmm0, dword ptr [rbp-0Ch]
addss xmm0, dword ptr [rbp-10h]
movss dword ptr [rbp-0Ch], xmm0
movss xmm1, dword ptr [rbp-1Ch]
movss xmm0, dword ptr [rbp-10h]
comiss xmm0, xmm1
ja short loc_124E

cvtss2sd xmm0, dword ptr [rbp-0Ch]
lea rdi, unk_202A
mov eax, 1
call sub_10C0
movss xmm0, dword ptr [rbp-20h]
cvtss2sd xmm0, xmm0
call sub_10F0
movsd qword ptr [rbp-28h], xmm0
movss xmm0, dword ptr [rbp-20h]
movss xmm1, cs:dword_2070
xorps xmm0, xmm1
cvtss2sd xmm0, xmm0
call sub_10F0
movsd xmm2, qword ptr [rbp-28h]
subsd xmm2, xmm0
movapd xmm0, xmm2
movsd xmm1, cs:qword_2080
divsd xmm0, xmm1
lea rdi, unk_2040
mov eax, 1
call sub_10C0
call sub_10D0
mov eax, 0
mov rcx, [rbp-8]
xor rcx, fs:28h
jz short locret_1334

call sub_10B0

locret_1334:
leave
retn
main endp
Константин Локота
Константин Локота
54 879
Лучший ответ
Макс *** =) Да компилятор молодец всё на SSE инструкциях. Никакого "сопроцессора" - препод будет в воссторге =))
Это тебе на ассемблере ЭТО написать?
Макс *** Так тут вычисления лёгкие. Даже если не мажорить с SSE инструкциями - на командах сопроцессора довольно просто делается.
Exp можно на сопроцессоре посчитать через логарифмы.