-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path2.asm
145 lines (128 loc) · 3.66 KB
/
2.asm
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
org 100h
Start:
mov ah,0Fh
int 10h
mov [BOldMode],al
mov [BOldPage],ah
; set video mode = mov ax,0003h
mov ax,0013h
int 10h
push $A000
pop es
xor di,di ; заполнение экрана белым
mov al,$0F
mov cx,320*200
rep stosb
xor di,di ; pччерный левый прямоугольнник
mov al,00h
mov cx,200
.C1:
push cx
mov cx,60
rep stosb
add di,320 - 60
pop cx
loop .C1
mov di,320 - 60 ; черный правый прямоугольник
mov al,00h
mov cx,200
.C2:
push cx
mov cx,60
rep stosb
add di,320 - 60
pop cx
loop .C2
mov di, 200 - 15 + 60 ; верхняя правая часть
mov al,20h ; 200: размер квадрата
mov cx,15 ; 15: половина размера синей линии
mov bx,15 ; 60: (320 - 200) / 2
; cx - количество строк, bx - длинна первой строки
C1:
push cx
mov cx,bx
inc bx
rep stosb
sub di,bx ; 320 - bx = di: длинна поля - длинна линии
add di,320
pop cx
loop C1
; покраска основной части в синий цвет
mov cx,170 ; cx = 170 = 200 - 15 - 15: 15 - количество строк сверху и снизу
C2:
push cx
mov cx,30 ; 30 - длинна строки
rep stosb
add di,320 ; di = 320 - lдлинна строки - 1
sub di,30
dec di
pop cx
loop C2
; левая нижняя часть флага
mov cx,15 ; cx - количество строк
mov bx,30 ; bx - длинна строк
C3:
push cx
mov cx,bx
dec bx
rep stosb
add di,320 ; di = 320 - длинна линии - 1
sub di,bx
dec di
pop cx
loop C3
;---------------------------------------------------------------;
mov di, -11 ; верхняя правая часть
mov al,20h ; 200: размер квадрата
mov cx,15 ; 15: половина размера синей линии
mov bx,15 ; 60: (320 - 200) / 2
; cx - количество строк, bx - длинна первой строки
C4:
push cx
mov cx,bx
inc bx
rep stosb
sub di,bx ; 320 - bx = di: длинна поля - длинна линии
sub di,320
pop cx
loop C4
; покраска основной части в синий цвет
mov cx,170 ; cx = 170 = 200 - 15 - 15: 15 - количество строк сверху и снизу
C5:
push cx
mov cx,30 ; 30 - длинна строки
rep stosb
sub di,320 ; di = 320 - lдлинна строки - 1
sub di,30
dec di
pop cx
loop C5
; левая нижняя часть флага
mov cx,15 ; cx - количество строк
mov bx,30 ; bx - длинна строк
C6:
push cx
mov cx,bx
dec bx
rep stosb
sub di,320 ; di = 320 - длинна линии - 1
sub di,bx
dec di
pop cx
loop C6
;---------------------------------------------------------------------;
mov ax,0c08h
int 21h
test al,al
jnz @F
mov ah,08h
int 21h
@@:
movzx ax,[BOldMode]
int 10h
mov ah,05h
mov al,[BOldPage]
int 10h
ret
BOldMode db ?
BOldPage db ?