Leeen

sys_pro

Mar 21st, 2020
315
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.32 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. int zero_flag = 0;
  7. int of_flag = 0;
  8. void calc(int a, int b, int c) {
  9.    
  10.     int result;
  11.     int t = 2;
  12.     int ft = 53;
  13.     _asm {
  14.  
  15.         mov eax, a; eax = a
  16.         mov ebx, b; ebx = b
  17.         mov ecx, c; ecx = c
  18.         imul eax, ecx; a* c
  19.         jo of_f; ошибка переполнения
  20.         sub ebx, eax; b - a * c
  21.         add ebx, 1; b - a * c + 1
  22.         jo of_f; ошибка переполнения
  23.         mov result, ebx
  24.        
  25.  
  26.         mov eax, b; eax = b
  27.         mov ebx, 2; ebx = 2
  28.         cdq
  29.         idiv ebx;  b / 2
  30.         mov ebx, eax
  31.         mov eax, c
  32.         cmp eax, 0
  33.         jz zero_f; проверяем деление на ноль
  34.         mov eax, 53
  35.         mov ecx, c
  36.         cdq
  37.         idiv ecx; 53 / c
  38.        
  39.         sub ebx, eax
  40.         mov eax, ebx;  eax = (b / 2 - 53 / c)
  41.         cdq
  42.         mov ebx, result
  43.         idiv ebx; (b / 2 - 53 / c) / (b - a * c + 1)
  44.         jz zero_f; проверяем деление на ноль
  45.         mov result, eax; запись результата
  46.  
  47.         jmp end_of_code
  48.  
  49.         zero_f : ; флаг ошибки деления на ноль
  50.         mov eax, zero_flag
  51.         inc eax
  52.         mov zero_flag, eax
  53.         jmp end_of_code
  54.        
  55.         of_f : ; флаг ошибки переполнения
  56.         mov of_flag, 1
  57.         jmp end_of_code
  58.  
  59.         end_of_code : ;
  60.     }
  61.  
  62.     if (zero_flag == 1) {
  63.         cout << "Division by zero" << endl;
  64.         return;
  65.     }
  66.     if (of_flag == 1) {
  67.         cout << "Out of bound" << endl;
  68.         return;
  69.     }
  70.     if (zero_flag == 0 && of_flag == 0)
  71.         cout << "(b/2 - 53/c)/(b - a*c + 1) = " << result << endl;
  72. }
  73.  
  74. int main() {
  75.     cout << "a: ";
  76.     int a;
  77.     cin >> a;
  78.     cout << endl << "b:";
  79.     int b;
  80.     cin >> b;
  81.     cout << endl << "c:";
  82.     int c;
  83.     cin >> c;
  84.     cout << endl;
  85.  
  86.     calc(a, b, c);
  87.     cout << endl << "System computing: ";
  88.     if (zero_flag == 1)
  89.         cout << "Division by zero" << endl;
  90.      
  91.     if (of_flag == 1)
  92.         cout << "Out of bound" << endl;
  93.        
  94.     if (zero_flag == 0 && of_flag == 0)
  95.         cout << (b / 2 - 53 / c) / (b - a * c + 1);
  96.  
  97.     return 0;
  98. }
Add Comment
Please, Sign In to add comment