Advertisement
Guest User

Untitled

a guest
Oct 20th, 2014
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Programa aula1_1.as
  2.  
  3. ;------------------------------------------------------------------------------
  4. ; ZONA I: Definicao de constantes
  5. ;         Pseudo-instrucao : EQU
  6. CR              EQU     0Ah
  7. FIM_TEXTO       EQU     '@'
  8. IO_READ         EQU     FFFFh
  9. IO_WRITE        EQU     FFFEh
  10. IO_STATUS       EQU     FFFDh
  11. SP_INICIAL      EQU     FDFFh
  12.  
  13.  
  14. ;------------------------------------------------------------------------------
  15. ; ZONA II: definicao de variaveis
  16. ;          Pseudo-instrucoes : WORD - palavra (16 bits)
  17. ;                              STR  - sequencia de caracteres (cada ocupa 1 palavra: 16 bits).
  18. ;          Cada caracter ocupa 1 palavra
  19.                 ORIG    8000h
  20. VarTexto1       STR     'LEIC !!', FIM_TEXTO
  21. VarTexto2       STR     'Introducao a Arquitectura de Computadores', FIM_TEXTO
  22. VarTexto3       STR     '1o Ano -  1o Semestre', FIM_TEXTO
  23. VarMenu0        STR     '** Instrucoes para a utilizacao do programa Aula1_1.as **', FIM_TEXTO
  24. VarMenu1        STR     'Visualizacao de uma mensagem - prima 1, 2 ou 3', FIM_TEXTO
  25. VarMenu2        STR     'Fim de execucao - prima outra tecla', FIM_TEXTO
  26. VarPrompt       STR     ' > ', FIM_TEXTO
  27. TextoFim        STR     'Fim de execucao!', FIM_TEXTO
  28. VarPalavra      WORD    1234h
  29. Dummy           TAB     1
  30.  
  31.  
  32. ;------------------------------------------------------------------------------
  33. ; ZONA III: codigo
  34. ;        conjunto de instrucoes Assembly, ordenadas de forma a realizar
  35. ;        as funcoes pretendidas
  36.  
  37.                 ORIG    0000h
  38.                 JMP     Inicio
  39.  
  40.  
  41. ; LeCar: Rotina que efectua a leitura de um caracter proveniente do teclado.
  42. ;               Entradas: ---
  43. ;               Saidas: R1 - caracter lido
  44. ;               Efeitos: alteracao do registo R1
  45.  
  46. LeCar:          CMP     R0, M[IO_STATUS]
  47.                 BR.Z    LeCar
  48.                 MOV     R1, M[IO_READ]
  49.                 RET
  50.  
  51.  
  52. ; EscCar: Rotina que efectua a escrita de um caracter para o ecran.
  53. ;       O caracter pode ser visualizado na janela de texto.
  54. ;               Entradas: pilha - caracter a escrever
  55. ;               Saidas: ---
  56. ;                       Efeitos: alteracao do registo R1
  57. ;                       alteracao da posicao de memoria M[IO]
  58.  
  59. EscCar:         MOV     R1, M[SP+2]
  60.                 MOV     M[IO_WRITE], R1
  61.                 RETN    1
  62.  
  63.  
  64. ; MudaLinha: Rotina que efectua a escrita de um caracter de mudanca de linha.
  65. ;               Entradas: ---
  66. ;               Saidas: ---
  67. ;               Efeitos: ---
  68.  
  69. MudaLinha:      PUSH    R1
  70.                 PUSH    CR
  71.                 CALL    EscCar
  72.                 POP     R1
  73.                 RET
  74.  
  75.  
  76. ; EscString: Rotina que efectua a escrita de uma cadeia de caracter, terminada
  77. ;          pelo caracter FIM_TEXTO. Pode-se definir como terminador qualquer
  78. ;          caracter ASCII.
  79. ;               Entradas: R2 - apontador para o inicio da cadeia de caracteres  
  80. ;               Saidas: ---
  81. ;               Efeitos: ---
  82.  
  83. EscString:      PUSH    R1
  84.                 PUSH    R2
  85. Ciclo:          MOV     R1, M[R2]
  86.                 CMP     R1, FIM_TEXTO
  87.                 BR.Z    FimEsc
  88.                 PUSH    R1
  89.                 CALL    EscCar
  90.                 INC     R2
  91.                 BR      Ciclo
  92. FimEsc:         CALL    MudaLinha
  93.                 POP     R2
  94.                 POP     R1
  95.                 RET
  96.  
  97. ; EscMenu: Rotina que efectua a escrita do menu que contem as instrucoes de
  98. ;        utilizacao do programa.
  99. ;               Entradas: --
  100. ;               Saidas: ---
  101. ;               Efeitos: ---
  102. EscMenu:        PUSH    R2
  103.                 CALL    MudaLinha
  104.                 CALL    MudaLinha
  105.                 MOV     R2, VarMenu0
  106.                 CALL    EscString
  107.                 CALL    MudaLinha
  108.                 MOV     R2, VarMenu1
  109.                 CALL    EscString
  110.                 MOV     R2, VarMenu2
  111.                 CALL    EscString
  112.                 CALL    MudaLinha
  113.                 POP     R2
  114.                 RET
  115.  
  116. ; EscPrompt: Rotina que efectua a escrita do prompt, que indica o inicio da
  117. ;          leitura
  118. ;               Entradas: --
  119. ;               Saidas: ---
  120. ;               Efeitos: ---
  121. EscPrompt:      PUSH    R2
  122.                 CALL    MudaLinha
  123.                 MOV     R2, VarPrompt
  124.                 CALL    EscString
  125.                 POP     R2
  126.                 RET
  127.  
  128.  
  129. ; ProgramaPrincipal: programa que recebe um caracter do teclado e, de acordo
  130. ;       com o caracter recebido (1, 2 ou 3), imprime uma
  131. ;       de tres mensagens. Caso receba um caracter diferente,
  132. ;       termina a execucao.
  133.  
  134. Inicio:         MOV     R7, SP_INICIAL
  135.                 MOV     SP, R7
  136.                 CALL    EscMenu
  137. Opcao:          CALL    EscPrompt
  138.                 CALL    LeCar
  139.                 CALL    MudaLinha
  140.                 CMP     R1, '1'
  141.                 BR.Z    Texto1
  142.                 CMP     R1, '2'
  143.                 BR.Z    Texto2
  144.                 CMP     R1, '3'
  145.                 BR.NZ   EscFim
  146. Texto3:         MOV     R2, VarTexto3
  147.                 CALL    EscString
  148.                 BR      Opcao
  149. Texto2:         MOV     R2, VarTexto2
  150.                 CALL    EscString
  151.                 BR      Opcao
  152. Texto1:         MOV     R2, VarTexto1
  153.                 CALL    EscString
  154.                 BR      Opcao
  155. EscFim:         MOV     R2, TextoFim
  156.                 CALL    EscString
  157. Halt:           BR      Halt
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement