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
Explicando o vídeo Prog001.exe
No programa que desenvolvemos foram utilizadas duas funções: MessageBox e ExitProcess.
Se abrirmos nossa documentação das APIs do Windows (Win32 programmer's Reference) e buscarmos a função MessageBox, encontraremos o seguinte:
int MessageBox( HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType );
- hWnd - Este parâmetro serve para identificar o manipulador da janela mãe. No nosso caso colocamos NULL ou "0" porque ela não tem um manipulador (handle).
- lpText - Aqui colocamos o endereço onde se encontra a nossa mensagem.
- lpCaption - Este parâmetro funciona como a lpText, a diferença é que este é o título da janela com a mensagem.
- uType - Este parâmetro é muito útil no momento de criar nossa janela - serve para personalizar a mensagem. Podemos especificar que tipo de botões desejamos usar e também o ícone. Por exemplo, no nosso programa foram usadas as seguintes constantes:
Botões Ícone Estas constantes estão declaradas no arquivo window.inc MB_OK MB_ICONINFORMATION
Para saber mais sobre esta função sugiro que você revise a documentação que mencionei anteriormente.
Em todo programa que escrevemos no MASM32 deve-se colocar a seguinte função:
VOID ExitProcess( UINT uExitCode );
Com esta função encerramos o programa. No parâmetro uExitCode se especifica o código de saída, no nosso caso foi usado "0".
invoke - O MASM32 também tem uma sintaxe de alto nível que facilita a chamada de funções de forma correta e segura na hora de compilar - o MASM32 comprovará se os parâmetros das funções são adequados ou não. É usado desta maneira:
FUNÇÃO é onde escrevemos o nome da função que será usada.
Argumentos são os parâmetros das funções e devem ser separados por virgulas ",".
Operadores no arquivo prog001.asm
- addr - Este operador serve para passar o endereço das nossas etiquetas para a função, por exemplo as etiquetas MsgTexto e MsgTitulo.
- offset - É semelhante ao addr, mas com algumas diferenças como mostra o seguinte quadro:
addr | offset |
Não pode ser usado com instruções mnemônicas. | Se utiliza com instruções mnemônicas. |
Trabalha apenas com referências que estão adiante no código. | Trabalha com referências que estão atrás ou adiante no código. |
Pode operar com estruturas. | Não pode operar com estruturas. |
Operadores no arquivo prog001.inc
O Windows tem uma grande quantidade de APIs no seu sistema que são usadas por todos os programadores para Windows. Estas APIs ou Funções são encontradas nas bibliotecas de vínculo dinâmico (dynamic-linked libraries ou "DLL"), como por exemplo: user32.DLL, kernel32.DLL, shell32.DLL. Para podermos usar estas funções ou APIs em nossos programas, precisamos adicionar 2 arquivos para cada biblioteca:
- user32.inc e kernel.inc - Nestes arquivos encontramos todas as funções declaradas que pertencem à user32.dll e à kernel32.dll respectivamente. Isto nos poupa tempo no momento de programar porque não precisamos declarar as funções que iremos usar. Vamos observar seu conteúdo para ver o que contêm. Para isto devemos abrir os arquivos .inc
Para abrir o arquivo, selecionamos o nome do arquivo .inc que desejamos abrir e pressionamos o botão direito do Mouse. Abre-se um menu onde clicamos na opção Abrir, como mostra a seguinte imagem:
Depois se abre uma nova janelinha no RadAsm mostrando o seguinte:
Buscaremos nossa API MessageBox pressionando as teclas CTRL + F e escrevemos a função que vamos buscar, como mostra a seguinte imagem:
Em seguida damos um clique no botão hallar/Buscar e encontramos o seguinte:
Já encontramos nossa função e comprovamos que esta API está declarada em user32.inc. Se buscarmos a outra API que utilizamos (ExitProcess), não a encontraremos porque esta API está em kernel.inc.
- user32.lib e kernel.lib - Para que nosso programa possa se ligar com as bibliotecas de vínculo dinâmico do Windows, são necessárias informações como o nome da função e o endereço onde ela se encontra para que, no momento em que for executado, nosso programa carregue a biblioteca imediatamente. A informação mencionada se encontra nos arquivos .lib