Carrega uma imagem


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