Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- using namespace std;
- //вариант 20:
- // a > b : (b + 1)/ a + 1 |
- // a = b : -b | = X
- // a < b : (a - 5)/ b |
- void calc(int a, int b) {
- int zero_flag = 0;
- int of_flag = 0;
- int result;
- _asm {
- mov ecx, a; ecx = a
- mov ebx, b; ebx = b
- cmp ecx, ebx; сравнение ecx _ ebx
- jg biggest_a; переход если a > b
- jl biggest_b; переход если a < b
- mov eax, 0
- sub eax, ebx; eax = -b
- mov result, eax
- jmp end_of_code
- biggest_a : ; если a большее
- cmp ecx, 0; сравнение a _ 0
- jz zero_f; проверка деления на 0
- mov eax, ebx
- add eax, 1; eax = b + 1
- jo of_f; ошибка переполнения
- cdq
- idiv ecx; eax = (b + 1) / a
- add eax, 1; eax = (b + 1) / a + 1
- jo of_f; ошибка переполнения
- mov result, eax
- jmp end_of_code
- biggest_b : ; если b большее
- cmp ebx, 0; сравнение b _ 0
- jz zero_f; проверка деления на 0
- mov eax, ecx; eax = a
- sub eax, 5; eax = a - 5
- jo of_f; ошибка переполнения
- cdq
- idiv ebx; eax = (a - 5) / b
- mov result, eax
- jmp end_of_code
- zero_f : ; флаг ошибки деления на ноль
- mov eax, zero_flag
- inc eax
- mov zero_flag, eax
- jmp end_of_code
- of_f : ; флаг ошибки переполнения
- mov of_flag, 1
- jmp end_of_code
- end_of_code : ;
- }
- if (zero_flag == 1) {
- cout << "Division by zero" << endl;
- return;
- }
- if (of_flag == 1) {
- cout << "Out of bound" << endl;
- return;
- }
- if (zero_flag == 0 && of_flag == 0)
- cout << "X = " << result << endl;
- }
- int main() {
- cout << "a: ";
- int a;
- cin >> a;
- cout << endl << "b: ";
- int b;
- cin >> b;
- cout << endl;
- calc(a, b);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement