Advertisement
Guest User

Untitled

a guest
Jan 19th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ORG 100H  
  2.  
  3. JMP INI                 ; pula para o inicio do programa
  4.  
  5. X DB 16 DUP(0)
  6. Y DB 16 DUP(1)  
  7. msg1 DB "VOCE ERROU A SEQUENCIA! $"
  8. msg2 DB "PROGRAMA ENCERRADO!$"
  9.  
  10. INI:
  11.  
  12.     MOV BX,0            ; bx = 0
  13.  
  14. MAIN:
  15.    
  16.     CALL RAND           ; chama rotina para gerar o numero aleatorio
  17.     LEA SI,X            ; SI = offset da variavel X
  18.     ADD SI,BX           ; adiciona BX a SI
  19.     MOV [SI],DL         ; move o valor gerado randomicamente para posicao 1 da variavel X
  20.     INC BX              ; incrementa BX
  21.     MOV AH,2            ; escreve o numero gerado na tela
  22.     INT 21H
  23.     MOV DL,0x20         ; escreve dois 'space' e um caracter ':'
  24.     INT 21H
  25.     INT 21H
  26.     MOV DL,':'
  27.     INT 21H
  28.     MOV CX,BX          
  29.     LEA SI,Y            ; SI = offset da variavel Y
  30.     LEA DI,X            ; DI = offset da variavel X
  31.  
  32. M1:
  33.  
  34.     MOV AH,1
  35.     INT 21H             ; chama a interrupcao 21h/01h
  36.     MOV [SI],AL         ; armazena o caracter digitado na variavel Y
  37.     MOV DL,[DI]         ; armazena o caracter gerado randomicamente em DL
  38.     CMP AL, "S"         ; compara o caracter digitado com 'S'
  39.     JZ ENCERRA          ; se o caracter digitado = S entao encerra o programa, se nao continua
  40.     CMP DL,AL           ; compara as variaveis X e Y ( a sequencia digitada esta correta? )
  41.     JNE ERRO            ; erro na sequencia? exibir a mensagem de erro e encerrar, se nao continua
  42.     INC DI              ; passa para o proximo byte da variavel X
  43.     INC SI              ; passa para o proximo byte da variavel Y
  44.     CALL ASTERISCO      ; chama a rotina para escrever o asterisco
  45.     LOOP M1:            ; volta para M1 enquanto CX =/= 0
  46.     MOV CX,BX           ; CX = BX
  47.     ADD CX,4            ; CX = CX + 4
  48.     CALL NBACK          ; chama a rotina para retornar cursor
  49.     JMP MAIN            ; pula para MAIN
  50.                                          
  51.                                          
  52. ; --------------- EXIBE A MENSAGEM DE ERRO E ENCERRA O PROGRAMA
  53.    
  54. ERRO:
  55.  
  56.     MOV AH, 2           ; pula de linha e retorna para o inicio da linha
  57.     MOV DL,0x0A        
  58.     INT 21H
  59.     MOV DL, 0x0D
  60.     INT 21H
  61.    
  62.     MOV DX, OFFSET msg1 ; escreve a mensagem de erro
  63.     MOV AH, 9
  64.     INT 21H
  65.    
  66. .EXIT                   ; encerra o programa    
  67.  
  68.  
  69.  
  70. ; --------------- ENCERRA O PROGRAMA AO DIGITAR A TECLA 'S'
  71.  
  72. ENCERRA:
  73.  
  74.     MOV AH, 2           ; pula de linha e retorna para o inicio da linha          
  75.     MOV DL, 0x0A
  76.     INT 21H
  77.     MOV DL, 0x0D
  78.     INT 21H  
  79.    
  80.     MOV DX, OFFSET msg2 ; escreve a mensagem de encerramento
  81.     MOV AH, 9
  82.     INT 21H
  83.    
  84. .EXIT                   ; encerra o programa
  85.            
  86.      
  87.  
  88. ;------------------ ESCREVE O ASTERISCO
  89.  
  90. ASTERISCO:
  91.  
  92.     MOV AH, 2           ; retorna o cursor 1 vez
  93.     MOV DL, 0x08
  94.     INT 21H
  95.     MOV DL, '*'         ; escreve asterisco no lugar do numero anterior
  96.     INT 21H
  97.     RET                 ; retorna
  98.  
  99.    
  100. ;------------------- RETORNA O CURSOR CX POSICOES          
  101.            
  102. NBACK:
  103.  
  104.     MOV AH,2
  105.     MOV DL,0x08         ; armazena 'back' em DL
  106.    
  107.    
  108. LR1:
  109.                  
  110.     INT 21H             ; chama a int 21h/02h
  111.     LOOP LR1            ; volta para LR1 enquanto CX =/= 0
  112.     RET                 ; retorna
  113.    
  114.    
  115. ;--------------- RETORNA EM DL UM NUMERO ALEATÓRIO (0-9)
  116.  
  117. RAND:
  118.  
  119.     MOV AH,0
  120.     INT 0x1A            ; chama a interrupcao int 1AH/00h
  121.     AND DL,0x0F
  122.     CMP DL,9
  123.     JLE R1
  124.     SUB DL,9
  125.  
  126. R1:
  127.  
  128.     ADD DL,48           ; converte numeral gerado para seu correspondente ascii
  129.     RET
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement