Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ORG 100H
- JMP INI ; pula para o inicio do programa
- X DB 16 DUP(0)
- Y DB 16 DUP(1)
- msg1 DB "VOCE ERROU A SEQUENCIA! $"
- msg2 DB "PROGRAMA ENCERRADO!$"
- INI:
- MOV BX,0 ; bx = 0
- MAIN:
- CALL RAND ; chama rotina para gerar o numero aleatorio
- LEA SI,X ; SI = offset da variavel X
- ADD SI,BX ; adiciona BX a SI
- MOV [SI],DL ; move o valor gerado randomicamente para posicao 1 da variavel X
- INC BX ; incrementa BX
- MOV AH,2 ; escreve o numero gerado na tela
- INT 21H
- MOV DL,0x20 ; escreve dois 'space' e um caracter ':'
- INT 21H
- INT 21H
- MOV DL,':'
- INT 21H
- MOV CX,BX
- LEA SI,Y ; SI = offset da variavel Y
- LEA DI,X ; DI = offset da variavel X
- M1:
- MOV AH,1
- INT 21H ; chama a interrupcao 21h/01h
- MOV [SI],AL ; armazena o caracter digitado na variavel Y
- MOV DL,[DI] ; armazena o caracter gerado randomicamente em DL
- CMP AL, "S" ; compara o caracter digitado com 'S'
- JZ ENCERRA ; se o caracter digitado = S entao encerra o programa, se nao continua
- CMP DL,AL ; compara as variaveis X e Y ( a sequencia digitada esta correta? )
- JNE ERRO ; erro na sequencia? exibir a mensagem de erro e encerrar, se nao continua
- INC DI ; passa para o proximo byte da variavel X
- INC SI ; passa para o proximo byte da variavel Y
- CALL ASTERISCO ; chama a rotina para escrever o asterisco
- LOOP M1: ; volta para M1 enquanto CX =/= 0
- MOV CX,BX ; CX = BX
- ADD CX,4 ; CX = CX + 4
- CALL NBACK ; chama a rotina para retornar cursor
- JMP MAIN ; pula para MAIN
- ; --------------- EXIBE A MENSAGEM DE ERRO E ENCERRA O PROGRAMA
- ERRO:
- MOV AH, 2 ; pula de linha e retorna para o inicio da linha
- MOV DL,0x0A
- INT 21H
- MOV DL, 0x0D
- INT 21H
- MOV DX, OFFSET msg1 ; escreve a mensagem de erro
- MOV AH, 9
- INT 21H
- .EXIT ; encerra o programa
- ; --------------- ENCERRA O PROGRAMA AO DIGITAR A TECLA 'S'
- ENCERRA:
- MOV AH, 2 ; pula de linha e retorna para o inicio da linha
- MOV DL, 0x0A
- INT 21H
- MOV DL, 0x0D
- INT 21H
- MOV DX, OFFSET msg2 ; escreve a mensagem de encerramento
- MOV AH, 9
- INT 21H
- .EXIT ; encerra o programa
- ;------------------ ESCREVE O ASTERISCO
- ASTERISCO:
- MOV AH, 2 ; retorna o cursor 1 vez
- MOV DL, 0x08
- INT 21H
- MOV DL, '*' ; escreve asterisco no lugar do numero anterior
- INT 21H
- RET ; retorna
- ;------------------- RETORNA O CURSOR CX POSICOES
- NBACK:
- MOV AH,2
- MOV DL,0x08 ; armazena 'back' em DL
- LR1:
- INT 21H ; chama a int 21h/02h
- LOOP LR1 ; volta para LR1 enquanto CX =/= 0
- RET ; retorna
- ;--------------- RETORNA EM DL UM NUMERO ALEATÓRIO (0-9)
- RAND:
- MOV AH,0
- INT 0x1A ; chama a interrupcao int 1AH/00h
- AND DL,0x0F
- CMP DL,9
- JLE R1
- SUB DL,9
- R1:
- ADD DL,48 ; converte numeral gerado para seu correspondente ascii
- RET
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement