Advertisement
YauhenMardan

UP_asm_1.2

May 20th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.60 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. int inf = 0; //true, если бесконечно много решений
  8. int no = 0; //true, если решений нет
  9. int a, b; //коэффициенты
  10. int k = -1; //для умножения на -1
  11. int result, reminder; //частное и остаток
  12. cout << "Type a" << endl;
  13. cin >> a;
  14. cout << "Type b" << endl;
  15. cin >> b;
  16. cout << "Your expression: " << a << "x+" << b << "=0" << endl << "Solving..." << endl;
  17. __asm
  18. {
  19. mov ebx, a
  20. mov eax, b
  21. //if "a=0 || a!=0"
  22. cmp ebx, 0
  23. je aEQL0
  24. //"a!=0"
  25. //if "b=0 || b!=0"
  26. cmp eax, 0
  27. je bEQL0
  28. //"b!=0"
  29. cwd //расширяем слово до двойного слова
  30. imul k //меняем знак b
  31. idiv a //делим на a
  32. //if "reminder==0 || reminder!=0"
  33. cmp edx, 0
  34. je remEQL0
  35. //"reminder!=0"
  36. mov eax, 1 //нет решений
  37. mov no, eax //
  38. jmp end_
  39. remEQL0 :
  40. //"reminder==0"
  41. mov result, eax //заносим результат деления
  42. jmp end_
  43. bEQL0 :
  44. //"b==0"
  45. mov result, 0
  46. jmp end_
  47. //"a==0"
  48. aEQL0 :
  49. //if "b=0 || b!=0"
  50. cmp eax, 0
  51. je bEQL0_
  52. //"b!=0"
  53. mov eax, 1 //нет решений
  54. mov no, eax //
  55. jmp end_
  56. bEQL0_ :
  57. //"b==0"
  58. mov eax, 1 //бесконечно много решений
  59. mov inf, eax //
  60. jmp end_
  61. end_ :
  62.  
  63. }
  64. if (inf)
  65. cout << "Answer: Z" << endl;
  66. else if (no)
  67. cout << "Answer: no solutions" << endl;
  68. else
  69. cout << "Answer: " << result << endl;
  70. system("pause");
  71. return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement