Код на асме аналогичен y1 в си
int a, b;
int y1, y2, y3;
bool answer = 0;
printf("Input a, b: ");
scanf_s("%d %d", &a, &b);
y1 = (b * a) / (b - 1) + 2 * a;
if (a < 2 * b) {
y2 = (a - y1) / 2 + 1;
}
else {
y2 = (y1 * a) / (y1 - 1) + (2 * a);
}
y3 = (y1 + 2 * a * a) / (2 * y2) - 1;
printf("Y1 = %d\nY2 = %d\nY3 = %d", y1, y2, y3);
_asm {
mov ebx, a
mov ecx, b
mov eax, ebx // = a
mul ecx // a * b
mov edx, ecx // = b
dec edx // b--
div edx // (a * b) / (b - 1)
mov edx, eax // = eax
mov eax, ebx // = a
add eax, eax // a * 2
add eax, edx
mov y1, eax
}
printf("Y1 = %d\nY2 = %d\nY3 = &d", y1, y2, y3);
и как ругает?
Unhandled exception at 0x00071ABA in Lab1.exe: 0xC0000095: Integer overflow.
а как узнал что ругает деление?
компилятор показал
Обсуждают сегодня