-
Notifications
You must be signed in to change notification settings - Fork 0
/
VT_4_luzinsan.cpp
102 lines (84 loc) · 3.21 KB
/
VT_4_luzinsan.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <iostream>
/*
1) Необходимо подсчитать количество чисел на промежутке от -128 до 127,
соответствующих условию (Х * У – (X div 2)) = 0
2) Найти и вывести на экран двухсотую
пару чисел X и У соответствующих заданному условию.
Если таких чисел меньше двухсот,
то вывести об этом сообщение на экран.
*/
/*На промежутке от -128 до 127.
Подсчитать количество таких пар чисел X и У, что (Х * У – (X div 2)) = 0. Ответ вывести на экран.*/
int main()
{
_int16 count = 0;
signed _int8 X, Y;
signed _int8 X_r, Y_r;
bool flag = false;
const char* msg = "\n\tThe number of pairs is less than 200";
_asm
{
mov X, -128 // X = [-128; 127]
M1:
mov Y, -128 // Y = [-128; 127]
M2:
mov al, X // для (->_X_ div 2 )
cbw
mov dl, 2; // для ( X div ->_2_)
idiv dl // (even part)AL = AX / DL---> AL (X div 2)
cbw
// сохраняем (X div 2)
push ax // --------------------------> AX (X div 2)
mov al, X // X(byte)
cbw
imul Y // AL * Y(byte) => AX
pop dx // pop (X div 2)
//sub ax, dx
sub al, dl // (Х * У) – (X div 2)
sbb ah, dh
cmp ax, 0
jne M3
inc count
cmp count, 200
jne M3
cmp flag, 1
je M3
mov flag, 1
mov al, X
mov X_r, al
mov al, Y
mov Y_r, al
M3:
inc Y
cmp Y, -128
jne M2
inc X
cmp X, -128
jne M1
}
std::cout << "\n\tNumber of pairs: " << static_cast<int>(count);
if (flag)
std::cout << "\n\t200-th pair\n\t ( x = " << static_cast<int>(X_r) << "; y = " << static_cast<int>(Y_r) << ' )' << std::endl;
else
std::cout << msg;
bool tflag = false;
int counter = 0, RX, RY;
for (int iii = -128; iii < 128; ++iii)
for (int jjj = -128; jjj < 128; ++jjj)
if ((iii * jjj - (iii / 2)) == 0)
{
counter++;
std::cout << "\n\tThe "<< counter <<"-th pair\t(x = " << iii << "; y = " << jjj << ')' << std::endl;
if (counter == 200 && tflag == false)
{
tflag = true;
RX = iii; RY = jjj;
}
}
std::cout << "\n\tNumber of pairs: " << counter;
if (tflag)
std::cout << "\n\t200-th pair\n\t ( x = " << RX << "; y = " << RY << ')' << std::endl;
else
std::cout << msg;
return 0;
}