Advertisement
Leeen

sys_pro_4

Apr 23rd, 2020
678
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.05 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3.  
  4. using namespace std;
  5. //вариант 20: (b/2 - 53/c)/(b - a*c + 1)
  6.  
  7.  
  8. void cppcalc(double a, double b, double c) {
  9.     cout << endl << "System computing: ";
  10.     int zero_flag = 0;
  11.     int of_flag = 0;
  12.     if (c == 0 || (b - a * c + 1) == 0) {
  13.         cout << "Division by zero" << endl;
  14.         return;
  15.     }
  16.  
  17.     cout << (b / 2 - 53 / c) / (b - a * c + 1) << endl;
  18.     return;
  19. }
  20. void calc(double a, double b, double c) {
  21.     cout << "Asm computing: ";
  22.     int zero_flag = 0;
  23.     int of_flag = 0;
  24.     double result = 0.0;
  25.     double t2 = 2;
  26.     double t1 = 1;
  27.     double t53 = 53;
  28.     _asm {
  29.         finit
  30.         fld b // b (0)
  31.         fld t2 // t2(0), b(1)
  32.        
  33.         fdiv // b/2 (0)
  34.  
  35.         fld t53 // t53 (0), b/2 (1)
  36.         fld c // c (0), t53 (1), b/2 (2)
  37.        
  38.         ftst
  39.         fstsw ax
  40.         sahf
  41.         je zero_f
  42.         fdiv  // 53/c(0), b/2 (1)
  43.         fsub  //  b/2 - 53/c (0)
  44.        
  45.         fld b // b (0), b/2 - 53/c (1)
  46.         fld a
  47.         fmul c // a*c (0), b (1), b/2 - 53/c (2)
  48.         fsub // b - a*c (0),  b/2 - 53/c (1)
  49.         fadd t1 //  b - a*c + 1 (0), b/2 - 53/c (1)
  50.        
  51.         ftst
  52.         fstsw ax
  53.         sahf
  54.         je zero_f
  55.         fdiv // (b/2 - 53/c)/(b - a*c + 1) (0)
  56.  
  57.         fstp result // result = (b/2 - 53/c)/(b - a*c + 1)
  58.         fxam //&&&
  59.         jmp end_of_code
  60.  
  61.         zero_f : ; флаг ошибки деления на ноль
  62.         mov eax, zero_flag
  63.         inc eax
  64.         mov zero_flag, eax
  65.         jmp end_of_code
  66.  
  67.         end_of_code : ;
  68.     }
  69.  
  70.     if (zero_flag == 1) {
  71.         cout << "Division by zero" << endl;
  72.         return;
  73.     }
  74.  
  75.     if (zero_flag == 0)
  76.         cout << "(b/2 - 53/c)/(b - a*c + 1) = " << result << endl;
  77. }
  78.  
  79. int main() {
  80.     cout << "a:";
  81.     double a;
  82.     cin >> a;
  83.     cout << endl << "b:";
  84.     double b;
  85.     cin >> b;
  86.     cout << endl << "c:";
  87.     double c;
  88.     cin >> c;
  89.     cout << endl;
  90.  
  91.     calc(a, b, c);
  92.     cppcalc(a, b, c);
  93.  
  94.     return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement