Не работает код в Вижуал студии - 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: }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д