Код на асме аналогичен 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.
а как узнал что ругает деление?
компилятор показал
Обсуждают сегодня