As diretivas na Linguagem Assembly nos remete a um universo mais humano, as diretivas deixam o códígo mais legível, e mais distante de como a CPU entende, porém no momento do compilador transformar nosso código em binário (codigo que a CPU entenda), o passo é extremamente menor que uma linguagem de alto nível.
Pseudo código
Uma das diretivas mais interesantes é a PROC, ela define inicio e fim de uma rotina como.
rotina1 PROC
……
……
……
RET
rotina1 ENDP
O PROC é uma diretiva que define inicio e fim de uma rotina, você jamais a vera em um código assembly rodando na CPU
Perceba que o PROC tem o RET que é RETORNO de rotina, depois de compilado, tudo isto será convertido em endereços, , a linha “rotina1 PROC” será convertida em um número.
INVOKE (o CALL)
Aprendemos como fazer CALL para um endereço, pode até ser um CALL paraum “label” do tipo “rotina1: ” que será substituido na compilação por um número , que é um endereço; agora veremos o INVOKE , ele é uma especie de CALL em forma de diretiva, sim ! o Invoke é um CALL mais fácil de usar, que será substituido por CALL na compilação, porque o INVOKE é uma diretiva, e não entendida pelo processador, vamos a um exemplo de como usar INVOKE e PROC.
.386
.model flat, stdcall
option casemap :none ; case sensitiveinclude \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.incincludelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.librotina1 PROTO: DWORD, :DWORD
.code
titulo db “Titulo janela”, 0
mensagem db “Ola mundo das Diretivas PROC INVOKE”, 0inicio:
invoke rotina1, offset mensagem, offset titulopush 0
call ExitProcessrotina1 proc _mensagem:DWORD, _titulo:DWORD
push MB_OK
push _titulo
push _mensagem
push 0
call MessageBox
RET
rotina1 endpend inicio
Perceba 2 diretivas fundamentais: O INVOKE que chama o PROC lá abaixo, ele chama a rotina1 que é um PROC, veja que o invoke tem 3 nomes a sua frente:
NOME DA ROTINA, ENDEREÇO DO TITULO, ENDEREÇO DA MENSAGEM
O invoke vai achamar a rotina, levando a ela 2 endereços, do título e da mensagem , então a rotina1 obtendo esta informação, exibe uma janela.
Compile este programa com o MASM32, usando o bat compile.bat e faça modificações para praticar:
compile invoke-proc
invoke-proc.exe
Download rotina compile.bat e codigo invoke-proc.asm (requer instalação de MASM32 em c:\masm32 )