Не работает код в Вижуал студии - C (СИ)

Узнай цену своей работы

Формулировка задачи:

#include <stdio.h>
#include <locale.h>
#define A 12
#define B 13
long int a, b, left, right, left_a, right_a, a1, b1, err;
int main()
 
{
    setlocale(LC_ALL, "rus");
    for (;;) {
        printf ("\n\tПроверить тождество (a-b)*(a-b)*(a-b)*(a-b)=(a*a*a*a)-(4*(a*a*a)*b)+(6*(a*a)*(b*b))-(4*a*(b*b*b))+(b*b*b*b);
        printf ("\nВведите а: ");
        scanf_s("%li", &a);
        printf("Введите b: ");
        scanf_s("%li", &b);
        //================================ C==================================
        a1 = a / A;
        b1 = b / B;
        left = (a - b)*(a - b)*(a - b)*(a - b);
        right = (a*a*a*a) - (4 * (a*a*a)*b) + (6 * (a*a)*(b*b)) - (4 * a*(b*b*b)) + (b*b*b*b);
        //============================ Assembler =============================
        __asm {
            // Вычислить левую часть тождества
            //Нет ошибок
            mov err, 0
            //(a - b)*(a - b)
            mov         eax, a
            mov         ebx, A
            cdq
            idiv            ebx
            mov         ecx, eax
            imul            ecx
            imul            ecx
            jo          Er
            mov         esi, eax
            //(a - b)*(a - b)
            mov         eax, b
            mov         ebx, B
            cdq
            idiv            ebx
            mov         edi, eax
            imul            edi
            imul            edi
            jo          Er
            jmp         Cont
            //(a - b)*(a - b)
            Er :
            mov         err, 1
                Cont :
                sub         esi, eax
                mov         left_a, esi
                // Вычислить правую часть тождества
                //a1*a1
                mov         eax, a
                mov          ebx, A
                cdq
                idiv            ebx
                mov          ecx, eax
                mul         eax
                mov         esi, eax
                //b1*b1
                mov         eax, b
                mov         ebx, B
                cdq
                idiv             ebx
                mov         edi, eax
                imul            eax
                add         esi, eax
                //a1*b1
                mov          eax, edi
                imul             ecx
                add          eax, esi
                mov         right_a, eax
                //a1-b1
                mov         eax, a
                mov         ebx, A
                cdq
                idiv            ebx
                mov         esi, eax
                mov         eax, b
                mov         ebx, B
                cdq
                idiv            ebx
                sub         esi, eax
 
                mov         eax, esi
                imul            right_a
                jo          Err
                jmp         Cont1
                Err :
            mov err, 1
                Cont1 :
                mov         right_a, eax
        }
        // Вывод результатов
        printf("\nЛевая часть тождества ( C ): %li", left);
        printf("\nПравая часть тождества( С ): %li", right);
        if (!err) {
            printf("\nЛевая часть тождества (Asm): %li", left_a);
            printf("\nПравая часть тождества(Asm): %li\n", right_a);
        }
        else {
            printf("\nЛевая часть тождества (Asm): Переполнение!");
            printf("\nПравая часть тождества(Asm): Переполнение!");
        }
    }
    return 0;
}

Решение задачи: «Не работает код в Вижуал студии»

textual
Листинг программы
        __asm 
        {   // Вычислить левую часть тождества
            mov dword ptr err,1
            mov eax, a
            sub eax,b
            imul eax
            jo _Err 
            imul eax
            jo _Err
            mov left_a, eax
            // Вычислить правую часть тождества
            mov eax,a
            imul eax
            jo _Err
            imul eax 
            jo _Err
            mov ecx,eax //a^4
            idiv dword ptr a
            imul dword ptr b
            jo _Err
            mov ebx,-4
            imul ebx //-4*a^3*b
            jo _Err
            add ecx,eax //a^4-4*a^3*b
            mov eax,a
            imul eax
            jo _Err
            imul dword ptr b
            jo _Err
            imul dword ptr b
            jo _Err
            mov ebx,6
            imul ebx //6*a^2*b^2
            add ecx,eax //a^4-4*a^3*b+6*a^2*b^2
            mov eax,b
            imul eax
            jo _Err
            imul dword ptr b
            jo _Err
            imul dword ptr a
            jo _Err
            mov ebx,-4
            imul ebx //-4*a*b^3
            jo _Err
            add ecx,eax //a^4-4*a^3*b+6*a^2*b^2-4*a*b^3
            mov eax,b
            imul eax
            jo _Err
            imul eax //b^4
            jo _Err
            add eax,ecx
            mov right_a,eax
            mov byte ptr err,0
            _Err:
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5
Похожие ответы