Informática Numaboa - Tutoriais e Programação
Cap. II - Nossa primeira aplicação
Sex 14 Dez 2007 07:52 |
- Detalhes
- Categoria: MASM + RadASM
- Atualização: Segunda, 01 Março 2010 20:00
- Autor: Alan Moreno
- Acessos: 12866
Exercício com dados não inicializados
No exercício anterior foram utilizados dados inicializados, agora falta criar um exemplo utilizando dados não inicializados:
Para assistir ao vídeo, faça o download de prog001a.exe.
No exemplo Prog001a foi usada a função GetModuleFileName que é declarada da seguinte maneira:
Biblioteca kernel32.lib GetModuleFileName,NULL,addr Buffer,225
Esta função extrai o diretório mais o nome da aplicação e o devolve na variável Buffer. Se Buffer já estiver ocupado, ele será modificado com os novos caracteres. O valor 225 significa o comprimento máximo de caracteres que serão devolvidos.
Buffer cumpre a função de armazenador de dados e é onde será armazenada a cadeia de texto devolvida pela função que foi utilizada.
Um programa mais complexo
Façamos nosso programa maior e um pouco mais complexo como mostrado no exemplo a seguir. Para isso utilizaremos a biblioteca masm32.lib.
O Masm32 possui sua própria biblioteca onde podemos encontrar muitas funções úteis, as quais muitas vezes precisamos e não levamos em conta. No seguinte vídeo utilizaremos algumas destas funções. Para isto vamos criar um programa que mostra o diretório da aplicação em uma mensagem e uma segunda mensagem que mostra o nome da aplicação que se está sendo executada:
Para assistir ao vídeo, faça o download de prog002.exe.
Funções utilizadas no vídeo prog002.exe
Biblioteca masm32.lib GetAppPath,addr Buffer
Esta função devolve o diretório da aplicação e o coloca na variável que definimos, neste caso Buffer, que ficará armazenado até que outra função substitua os dados que esta variável contém.
Biblioteca masm32.lib NameFromPath,addr Buffer,addr NomeAplic
Como sabemos, Buffer contém o nome mais o diretório da aplicação porque já foi utilizado pela API GetModuleFileName. A função NameFromPath só extrairá o nome e o armazenará na variável NomeAplic.
- Operador dup - significa duplicação. Se utiliza para alocar espaços na memória e sua sintaxe é a seguinte:
Contador dup (valor inicial)
Em contador escrevemos o tamanho que vamos duplicar. O valor inicial é escrito dentro dos parênteses, onde o sinal ? significa que o valor é indefinido.
No nosso código foi declarado da seguinte maneira:
Etiqueta | Variável | Contador | DUP | Valor Inicial |
Buffer | db | 225 | dup | (?) |
NombreApp | db | 50 | dup | (?) |
E significa o seguinte: Na variável Buffer foram separados 225 bytes na memória e na variável NombreApp foram separados 50 bytes na memória.
Recomendo que, se for utilizada uma variável para armazenar todo tipo de cadeias de texto devolvidas pelas funções, as variáveis declaradas tenham um espaço correspondente ao que se irá obter.
Você deve estar se perguntando porque se faz isto. É que quando você utiliza diversas variáveis no seu código, se não for alocado um espaço apropriado na memória para a dita variável, a cadeia de texto devolvida muitas vezes invade as outras variáveis e isto pode ocasionar problemas.