A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Cap. II - Nossa primeira aplicação

Sex

14

Dez

2007


07:52

(4 votos, média 5.00 de 5) 


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_OKMB_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:

invoke FUNÇÃO, Argumentos

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:
addroffset
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:

Abrir .inc
Fig. 1

Depois se abre uma nova janelinha no RadAsm mostrando o seguinte:

user32
Fig. 2

Buscaremos nossa API MessageBox pressionando as teclas CTRL + F e escrevemos a função que vamos buscar, como mostra a seguinte imagem:

função
Fig. 3

Em seguida damos um clique no botão hallar/Buscar e encontramos o seguinte:

messagebox
Fig. 4

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

Informações adicionais