Advertisement
Guest User

Untitled

a guest
Aug 29th, 2015
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.68 KB | None | 0 0
  1. ;*****************************
  2. ; *
  3. ; LIFE - MY FIRST SOFTWARE *
  4. ; *
  5. ;*****************************
  6. ; Grupo: *
  7. ;*****************************
  8. ; Davi Paulino *
  9. ; Felipe Tuyama *
  10. ; João Vitor *
  11. ;*****************************
  12.  
  13. ASSUME CS: CODIGO, DS:DADOS, SS:PILHA
  14.  
  15. ;***************************
  16. DADOS SEGMENT
  17.  
  18. MENSAGEM DB "!WELCOME TO LIFE!$"
  19. LINHA DB 5
  20. COLUNA DB 12
  21. LINHA2 DB 5
  22. COLUNA2 DB 12
  23. FLAG DB 0
  24. MAT1 DB 289 DUP(0) ;declara uma matriz 17x17
  25. MAT2 DB 289 DUP(0)
  26. PONT DW 18
  27. NVIZ DB 0
  28.  
  29. DADOS ENDS
  30. ;***************************
  31. PILHA SEGMENT
  32. DW 100 DUP(?)
  33. TOPO_PILHA LABEL WORD
  34. PILHA ENDS
  35. ;***************************
  36.  
  37. CODIGO SEGMENT
  38.  
  39. ; Inicialização de DS, SS, SP
  40. ; configuração de vídeo
  41. ; escrita do título na tela
  42. ; desenho da moldura do editor
  43. INICIO:
  44. MOV AX, DADOS
  45. MOV DS, AX
  46. MOV AX, PILHA
  47. MOV SS, AX
  48. MOV SP, OFFSET TOPO_PILHA
  49.  
  50. CALL VIDEO_40
  51. CALL ESC_TITULO
  52. CALL MOLDURA
  53.  
  54. ; Loop que permite editar/evoluir o sistema,
  55. ; mostrando cada geração na tela.
  56. NOVO:
  57. CALL EDITOR
  58. CMP FLAG,1
  59. JE FIM
  60. CALL AUTOMATO
  61. CALL MOSTRAR
  62. JMP NOVO
  63.  
  64. ; Retorna configuração de vídeo original
  65. ; e sai do programa.
  66. FIM:
  67. CALL VIDEO_80
  68. MOV AH, 4CH
  69. INT 21H
  70.  
  71. ;************************
  72. ; TITULO *
  73. ;************************
  74. ; Escreve o título do jogo na tela (!welcome to life!)
  75. ESC_TITULO:
  76. MOV LINHA, 2
  77. MOV COLUNA, 11
  78.  
  79. CALL POS_CURSOR
  80. CALL ESC_MENS
  81.  
  82. MOV LINHA, 5
  83. MOV COLUNA, 12
  84. RET
  85.  
  86. ;************************
  87. ; EDITOR *
  88. ;************************
  89. ; Edita a configuração atual do jogo Life,
  90. ; - Teclas direcionais movimentam cursor na tela
  91. ; - Tecla C imprime cara feliz na tela
  92. ; - Tecla Esp apaga cara feliz na tela
  93. ; - Tecla E evolui o sistema, na subrotina AUTOMATO
  94. ; - Tecla Esc sai do programa Life
  95. EDITOR:
  96. CALL POS_CURSOR
  97. CALL LER_TECLA
  98. JMP VER_CIM
  99.  
  100. VER_CIM:
  101. CMP AH,72 ; Checa se a tecla foi pressionada
  102. JNE VER_BAI
  103. CMP LINHA,5 ; Checa colisão com moldura
  104. JE EDITOR
  105. DEC LINHA
  106. SUB PONT, 17
  107. JMP EDITOR
  108.  
  109. VER_BAI:
  110. CMP AH,80 ; Checa se a tecla foi pressionada
  111. JNE VER_ESQ
  112. CMP LINHA,19 ; Checa colisão com moldura
  113. JE EDITOR
  114. INC LINHA
  115. ADD PONT, 17
  116. JMP EDITOR
  117.  
  118. VER_ESQ:
  119. CMP AH,75 ; Checa se a tecla foi pressionada
  120. JNE VER_DIR
  121. CMP COLUNA,12 ; Checa colisão com moldura
  122. JE EDITOR
  123. DEC COLUNA
  124. DEC PONT
  125. JMP EDITOR
  126.  
  127. VER_DIR:
  128. CMP AH,77 ; Checa se a tecla foi pressionada
  129. JNE VER_c
  130. CMP COLUNA,26 ; Checa colisão com moldura
  131. JE EDITOR
  132. INC COLUNA
  133. INC PONT
  134. JMP EDITOR
  135.  
  136. VER_C:
  137. CMP AL,99 ; Checa se a tecla foi pressionada
  138. JNE VER_EVO
  139. MOV SI,PONT
  140. MOV MAT1[SI], 1
  141. MOV AL,1
  142. CALL ESC_CARAC
  143. JMP EDITOR
  144.  
  145. VER_EVO:
  146. CMP AL,101 ; Checa se a tecla foi pressionada
  147. JNE VER_ESP
  148. JMP SAIR_ED
  149.  
  150. VER_ESP:
  151. CMP AL,32 ; Checa se a tecla foi pressionada
  152. JNE VER_ESc
  153. MOV SI,PONT
  154. MOV MAT1[SI], 0
  155. MOV AL,0
  156. CALL ESC_CARAC
  157. JMP EDITOR
  158.  
  159. VER_ESC:
  160. CMP AH,1 ; Checa se a tecla foi pressionada
  161. JE SAIR_ED1
  162. JMP EDITOR
  163.  
  164. ; Sai do programa
  165. SAIR_ED1: MOV FLAG,1
  166.  
  167. ; Sai do editor e evolui sistema
  168. SAIR_ED: RET
  169.  
  170. ;************************
  171. ; TESTE *
  172. ;************************
  173. ; Funções para testar o correto
  174. ; preenchimento da matriz na memória
  175. AUTO_TESTE:
  176. MOV SI, 1
  177. AUTO:
  178. MOV AL, MAT1[SI]
  179. MOV MAT2[SI-1], AL
  180. INC SI
  181. CMP SI, 289
  182. JNE AUTO
  183. RET
  184.  
  185. ;************************
  186. ; MOSTRAR *
  187. ;************************
  188. ; Sobrescreve a matriz de próxima geração
  189. ; sobre a de geração atual, exibindo o
  190. ; resultado na tela.
  191. MOSTRAR:
  192. CALL COPIAR_MAT
  193. MOV SI, 18
  194. MOV LINHA2, 5
  195.  
  196. MOST2:
  197. MOV COLUNA2, 12
  198.  
  199. MOST1:
  200. CALL POS_CURSOR2
  201. MOV AL, MAT1[SI]
  202. CALL ESC_CARAC
  203. INC SI
  204. INC COLUNA2
  205. CMP COLUNA2, 27
  206. JNE MOST1
  207. ADD SI, 2
  208. INC LINHA2
  209. CMP LINHA2, 20
  210. JNE MOST2
  211. RET
  212.  
  213. ;************************
  214. ; AUTOMATO *
  215. ;************************
  216. ; Processa a próxima geração do jogo
  217. ; life com base na configuração
  218. ; informada pelo editor
  219. AUTOMATO:
  220. MOV SI, 18
  221. MOV LINHA2, 5
  222. AUTO2:
  223. MOV COLUNA2, 12
  224. AUTO1:
  225. CALL NUMVIZ
  226. CALL VER_POS
  227. INC SI
  228. INC COLUNA2
  229. CMP COLUNA2, 27
  230. JNE AUTO1
  231. ADD SI, 2
  232. INC LINHA2
  233. CMP LINHA2, 20
  234. JNE AUTO2
  235. RET
  236.  
  237. ; Calcula o número de vizinhos de
  238. ; uma dada posição da matriz
  239. NUMVIZ:
  240. MOV AL, 0
  241. ADD AL, MAT1[SI-18] ;vizinho cima esquerda
  242. ADD AL, MAT1[SI-17] ;vizinho de cima
  243. ADD AL, MAT1[SI-16] ;vizinho cima direita
  244. ADD AL, MAT1[SI-1] ;vizinho a esquerda
  245. ADD AL, MAT1[SI+1] ;vizinho a direita
  246. ADD AL, MAT1[SI+16] ;vizinho baixo esquerda
  247. ADD AL, MAT1[SI+17] ;vizinho de baixo
  248. ADD AL, MAT1[SI+18] ;vizinho baixo direita
  249. MOV NVIZ, AL
  250. RET
  251.  
  252. ; Toma a decisão de vida/morte
  253. ; com base no número de vizinhos
  254. VER_POS:
  255. CMP NVIZ, 2
  256. JE IGUAL
  257. CMP NVIZ, 3
  258. JE NASCE
  259. MORTE:
  260. MOV MAT2[SI], 0
  261. RET
  262. NASCE:
  263. MOV MAT2[SI], 1
  264. RET
  265. IGUAL:
  266. MOV AL, MAT1[SI]
  267. MOV MAT2[SI], AL
  268. RET
  269.  
  270. ;************************
  271. ; SUBROTINAS *
  272. ;************************
  273.  
  274. ; Imprime na tela caractere ascii 0 (cara feliz)
  275. ESC_CARAC:
  276. MOV AH, 10
  277. MOV BH, 0
  278. MOV CX, 1
  279. INT 10H
  280. RET
  281.  
  282. ; Imprime na tela caractere de moldura
  283. ESC_MOLD:
  284. CALL POS_CURSOR
  285. MOV AL, 35
  286. MOV AH, 10
  287. MOV BH, 0
  288. MOV CX, 1
  289. INT 10H
  290. RET
  291.  
  292. ; Lê uma tecla dada pelo usuário
  293. LER_TECLA:
  294. MOV AH, 0
  295. INT 16H
  296. RET
  297.  
  298. ; Muda a configuração de vídeo
  299. VIDEO_40:
  300. MOV AH, 0
  301. MOV AL, 1
  302. INT 10H
  303. RET
  304.  
  305. VIDEO_80:
  306. MOV AH, 0
  307. MOV AL, 3
  308. INT 10H
  309. RET
  310.  
  311. ; Posiciona cursor em (Linha, Coluna)
  312. POS_CURSOR:
  313. MOV AH, 2
  314. MOV BH, 0
  315. MOV DH, LINHA
  316. MOV DL, COLUNA
  317. INT 10H
  318. RET
  319.  
  320. ; Posiciona cursor em (Linha2, Coluna2)
  321. POS_CURSOR2:
  322. MOV AH, 2
  323. MOV BH, 0
  324. MOV DH, LINHA2
  325. MOV DL, COLUNA2
  326. INT 10H
  327. RET
  328.  
  329. ; Escreve a mensagem na tela
  330. ESC_MENS:
  331. MOV AH,9
  332. MOV DX, OFFSET MENSAGEM
  333. INT 21H
  334. RET
  335.  
  336. ; Copia MAT2 para MAT1
  337. COPIAR_MAT:
  338. MOV SI, 1
  339. COPIA:
  340. MOV AL, MAT2[SI]
  341. MOV MAT1[SI], AL
  342. INC SI
  343. CMP SI, 289
  344. JNE COPIA
  345. RET
  346.  
  347. ;************************
  348. ; MOLDURA *
  349. ;************************
  350.  
  351. ; Subrotina para criar a moldura da
  352. ; região do editor com o caractere '#'.
  353. MOLDURA:
  354. MOV LINHA, 4
  355. MOV COLUNA, 11
  356.  
  357. ; Loop que cria as molduras verticas
  358. LOOP1:
  359. CMP LINHA, 21
  360. JE LOOP2
  361. MOV COLUNA, 27
  362. CALL ESC_MOLD
  363.  
  364. MOV COLUNA, 11
  365. CALL ESC_MOLD
  366.  
  367. INC LINHA
  368. JMP LOOP1
  369.  
  370. ; Loop que cria as molduras horizontais
  371. LOOP2:
  372. CMP COLUNA, 28
  373. JE FIM_MOLD
  374. MOV LINHA, 4
  375. CALL ESC_MOLD
  376.  
  377. MOV LINHA, 20
  378. CALL ESC_MOLD
  379.  
  380. INC COLUNA
  381. JMP LOOP2
  382.  
  383. ; Fim da moldura. Linha e Coluna voltam ao original.
  384. FIM_MOLD:
  385. MOV LINHA, 5
  386. MOV COLUNA, 12
  387. RET
  388.  
  389. ;***************************
  390. CODIGO ENDS;
  391.  
  392. END INICIO
  393. ;***************************
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement