Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "pch.h"
- #include <iostream>
- using namespace std;
- //вариант 20: (b/2 - 53/c)/(b - a*c + 1)
- int zero_flag = 0;
- int of_flag = 0;
- void calc(int a, int b, int c) {
- int result;
- int t = 2;
- int ft = 53;
- _asm {
- mov eax, a; eax = a
- mov ebx, b; ebx = b
- mov ecx, c; ecx = c
- imul eax, ecx; a* c
- jo of_f; ошибка переполнения
- sub ebx, eax; b - a * c
- add ebx, 1; b - a * c + 1
- jo of_f; ошибка переполнения
- mov result, ebx
- mov eax, b; eax = b
- mov ebx, 2; ebx = 2
- cdq
- idiv ebx; b / 2
- mov ebx, eax
- mov eax, c
- cmp eax, 0
- jz zero_f; проверяем деление на ноль
- mov eax, 53
- mov ecx, c
- cdq
- idiv ecx; 53 / c
- sub ebx, eax
- mov eax, ebx; eax = (b / 2 - 53 / c)
- cdq
- mov ebx, result
- idiv ebx; (b / 2 - 53 / c) / (b - a * c + 1)
- jz zero_f; проверяем деление на ноль
- 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 << "(b/2 - 53/c)/(b - a*c + 1) = " << result << endl;
- }
- int main() {
- cout << "a: ";
- int a;
- cin >> a;
- cout << endl << "b:";
- int b;
- cin >> b;
- cout << endl << "c:";
- int c;
- cin >> c;
- cout << endl;
- calc(a, b, c);
- cout << endl << "System computing: ";
- if (zero_flag == 1)
- cout << "Division by zero" << endl;
- if (of_flag == 1)
- cout << "Out of bound" << endl;
- if (zero_flag == 0 && of_flag == 0)
- cout << (b / 2 - 53 / c) / (b - a * c + 1);
- return 0;
- }
Add Comment
Please, Sign In to add comment