Informática Numaboa - Tutoriais e Programação
Cap. III - Registradores do Microprocessador
Sab 15 Dez 2007 13:46 |
- Detalhes
- Categoria: MASM + RadASM
- Atualização: Segunda, 01 Março 2010 22:07
- Autor: Alan Moreno
- Acessos: 13228
Criando suas próprias funções
1 - Agora criaremos uma função que mostre uma mensagem. Esta função terá um parâmetro para indicar o endereço da etiqueta da mensagem. Dentro da função que vamos criar se encontra a API MessageBox, que será reponsável por mostrar a mensagem.
Para assistir ao vídeo, faça o download de prog004.exe.
Como observamos no vídeo, primeiro declaramos a função que vamos utilizar:
PROC - Esta diretiva serve para definir um procedimento ou chamado que se irá utilizar e sua sintaxe é assim:
Nome_da_Funcao PROC Argumento/s (se tiver um) RET Nome_da_Funcao endp
Se nossa função precisar de um parâmetro, sua sintaxe seria assim:
Nome_da_Funcao PROC Parametro01: Tipo de variável RET Nome_da_Funcao endp
Se nossa função precisar de mais de um parâmetro, é necessário separar com "," (virgulas) cada parâmetro, desta maneira:
Nome_da_Funcao PROC Prmtr01: Tipo de variável, Prmtr02: Tipo de variável, etc. RET Nome_da_Funcao endp
Tipo de variável - Aqui declaramos o comprimento em bytes que se precisa, ou seja: DWORD, WORD, BYTE. Em geral sempre se declara a variável usando o maior comprimento (tamanho) como DWORD.
Nome_da_Funcao - Aqui escrevemos nossa etiqueta para o nome da função. Lembre-se de que esta etiqueta não deve se repetir e que a etiqueta dos parâmetros não deve ser declarada em outra parte do código.
Com esta instrução retornamos do procedimento que chamamos. Também a utilizamos para separar nossos códigos, como no primeiro RET que vem depois da função ExitProcess. O operando Nº Bytes é opcional. Especifica quantos bytes devem retornar.
Outro ponto importante é que, se utilizarmos algumas das variáveis que declaramos nos parâmetros do procedimento da função, como por exemplo MsgT, já não é necessário utilizar addr ou offset. Um exemplo é a variável que foi utilizada no 3º parâmetro da Api MessageBox:
Já criamos nossa função. Se quisermos utilizá-la com a diretiva invoke, ficaria assim - como fizemos no vídeo:
É necessário declarar os protótipos com a diretiva PROTO.
PROTO - Serve para definir os protótipos das funções para que possam ser usadas com invoke. Também informa ao MASM o número de argumentos e o tipo de variável que deve ser usada no momento de se chamar uma função. Sua sintaxe é:
PROTO é semelhante à diretiva PROC porque ambas trabalham em conjunto. A diferença está na declaração dos tipos de variáveis. O número de variáveis que declaramos depende dos parâmetros da função, por exemplo:
É necessário declarar os protótipos com a diretiva PROTO.
PROTO - Serve para definir os protótipos das funções para que possam ser usadas com invoke. Também informa ao MASM o número de argumentos e o tipo de variável que deve ser usada no momento de se chamar uma função. Sua sintaxe é:
PROTO é semelhante à diretiva PROC porque ambas trabalham em conjunto. A diferença está na declaração dos tipos de variáveis. O número de variáveis que declaramos depende dos parâmetros da função, por exemplo:
só contém um parâmetro e o definimos desta maneira:
Se nossa função tiver mais de um parâmetro, declara-se as variáveis separando-as com "," (virgulas). Por exemplo, a função MessageBoxA, que está no arquivo user32.inc, quando utilizada precisa de 4 parâmetros:
Nota - Não se esqueça de que se deve respeitar as maiúsculas e minúsculas quando nos referirmos a qualquer variável ou um nome de função porque, se não o fizermos, na hora de compilar o masm32 nos devolverá erros.