-
Notifications
You must be signed in to change notification settings - Fork 0
/
jogo.asm
199 lines (188 loc) · 3.14 KB
/
jogo.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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
.MODEL SMALL
.STACK 100H
.DATA
linha DB ?
coluna DB ?
xis DB "X$"
dir DB ?
esq DB ?
bai DB ?
cim DB ?
sair DB ?
.CODE
;Inicio procedimento limpa tela
limpa_tela proc near
push cx
mov ah, 6
mov al, 0
mov bh, 0EH
mov cx, 0
mov dh, 24
mov dl, 79
int 10h
pop cx
ret
limpa_tela endp
;Fim procedimento limpa tela
;Inicio procedimento limpa buffer
limpa_buffer proc near
MOV AH,0CH
MOV AL,0
INT 21H
RET
limpa_buffer endp
;Fim procedimento limpa buffer
;Inicio procedimento de movimentação do cursor
mov_cursor proc near
mov ah, 2
mov dh, [linha]
mov dl, [coluna]
mov bh, 0
int 10h
ret
mov_cursor endp
;Fim procedimento de movimentação do cursor
;Inicio procedimento scroll up
scroll_up proc near
mov ah, 6
mov al, 0
mov bh, 0
mov ch, 0
mov cl, 0
mov dh, 79
mov dl, 79
int 10h
ret
scroll_up endp
;Fim procedimento scroll up
;Inicio procedimento de tempo
tempo proc near
push cx
mov cx, 50000
volta2: push cx
mov cx, 5000
volta3:
loop volta3
pop cx
loop volta2
pop cx
ret
tempo endp
;Fim procedimento de tempo
;Inicio procedimento mostra na tela o X
joga_x proc near
mov dx, offset xis
mov ah, 09h
int 21h
ret
joga_x endp
;Fim procedimento mostra na tela o X
roda_tudo proc near
mov ah, 27 ; Colocando o codigo ascii nas variaveis
mov [sair], ah
mov ah, 4BH
mov [esq], ah
mov ah, 4DH
mov [dir], ah
mov ah, 48H
mov [cim], ah
mov ah, 50H
mov [bai], ah ; Fim
mov ah, 12 ; Posição inicial do cursor na tela
mov [linha], ah
mov ah, 39
mov [coluna], ah ; Fim
volta: call limpa_buffer
call mov_cursor
call joga_x
inc [linha]
call tempo
call limpa_tela
mov bh, 25
cmp [linha], bh ; Compara final da tela com a posição atual do cursor
je sobe
mov ah, 1 ; Função que pega codigo do botao do teclado quando pressionado
int 16h
jnz compara ; Se tem algum botao pressionado, joga para o compara
jmp volta
compara:
cmp ah, [cim]
je sobe
cmp ah, [bai]
je desce
cmp ah, [esq]
je left2
cmp ah, [dir]
je right2
cmp al, [sair]
je sai2
jmp volta
desce: call limpa_buffer
inc [linha]
call mov_cursor
call joga_x
call tempo
call limpa_tela
mov bh, 24
cmp [linha], bh
je sobe
mov ah, 1
int 16h
jnz compara
jmp desce
sobe: call limpa_buffer
dec [linha]
call mov_cursor
call joga_x
call tempo
call limpa_tela
mov bh, 0
cmp [linha], bh
je desce
mov ah, 1
int 16h
jnz compara
jmp sobe
sai2: jmp sai
right2: jmp right
left2: jmp left
compara2: jmp compara
left: call limpa_buffer
mov ax, 0
dec [coluna]
call mov_cursor
call joga_x
call tempo
call limpa_tela
mov bh, 0
cmp [coluna], bh
je right
mov ah, 1
int 16h
jnz compara2
jmp left
right: call limpa_buffer
mov ax, 0
inc [coluna]
call mov_cursor
call joga_x
call tempo
call limpa_tela
mov bh, 79
cmp [coluna], bh
je left
mov ah, 1
int 16h
jnz compara2
jmp right
ret
roda_tudo endp
inicio:
mov ax, @data
mov ds, ax
call limpa_tela
call roda_tudo
sai:
mov ah, 4ch
int 21h
END inicio