Я пыталась разобраться сама, но времени очень мало. Нужно написать С++ программу, которая вызывает 3 функции, написанные на GCC ассемблере:
а) рассчитывает члены ряда a_i = (1+i)/(1+i^3) от i=0 до i=N-1 и записывает их в массив A из N элементов;
б) рассчитывает частичную сумму S этого ряда до N-1 (максимально приближённую к сумме на ℝ) по A;
в) рассчитывает ∏(a_i-S/N)^2 для элементов массива A.
Вот мой код:
#include <iostream>
extern "C" void number1();
__asm(
"number1():"
"push %rbp"
"mov %rbp, %rsp"
"sub %rsp, 232"
"mov DWORD PTR [%rbp-4], 0"
"mov DWORD PTR [%rbp-4], 0"
"jmp .L2"
".L3:"
"mov %ecx, DWORD PTR [%rbp-4]"
"mov %edx, DWORD PTR [%rbp-4]"
"inc %edx"
"mov %eax, DWORD PTR [%rbp-4]"
"imul %eax, DWORD PTR [%rbp-4]"
"imul %eax, DWORD PTR [%rbp-4]"
"inc %eax"
"mov DWORD PTR [%rbp-340], %eax"
"mov %eax, %edx"
"cdq"
"idiv DWORD PTR [%rbp-340]"
"mov DWORD PTR [%rbp-340], %eax"
"mov %eax, DWORD PTR [%rbp-340]"
"cvtsi2sd %xmm0, %eax"
"movsx %rax, %ecx"
"movsd QWORD PTR [%rbp-336+%rax*8], %xmm0"
"inc DWORD PTR [%rbp-4]"
".L2:"
"cmp DWORD PTR [%rbp-4], 38"
"jle .L3"
"leave"
"ret"
);
int main()
{
number1();
}