Advertisement
dlarubia

Questão5.asm

Sep 18th, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.92 KB | None | 0 0
  1. ;---------------------------------------------------
  2. ; Programa para o primeiro trabalho de programação no SimuS
  3. ; Alunos: Daniel La Rubia Rolim
  4. ; Leonardo Ventura
  5. ; Maria Eduarda Lucena
  6. ;Grupo B
  7. ;---------------------------------------------------
  8.  
  9. ;Digita a palavra no console e de ENTER!
  10.  
  11. ORG 00300h
  12.  
  13. TAM_SENTENCA: DB 0
  14. CONTADOR: DB 0
  15. PTR: DW 0
  16. PTR_VAR: DW 0
  17. PC: DW 0
  18. ACC: DW 0
  19.  
  20. ;constantes de hardware
  21. CLEARB EQU 3
  22. BANNER EQU 2
  23. ;constantes de trap
  24. CONSOLEW EQU 2
  25.  
  26. ;Sentenca palindromo
  27. PALINDROMO_POSITIVO: STR " - É PALINDROMO. ACC = "
  28. DB 0
  29.  
  30. ;Sentenca nao palindromo
  31. PALINDROMO_NEGATIVO: STR " - NÃO É PALINDROMO. ACC = "
  32. DB 0
  33.  
  34. DB 0
  35. SENTENCA: STR " "
  36.  
  37. ORG 0
  38.  
  39. INICIO:
  40. ;Trap pra digitar a sentenca
  41. LDA #3
  42. TRAP SENTENCA
  43.  
  44.  
  45.  
  46.  
  47.  
  48. LDA #03
  49. PUSH
  50. LDA #SENTENCA
  51. PUSH
  52.  
  53. JSR ROTINA
  54. ;Pula pra impressao
  55. JMP IMPRIME
  56.  
  57. HLT
  58.  
  59. ;Coloca o endereco de retorno na pilha
  60. FIM:
  61. LDA #1
  62. STA ACC
  63. LDA PC+1
  64. PUSH
  65. LDA PC
  66. PUSH
  67. RET
  68.  
  69. ;Salva o endereco da proxima instrucao no PC
  70. ;e pego o endereco da sentenca, guardando em PTR_VAR e PTR
  71. ROTINA:
  72. POP
  73. STA PC
  74. POP
  75. STA PC+1
  76.  
  77. POP
  78. STA PTR
  79. STA PTR_VAR
  80. POP
  81. STA PTR+1
  82. STA PTR_VAR+1
  83.  
  84. LDA @PTR
  85. OR #0
  86. JZ FIM
  87. JMP COUNT
  88. RETURN:
  89. LDA PTR_VAR
  90. STA PTR
  91.  
  92. LDA PTR_VAR
  93. ADD TAM_SENTENCA
  94. SUB #1
  95. STA PTR_VAR
  96. ;Pula pra verificacar espaco em branco e pontuacoes
  97. JMP VERIFICA
  98.  
  99.  
  100.  
  101. LDA PC+1
  102. PUSH
  103. LDA PC
  104. PUSH
  105. RET
  106.  
  107. ;Conta o tamanho da sentenca
  108. COUNT:
  109. LDA @PTR
  110. OR #0
  111. JZ RETURN
  112.  
  113. LDA TAM_SENTENCA
  114. ADD #1
  115. STA TAM_SENTENCA
  116.  
  117. LDA PTR
  118. ADD #1
  119. STA PTR
  120.  
  121. JMP COUNT
  122.  
  123. ;Verificacao de espaco em branco e pontuacoes
  124. VERIFICA:
  125.  
  126. RETURN_1:
  127.  
  128. LDA @PTR_VAR
  129. SUB #020h ;verifica se é espaco em branco
  130. JZ PULA_PTR_VAR
  131.  
  132. LDA @PTR_VAR
  133. SUB #021h ;verifica se é exclamação
  134. JZ PULA_PTR_VAR
  135.  
  136. LDA @PTR_VAR
  137. SUB #022h ;verifica se é aspas dupla
  138. JZ PULA_PTR_VAR
  139.  
  140. LDA @PTR_VAR
  141. SUB #023h ;verifica se é tralha
  142. JZ PULA_PTR_VAR
  143.  
  144. LDA @PTR_VAR
  145. SUB #024h ;verifica se é $
  146. JZ PULA_PTR_VAR
  147.  
  148. LDA @PTR_VAR
  149. SUB #025h ;verifica se é %
  150. JZ PULA_PTR_VAR
  151.  
  152. LDA @PTR_VAR
  153. SUB #026h ;verifica se é &
  154. JZ PULA_PTR_VAR
  155.  
  156. LDA @PTR_VAR
  157. SUB #027h ;verifica se é aspas simples
  158. JZ PULA_PTR_VAR
  159.  
  160. LDA @PTR_VAR
  161. SUB #028h ;verifica se é (
  162. JZ PULA_PTR_VAR
  163.  
  164. LDA @PTR_VAR
  165. SUB #029h ;verifica se é )
  166. JZ PULA_PTR_VAR
  167.  
  168. LDA @PTR_VAR
  169. SUB #02Ah ;verifica se é *
  170. JZ PULA_PTR_VAR
  171.  
  172. LDA @PTR_VAR
  173. SUB #02Bh ;verifica se é +
  174. JZ PULA_PTR_VAR
  175.  
  176. LDA @PTR_VAR
  177. SUB #02Ch ;verifica se é ,
  178. JZ PULA_PTR_VAR
  179.  
  180. LDA @PTR_VAR
  181. SUB #02Dh ;verifica se é -
  182. JZ PULA_PTR_VAR
  183.  
  184. LDA @PTR_VAR
  185. SUB #02Eh ;verifica se é .
  186. JZ PULA_PTR_VAR
  187.  
  188. LDA @PTR_VAR
  189. SUB #02Fh ;verifica se é /
  190. JZ PULA_PTR_VAR
  191.  
  192.  
  193. RETURN_2:
  194.  
  195. LDA @PTR
  196. SUB #020h ;verifica se é espaco em branco
  197. JZ PULA_PTR
  198.  
  199. LDA @PTR
  200. SUB #021h ;verifica se é exclamação
  201. JZ PULA_PTR
  202.  
  203. LDA @PTR
  204. SUB #022h ;verifica se é aspas dupla
  205. JZ PULA_PTR
  206.  
  207. LDA @PTR
  208. SUB #023h ;verifica se é tralha
  209. JZ PULA_PTR
  210.  
  211. LDA @PTR
  212. SUB #024h ;verifica se é $
  213. JZ PULA_PTR
  214.  
  215. LDA @PTR
  216. SUB #025h ;verifica se é %
  217. JZ PULA_PTR
  218.  
  219. LDA @PTR
  220. SUB #026h ;verifica se é &
  221. JZ PULA_PTR
  222.  
  223. LDA @PTR
  224. SUB #027h ;verifica se é aspas simples
  225. JZ PULA_PTR
  226.  
  227. LDA @PTR
  228. SUB #028h ;verifica se é (
  229. JZ PULA_PTR
  230.  
  231. LDA @PTR
  232. SUB #029h ;verifica se é )
  233. JZ PULA_PTR
  234.  
  235. LDA @PTR
  236. SUB #02Ah ;verifica se é *
  237. JZ PULA_PTR
  238.  
  239. LDA @PTR
  240. SUB #02Bh ;verifica se é +
  241. JZ PULA_PTR
  242.  
  243. LDA @PTR
  244. SUB #02Ch ;verifica se é ,
  245. JZ PULA_PTR
  246.  
  247. LDA @PTR
  248. SUB #02Dh ;verifica se é -
  249. JZ PULA_PTR
  250.  
  251. LDA @PTR
  252. SUB #02Eh ;verifica se é .
  253. JZ PULA_PTR
  254.  
  255. LDA @PTR
  256. SUB #02Fh ;verifica se é \
  257. JZ PULA_PTR
  258.  
  259. JMP LOOP
  260.  
  261. ;Loop que percorre a sentenca de tras pra frente
  262. LOOP:
  263. LDA TAM_SENTENCA
  264. ADD #0
  265. JZ FIM_2
  266.  
  267.  
  268. LDA TAM_SENTENCA
  269. SUB #1 ;Subtrai 1 posicao, voltando na sentenca
  270. STA TAM_SENTENCA
  271.  
  272.  
  273.  
  274. LDA @PTR_VAR
  275. SUB @PTR
  276. JNZ FIM
  277.  
  278. LDA PTR_VAR
  279. SUB #1
  280. STA PTR_VAR
  281.  
  282. LDA PTR
  283. ADD #1
  284. STA PTR
  285.  
  286. LDA TAM_SENTENCA
  287. ADD #0
  288. JZ FIM_2
  289.  
  290. JMP VERIFICA
  291.  
  292. FIM_1:
  293. LDA #0
  294. STA ACC
  295. LDA PC+1
  296. PUSH
  297. LDA PC
  298. PUSH
  299. RET
  300.  
  301.  
  302. FIM_2:
  303. LDA @PTR_VAR
  304. SUB @PTR
  305. JZ FIM_1
  306. LDA #1
  307.  
  308. STA ACC
  309. LDA PC+1
  310. PUSH
  311. LDA PC
  312. PUSH
  313. RET
  314.  
  315.  
  316.  
  317.  
  318. PULA_PTR_VAR:
  319. LDA PTR_VAR
  320. SUB #1
  321. STA PTR_VAR
  322.  
  323. LDA TAM_SENTENCA
  324. SUB #1
  325. STA TAM_SENTENCA
  326. JMP RETURN_1
  327.  
  328. PULA_PTR:
  329. LDA PTR
  330. ADD #1
  331. STA PTR
  332.  
  333. JMP RETURN_2
  334.  
  335. ;Impressao
  336. IMPRIME:
  337. LDA PTR_VAR
  338. ADD #1
  339. STA PTR_VAR
  340.  
  341. ;Loop da imprissao no console
  342. LOOP2:
  343. LDA @PTR_VAR
  344. OR #0
  345. JZ FINAL
  346. LDA #CONSOLEW
  347. TRAP @PTR_VAR
  348.  
  349. LDA PTR_VAR
  350. ADD #1
  351. STA PTR_VAR
  352.  
  353. JMP LOOP2
  354.  
  355.  
  356. FINAL:
  357. LDA ACC
  358. JZ FINAL_POSITIVO ;Caso positivo, pula pra impressao
  359.  
  360. LDA #4
  361. TRAP PALINDROMO_NEGATIVO ;Caso negativo
  362.  
  363. LDA ACC
  364. ADD #030H
  365. STA CONTADOR
  366. LDA #CONSOLEW
  367. TRAP CONTADOR
  368. HLT
  369.  
  370. ;Impressao do caso palindromo
  371. FINAL_POSITIVO :
  372. LDA #4
  373. TRAP PALINDROMO_POSITIVO
  374.  
  375. LDA ACC
  376. ADD #030H
  377. STA CONTADOR
  378. LDA #CONSOLEW
  379. TRAP CONTADOR
  380. HLT
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement