Advertisement
Leeen

sys_pro_2

Mar 26th, 2020
481
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.19 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3.  
  4. using namespace std;
  5. //вариант 20:
  6. // a > b : (b + 1)/ a + 1   |
  7. // a = b : -b               | = X
  8. // a < b : (a - 5)/ b       |
  9.  
  10. void calc(int a, int b) {
  11.     int zero_flag = 0;
  12.     int of_flag = 0;
  13.     int result;
  14.    
  15.     _asm {
  16.  
  17.         mov ecx, a; ecx = a
  18.         mov ebx, b; ebx = b
  19.         cmp ecx, ebx; сравнение ecx _ ebx
  20.         jg biggest_a; переход если a > b
  21.         jl biggest_b; переход если a < b
  22.         mov eax, 0
  23.         sub eax, ebx; eax = -b
  24.         mov result, eax
  25.         jmp end_of_code
  26.  
  27.         biggest_a : ; если a большее
  28.         cmp ecx, 0; сравнение a _ 0
  29.         jz zero_f; проверка деления на 0
  30.         mov eax, ebx
  31.         add eax, 1; eax = b + 1
  32.         jo of_f; ошибка переполнения
  33.         cdq
  34.         idiv ecx; eax = (b + 1) / a
  35.         add eax, 1; eax = (b + 1) / a + 1
  36.         jo of_f; ошибка переполнения
  37.         mov result, eax
  38.         jmp end_of_code
  39.  
  40.  
  41.         biggest_b : ; если b большее
  42.         cmp ebx, 0; сравнение b _ 0
  43.         jz zero_f; проверка деления на 0
  44.         mov eax, ecx; eax = a
  45.         sub eax, 5; eax = a - 5
  46.         jo of_f; ошибка переполнения
  47.         cdq
  48.         idiv ebx; eax = (a - 5) / b
  49.         mov result, eax
  50.         jmp end_of_code
  51.  
  52.      
  53.         zero_f : ; флаг ошибки деления на ноль
  54.         mov eax, zero_flag
  55.         inc eax
  56.         mov zero_flag, eax
  57.         jmp end_of_code
  58.        
  59.         of_f : ; флаг ошибки переполнения
  60.         mov of_flag, 1
  61.         jmp end_of_code
  62.  
  63.         end_of_code : ;
  64.     }
  65.  
  66.     if (zero_flag == 1) {
  67.         cout << "Division by zero" << endl;
  68.         return;
  69.     }
  70.     if (of_flag == 1) {
  71.         cout << "Out of bound" << endl;
  72.         return;
  73.     }
  74.     if (zero_flag == 0 && of_flag == 0)
  75.         cout << "X = " << result << endl;
  76. }
  77.  
  78. int main() {
  79.     cout << "a: ";
  80.     int a;
  81.     cin >> a;
  82.     cout << endl << "b: ";
  83.     int b;
  84.     cin >> b;
  85.     cout << endl;
  86.  
  87.     calc(a, b);
  88.  
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement