Задать вопрос
@trynottofil

Как вызвать из C++ программы функции на ассемблере?

Я пыталась разобраться сама, но времени очень мало. Нужно написать С++ программу, которая вызывает 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();
}
  • Вопрос задан
  • 158 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Как вызвать из C++ программы функции на ассемблере?

extern "C" void number1();
…
int main()
{
number1();
}

Именно так.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы