This is a example to show a image, its not a puzzle because isn't complete :p |
;-------------------------------------------------------------------------------------------------------------- ;Puzzle ;-------------------------------------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------------------------------------- STACK SEGMENT PARA STACK DB 64 DUP ('mystack') STACK ENDS ;-------------------------------------------------------------------------------------------------------------- MYDATA SEGMENT PARA 'DATA' ;--------------------------Open file-------------------------- NAMEPAR LABEL BYTE MAXLENB db 81 ACTLEN DB ? NAMEFLD DB 1 DUP (' '),'$' LineCord db 8 dup (' '), '$' ;guarda a linha FHAND DW ? ;--------------------------Largura e altura-------------------------- Height dw 3 ;guarda a largura Widht dw 3 ;guarda a altura ;--------------------------Imagem-------------------------- FILENAM DB '.\images\ping.pgm',0 ;--------------------------About-------------------------- About0 db " ___.-- PUZZLE --.___$",10 ;--------------------------Botoes-------------------------- btnPlay db 'Play' ,0 ,'$' btnAbout db 'About',0 ,'$' btnExit db 'Exit' ,0 ,'$' btnAboutOK db 'OK' ,0 ,'$' InfoClick db 0 ;--------------------------Coordenadas para label e border dos botoes-------------------------- x db ? y db ? x1 dw ? y1 dw ? x2 dw ? y2 dw ? MYDATA ENDS;-------------------------------------------------------------------------------------------------------------- MYCODE SEGMENT PARA 'CODE' MYPROC PROC FAR ASSUME CS:MYCODE,DS:MYDATA,SS:STACK ;--------------------------- Inicializações ----------------------------- PUSH DS SUB AX,AX PUSH AX MOV AX,MYDATA MOV DS,AX MOV ES,AX ;Codigo ;-------------------------------------------------------------------------------------------------------------- start: CALL OPENFIL ;abre o ficheiro e lê a 3º linha call SeparaCord ;separa as coordenadas call Graficos ;vai para o procedimento de inicializar os graficos call DrawImage ;vai para o procedimento DrawImage Mostrar imagem call DrawButtons ; vai par ao procedimento para desenhar os butoes CALL StartMouse ;vai para o procedimento para inicializa o rato CALL ShowMouse ;vai para o procedimento para mostrar o rato mov InfoClick, 0 ;inicializa Infoclick ;----------------------- Loop para verificações se clica no botao sair ou jogar ----------------------- LoopClick: CALL CheckClick ;Chama o procedimento CheckClick ;cmp InfoClick,1 ;compara infoclick com 1 ;je Play ;se for 1, vai para a label Play cmp InfoClick,2 ;compara infoclick com 2 je Exit ; se for 2, vai para a label Exit cmp InfoClick,3 ;compara infoclick com 3 je About ;se for 3 vai para a label about jmp LoopClick ;loop enquanto não se sair About: call ClearScreen ; Chama o procedimento Clearscreen call Graficos ;Chama o procedimento graficos call DrawAbout ; Chama o procedimento DrawAbout call AboutOkBTN ;Chama o procedimento AboutOkBTN CALL StartMouse ;Chama o procedimento StartMouse CALL ShowMouse ; Chama o procedimento ShowMouse loopAboutExit: Call CheckClick2 ;Chama o procedimento CheckClick2 Cmp InfoClick,4 ;Move 4 para a variavel Infoclick je Menu ; Salta para a label Menu, se for igual jmp loopAboutExit ;senão salta para a label loopAboutExit Menu: call ClearScreen ;Chama o procedimento ClearScreen jmp start ;Salta para a label start Exit: CALL CLOSEFIL ; Chama o procedimento Closefil call ReturnToGraphicMode ; Chama o procedimento ReturnToGraphicMode RET MYPROC ENDP ;-------------------------------------------------------------------------------------------------------------- ;Codigo para abrir o ficheiro ;-------------------------------------------------------------------------------------------------------------- OPENFIL PROC NEAR mov ah, 3dh ;Abre o ficheiro mov al, 0 ;Abre-o para ler lea dx, FILENAM ;Aponta em dx, o Filenam int 21h ;invoca a interrupção do 21h do dos mov FHAND, ax ;Move para ax, a posição, onde se encontra no ficheiro OPENFIL ENDP ;-------------------------------------------------------------------------------------------------------------- ;Codigo para ler o ficheiro e guargar a linha ;-------------------------------------------------------------------------------------------------------------- READFILE PROC NEAR sub di,di ;mete di a zero ReadByte: MOV ah,3fh ;Modo para ler dados de um ficheiro LEA dx, NAMEFLD ;endereço do namefld que tem o dado lido MOV cx, 1 ;le 1 bytes MOV bx, FHAND ;move para bx o valor do file handle INT 21h ;invoca a interrupção do 21h do dos cmp ax, cx ;chegou ao fim do ficheiro? jne EOF ; se sim vai para a label EOF cmp NAMEFLD,0AH ; compara namefld com 0ah (se é um enter ) je IncEnter ; se for igual salta para a label IncEnter cmp di, 2 ; ve se esta no enter 2 je ReadLine ;se for igual salta para o label ReadLine cmp di, 4 ; ve se esta no enter 4 je eof ;Se estiver salta para a label EOF JMP ReadByte ;Lê o proximo byte IncEnter: inc di ;incrementa o count jmp ReadByte ;salta para a label ReadByte ReadLine: mov al, namefld ;move para al, o byte que esta em namefld mov LineCord[si], al ;move para Linecord (na posição SI) o que esta em al inc si ;incrementar si jmp ReadByte ;Lê o proximo byte EOF: RET ; sai do procedimento READFILE endp ;-------------------------------------------------------------------------------------------------------------- ;Codigo para separar a linha nas variaveis ;-------------------------------------------------------------------------------------------------------------- SeparaCord proc near lea si, Linecord ;endereço do Linecord que tem a linha com alt e larg push bx ;vamos guardar bx na pilha push cx ;vamos guardar cx na pilha push ax ;vamos guardar ax na pilha sub si,si ;vamos por si a zero sub ax,ax ; vamos por ax a zero mov cl,4 ;movemos para cl 4 add si, 4 ;Adicionamos a si 4, para remover o lixo do inicio da string SaveWidht: mov dl, [SI] ;move para dl, o caracter da posiçao si, da string Linecord cmp dl, 20h ;verifica se é um espaço je incSpace ;se for salta para a label incSpace sub dl, 30h ; converte para um numero decimal SHL AX,cl ;faz um shift ao resultado ADD AL, DL ;adiciona al ao resultado inc si ;incrementa si jmp SaveWidht ;salta para a label SaveWidht Saveheight2: mov dl, [SI] ;move para dl, o caracter da posiçao si, da string Linecord cmp dl, 20h ;verifica se é um espaço je fim ;se for salta para a label incSpace sub dl, 30h ; converte para decimal SHL AX,cl ;shift resultado ADD AL, DL ;adiciona al ao resultado inc si ;incrementa si jmp SaveHeight2 ;salta para a label SaveHeight2 IncSpace: inc si ;para remover o space mov Widht,ax ;Move para Widht o valor de ax sub ax,ax ;Limpa ax jmp Saveheight2 ;salta para a label Saveheight2 fim: mov Height,ax ; Move para height o valor de ax pop ax ;Volta a carregar o valor de ax, que se encontra na plha pop cx ;Volta a carregar o valor de cx, que se encontra na plha pop bx ;Volta a carregar o valor de bx, que se encontra na plha ret ;acaba o procedimento SeparaCord endp ;-------------------------------------------------------------------------------------------------------------- ; ROTINA PARA CONFIGURAR MODO GRAFICO E CORES ;-------------------------------------------------------------------------------------------------------------- Graficos proc near mov ah,0Fh ; function 0Fh - get current mode int 10h ; Bios video service call MOV AH, 00h ; prepara para definir o modo graf. mov al, 13h ; modo 13h 256 cores 320*200 INT 10h ; invoca a interrupção 10h da BIOS MOV AH,11 ; prepara configuração da palete de core MOV BH,00 ; inicializa a cor de background MOV BL,26 ; background azul INT 10h ; invoca a interrupção 10h da BIOS MOV AH, 00 ; prepara configuração da palete de cores MOV BH,01 ; prepara configuração do foreground MOV BL,00 ; verde, vermelho e amarelo INT 10h ; invoca a interrupção 10h da BIOS ret ;sai do procedimento Graficos endp ;------------------------------------------------------------------------------------------------------ ; Rotina para desenhar a imagem ;-------------------------------------------------------------------------------------------------------------- DrawImage proc near sub dx,dx ;Necessário limpar para meter dx a zero, de forma a desenhar em (0,0), porque com o pop não funciona ReadAndDraw: push cx ;carrega na pilha o valor de cx push dx ;carrega na pilha o valor de dx MOV ah,3fh ;Modo para ler dados de um ficheiro LEA dx, NAMEFLD ;endereço do namefld que tem o dado lido MOV cx, 1 ;le 1 bytes MOV bx, FHAND ;move para bx o valor do file handle INT 21h ;invoca a interrupção do 21h do dos cmp ax, cx ;chegou ao fim do ficheiro? jne EOF2 ; se sim vai para a label EOF pop dx ;puxa o valor de dx pop cx ;puxa o valor de cx MOV AL,NAMEFLD ; mova para al, a cor lida call coresCertas ;Salta para o procedimento CoresCertas para corrigir a cor ;linha MOV AH,12 ; configura INT10h para plot do pixel INT 10h ; invoca a interrupção 10h da BIOS, Desenha o ponto INC cX ;incrementa coluna mov bx, 99 ;move para bx, 99 (Largura da imagem) CMP cx,bx ;linha feita ? JLE ReadAndDraw ;se não salta para a label ReadAndDraw ;coluna mov cx,0 ;Move para cx, 0 inc dX ;incrementa linha mov bx, 117 ;move para cx 117, (Altura da imagem) CMP dX,bx ;compara dx, bx JLE ReadAndDraw ;salta para a label ReadAndDraw eof2: ret ;sai do procedimento DrawImage endp ;-------------------------------------------------------------------------------------------------------------- ; Rotina para colocar as cores certas ;-------------------------------------------------------------------------------------------------------------- coresCertas proc near ; Nestre procedimento, irá entrar a cor al, e irá comparar com os certos limites ; para saber qual a cor que de seguida irá tomar cmp al, 0fh jbe cor16 cmp al, 01fh jbe cor17 cmp al, 02fh jbe cor18 cmp al, 03fh jbe cor19 cmp al, 04fh jbe cor20 cmp al, 05fh jbe cor21 cmp al, 06fh jbe cor22 cmp al, 07fh jbe cor23 cmp al, 08fh jbe cor24 cmp al, 09fh jbe cor25 cmp al, 0afh jbe cor26 cmp al, 0bfh jbe cor27 cmp al, 0cfh jbe cor28 cmp al, 0dfh jbe cor29 cmp al, 0efh jbe cor30 mov al, 1fh ret cor16: mov al, 10h ret cor17: mov al, 11h ret cor18: mov al, 12h ret cor19: mov al, 13h ret cor20: mov al, 14h ret cor21: mov al, 15h ret cor22: mov al, 16h ret cor23: mov al, 17h ret cor24: mov al, 18h ret cor25: mov al, 19h ret cor26: mov al, 1Ah ret cor27: mov al, 1bh ret cor28: mov al, 1ch ret cor29: mov al, 1dh ret cor30: mov al, 1eh ret coresCertas endp ;-------------------------------------------------------------------------------------------------------------- ; Rotina para inicializar o rato ;-------------------------------------------------------------------------------------------------------------- StartMouse proc near push ax ;mete para a pilha o valor de ax mov ax,00h ;Inicializa o driver do rato int 33h ;invoca a interrupção do 33h do dos pop ax ;puxa da pilha o valor de ax ret ;sai do procedimento StartMouse endp ;-------------------------------------------------------------------------------------------------------------- ; Rotina para mostrar o rato ;-------------------------------------------------------------------------------------------------------------- ShowMouse proc near push ax ;mete para a pilha o valor de ax mov ax,01h ;Activa o cursor do rato int 33h ;invoca a interrupção do 33h do dos pop ax ;Puxa da pilha o valor de ax ret ;sai do procedimento ShowMouse endp ;-------------------------------------------------------------------------------------------------------------- ; Rotina para desenhar os butoes ;-------------------------------------------------------------------------------------------------------------- DrawButtons proc near ;---------------- ;Botao Play | ;---------------- mov x1, 235 ;move para x1 o valor 235 mov x2, 281 ;move para x2 o valor 281 mov y1, 39 ;move para y1 o valor 39 mov y2, 54 ;move para y2 o valor 54 CALL btnBorder ;chama o procedimento btnBorder mov x, 150 ;move para x o valor 150 mov y, 5 ;move para y o valor 5 lea di,btnPlay ;endereço do btnPlay que tem o texto do botão CALL printLabelButtons ;chama o procedimento printLabelButtons ;---------------- ;Botao Exit | ;---------------- mov x1, 235 ;move para x1 o valor 235 mov x2, 281 ;move para x2 o valor 281 mov y1, 86 ;move para y1 o valor 86 mov y2, 102 ;move para y2 o valor 102 CALL btnBorder ;chama o procedimento btnBorder mov x, 150 ;move para x o valor 150 mov y, 11 ;move para y o valor 11 lea di,btnExit ;endereço do btnExit que tem o texto do botão CALL printLabelButtons ;Chama o procedimento printLabelButtons ;---------------- ;Botao About | ;---------------- mov x1, 235 ;move para x1 o valor 235 mov x2, 282 ;move para x2 o valor 282 mov y1, 134 ;move para y1 o valor 134 mov y2, 150 ; move para y2 o valor 150 CALL btnBorder ;chama o procedimento btnBorder mov x, 150 ;Move para x o valor 150 mov y, 17 ;move para y o valor 17 lea di,btnAbout ;endereço do btnAbout que tem o texto do botão CALL printLabelButtons ;chama o procedimento printLabelButtons ret ;sai do procedimento DrawButtons endp ;-------------------------------------------------------------------------------------------------------------------------- ; Rotina para desenhar o botão do about OK, ou seja para sair do about e voltar ao menu inicial ;-------------------------------------------------------------------------------------------------------------------------- AboutOkBTN proc near ;-------------------- ;Botao ABOUT | ;-------------------- mov x1, 235 ;move para x1 o valor 235 mov x2, 282 ;move para x2 o valor 282 mov y1, 86 ;move para y1 o valor 86 mov y2, 102 ;move para y2 o valor 102 CALL btnBorder ;chama o procedimento btnBorder mov x, 150 ;move para x o valor 150 mov y, 11 ;move para y o valor 11 lea di,btnAboutOK ;endreço do btnAboutOk que tem o texto do botão CALL printLabelButtons ;chama o procedimento printLabelButtons ret ;Sai do procedimento AboutOkBTN endp ;-------------------------------------------------------------------------------------------------------------- ; Rotina para desenhar a borda dos butoes ;-------------------------------------------------------------------------------------------------------------- btnBorder proc near MOV CX, x1 ; move para cx, o valor de x1 MOV DX, y1 ;move para dx o valor de y1 ;desenha metade da borda Linha: INC CX ;incrementa cx MOV AL,70h ;Mete na borda a cor vermelha MOV AH,12 ; configura INT10h para plot do pixel INT 10h ; invoca a interrupção 10h da BIOS CMP CX, x2 ;Compara se chegou ao fim JNE Linha ;se não volta para a label Linha Coluna: INC DX ;incrementa dx MOV AL,70h ;Mete na borda a cor vermelha MOV AH,12 ; configura INT10h para plot do pixel INT 10h ; invoca a interrupção 10h da BIOS CMP DX, y2 ;compara dx com y2, ou seja se chegou ao fim da coluna JNE Coluna ;se não volta para a coluna ;desenha a outra metade ;==================================================== Linha2: DEC CX ;Decrementa cx MOV AL,70h ;Mete na borda a cor vermelha MOV AH,12 ; configura INT10h para plot do pixel INT 10h ; invoca a interrupção 10h da BIOS CMP CX, x1 ;compara cx com x1, se chegou ao fim da linha2 JNE Linha2 ;se nao, volta para a linha2 Coluna2: DEC DX ;decrementa dx MOV AL,70h ;Mete na borda a cor vermelha MOV AH,12 ; configura INT10h para plot do pixel INT 10h ; invoca a interrupção 10h da BIOS CMP DX, y1 ;compara dx com y1, se chegou ao fim da coluna2 JNE Coluna2 ;se nao, volta para a coluna2 RET ; sai do procedimento btnBorder endp ;-------------------------------------------------------------------------------------------------------------- ; Rotina para por a label no botão ;-------------------------------------------------------------------------------------------------------------- printLabelButtons proc near push ax ;guarda na pilha o valor de ax push bx ;guarda na pilha o valor de bx push dx ;guarda na pilha o valor de dx MOV AH,2 ;move para ah o valor 2, de forma a mostrar correctamente no sitio as labels MOV BX,0 ;move para bx 0, de forma a mostrar a mudança de linha MOV DH,y ;move para dh o valor de y MOV DL,x ;move para dl o valor de x INT 10h ; invoca a interrupção 10h da BIOS LEA dx,byte ptr [di] ;guarda em dx o endereço de di, de forma a mostrar no ecra a label CALL PrtStr ;chama o procedimento PrtStr pop dx ;puxa o valor de dx da pilha pop bx ;puxa o valor de bx da pilha pop ax ;puxa o valor de ax da pilha ret ;sai do procedimento printLabelButtons endp ;-------------------------------------------------------------------------------------------------------------- ; Rotina para imprimir a label no ecra ;-------------------------------------------------------------------------------------------------------------- PrtStr proc near push ax ;guarda o valor de ax na pilha lea dx, byte ptr [di] ;guarda em dx o endereço de di, de forma a mostrar no ecra a label mov ah,9h ;display de strings, config int21h int 21h ;invoca a interrupção do 21h do dos pop ax ;puxa da pilha o valor de ax ret ;termina o procedimento PrtStr endp ;-------------------------------------------------------------------------------------------------------------- ; Rotina para imprimir a label no ecra ;-------------------------------------------------------------------------------------------------------------- CheckClick proc near push ax ;guarda na pilha o valor de ax push bx ;guarda na pilha o valor de bx push cx ;guarda na pilha o valor de cx push dx ;guarda na pilha o valor de dx ;-------------------vericações dos botõe do rato------------------ mov ax, 05h ;interrupçao do rato MOV BX,0 ;para verificar se o botão do lado esquerdo foi clicado int 33h ;invoca a iterrupção do 33h do dos AND AX,1b ; faz um and, para ver se o bit é 0 ou 1 cmp ax,1b ;verifica se o botão esquerdo do rato foi clicado je Clicked ;se sim salta para a label Clicked ;como não foi clicado entao sai pop dx ;puxa da pilha dx pop cx ;puxa da pilha cx pop bx ;puxa da pilha bx pop ax ;puxa da pilha ax RET ;termina o procedimento ;---------------------------------------------------------------------------- ;ver onde está a clicar Clicked: cmp cx, 468 ;compara cx com 468, que é as cordenadas do x do botao exit,play,about jae Quit2 ;Se sim salta para quit2 jmp noClicked ;senão vai para a label noClicked Quit2: cmp cx, 565 ;compara cx com 565 que é as coordenadas do x botao exit, play about jbe Quit3 ;se sim salta para a label quit3 jmp noClicked ;senao vai para a label noClicked Quit3: cmp dx, 86 ;compara dx com 86 que é as coordenadas do y do botao exit e about jae Quit4 ;se sim salta para quit4 cmp dx,39 ;compara dx com 39 que é coordenadas do y do botao play jae Play1 ;se sim salta para a label play1 jmp noClicked ;senão vai para a label noClicked Quit4: cmp dx, 102 ;compara dx com 102 que é as coordenadas do y do botao exit jbe QuitYes ;se sim salta para a label QuitYes cmp dx, 134 ;Compara dx com 134 que é as coordenadas do y do botao about jae Sobre1 ;se sim salta para a label sobre 1 jmp noClicked QuitYes: mov InfoClick,2 ;move para InfoClick o valor 2 jmp noClicked ;salta para noClicked ;-------------------------------------------------------------------------- ;Botão Jogar Play1: cmp dx, 54 ;compara dx com 54 que é as coordenadas y do botao play jbe PlayNow ;se sim salta para PlayNow jmp noClicked ;se nao salta para noClicked PlayNow: mov InfoClick,2 ;move para InfoClicked o valor 1 jmp noClicked ;salta para noClicked ;--------------------------------------------------------------------------- ;Botão About Sobre1: cmp dx, 150 ;compara dx com 150 que é as coordenadas de y do botao About jbe ViewAbout ;senão sim salta para ViewAbout jmp noClicked ;senão salta para noClicked ViewAbout: mov InfoClick, 3 ;move para InfoClicked o valor 3 jmp noClicked ;salta para a label noClicked ;---------------------------------------------------------------------------- noClicked: pop dx ;puxa da pilha dx pop cx ;puxa da pilha cx pop bx ;puxa da pilha bx pop ax ;puxa da pilha ax ret ;termina o procedimento CheckClick endp ;-------------------------------------------------------------------------------------------------------------- ; Rotina para verificar o clique do botao do about, para voltar ao menu ;-------------------------------------------------------------------------------------------------------------- CheckClick2 proc near push ax ;guarda na pilha ax push bx ;guarda na pilha bx push cx ;guarda na pilha cx push dx ;guarda na pilha dx ;-------------------vericações dos botõe do rato------------------ mov ax, 05h ;interrupçao do rato MOV BX,0 ;para verificar se o botão do lado esquerdo foi clicado int 33h ;invoca a iterrupção do 33h do dos AND AX,1b ; faz um and, para ver se o bit é 0 ou 1 cmp ax,1b ;verifica se o botão esquerdo do rato foi clicado je ClickedA ;se sim salta para a label ClickedA ;como não foi clicado entao sai pop dx ;puxa da pilha dx pop cx ;puxa da pilha cx pop bx ;puxa da pilha bx pop ax ;puxa da pilha ax ret ;termina o procedimento RET ClickedA: cmp cx, 468 ;compara cx com 468, que é as coordenadas x do botão ok jae btnAbout2 ;se sim salta para a label btnAbout2 jmp noClicked2 ;senão salta para a label noClicked2 btnAbout2: cmp cx, 565 ;compara cx com 565, que é as coordenadas x do botão ok jbe btnAbout3 ;se sim salta para a label btnAbout3 jmp noClicked2 ;senão salta para a label noCLicked2 btnAbout3: cmp dx, 86 ;compara dx com 86, que é as coordenadas y do botão ok jae btnAbout4 ;se sim salta para btnAbout4 jmp noClicked2 ;senão salta para a label noClicked2 btnAbout4: cmp dx, 102 ;compara dx com 102, que é as coordenadas de y do botão Ok jbe btnAboutYes ;se sim salta para btnAboutYes jmp noClicked2 ;senão salta para a label noClicked2 btnAboutYes: mov InfoClick,4 ;move para InfoClicked o valor 4 ;---------------------------------------------------------------------------- noClicked2: pop dx ;puxa da pilha dx pop cx ;puxa da pilha cx pop bx ;puxa da pilha bx pop ax ;puxa da pilha ax ret ;termina o procedimento CheckClick2 endp ;-------------------------------------------------------------------------------------------------------------- ; Rotina para limpar o ecra ;-------------------------------------------------------------------------------------------------------------- ClearScreen PROC NEAR MOV AH, 00H ; Esta chamada da INT 10H limpa o ecran INT 10H ;invoca a iterrupção do 10h do dos RET ;termina o procedimento ClearScreen ENDP ;-------------------------------------------------------------------------------------------------------------- ; Rotina para mostrar o ecra About ;-------------------------------------------------------------------------------------------------------------- DrawAbout proc near mov x, 3 ;move para x o valor 3, que é onde inicialmente irá desenhar, ou seja cordenada x mov y, 3 ;move para y o valor 3, que é onde inicialmente irá desenhar, ou seja cordenada y lea di,About0 ;endreço do About0 que tem o texto do about0 CALL printLabelButtons ;chama o procedimento printLabelButtons mov y, 5 ;move para y o valor 5, ou seja a cordenada y=5 lea di,About1 ;endreço do About1 que tem o texto do about1 CALL printLabelButtons ;chama o procedimento printLabelButtons mov y, 6 ;move para y o valor 7, ou seja a cordenada y=7 lea di,About2 ;endreço do About1 que tem o texto do about2 CALL printLabelButtons ;chama o procedimento printLabelButtons mov y, 7 ;move para y o valor 7, ou seja a cordenada y=7 lea di,About3 ;endreço do About1 que tem o texto do about3 CALL printLabelButtons ;chama o procedimento printLabelButtons ret ;termina o procedimento DrawAbout endp ;-------------------------------------------------------------------------------------------------------------- ; Rotina para sair do modo grafico ;-------------------------------------------------------------------------------------------------------------- ReturnToGraphicMode proc near mov ax,03h ;Volta ao modo grafico anterior int 10h ;invoca a iterrupção do 10h do dos ret ;termina o procedimento ReturnToGraphicMode endp ;-------------------------------------------------------------------------------------------------------------- ; Rotina para fechar o ficheiro ;-------------------------------------------------------------------------------------------------------------- CLOSEFIL PROC near PUSH AX ;guarda na pilha o ax PUSH BX ;guarda na pilha o bx MOV AH,3EH ;prepara para fechar o ficheiro MOV BX,FHAND ;indica o file handle INT 21H ;fecha POP BX ;puxa o valor bx da pilha POP AX ;puxa o valor ax da pilha RET ;termina o procedimento CLOSEFIL ENDP MYCODE ENDS END |
0 comentários:
Enviar um comentário