oicìliS ©
Assembly Intermediário TEXTOS ACESSÓRIOS
Notice: Undefined variable: subtitulo in /home/numaboa.com.br/public_html/informatica/oiciliS/assembler/head.php on line 10
(ver 1.2 de 02.08.03)
|
Quando se escreve código para Windows, é comum manusear dados em bloco para alguns requisitos de codificação. O método normal é usar uma estrutura para agrupar dados de tal forma que possa ser endereçada como uma unidade.
Uma estrutura é constituída por membros que têm um tamanho de dados específico. Na estrutura RECT, muito utilizada, você tem quatro membros de tamanho DWORD.
RECT STRUCT
left DWORD ?
top DWORD ?
right DWORD ?
bottom DWORD ?
RECT ENDS
A notação para cada membro é nome do membro, tamanho do dado e especificador. Na maior parte das vezes o especificador é o ponto de interrogação (?), significando que o membro não foi inicializado com um valor.
A estrutura é escrita na memória como uma sequência de membros. No caso da estrutura RECT, ela é escrita na memória como quatro membros sequenciais de tamanho DWORD. Os membros de uma estrutura podem ser preenchidos de várias maneiras diferentes, dependendo da maneira como a estrutura foi originalmente alocada.
Se ela tiver sido alocada na seção .DATA, eles podem ser inicializados com valores predefinidos. Se tiver sido alocada na pilha, como uma variável local de um procedimento, os valores precisam ser inseridos nesta estrutura através de codificação.
LOCAL Rct :RECT
; código
mov Rct.left, 1
mov Rct.top, 2
mov Rct.right, 3
mov Rct.bottom, 4
É preciso salientar que um membro de estrutura é um operando de memória de modo que você não pode transferir diretamente outro operando de memória para ele. Você precisa usar um registrador para copiá-lo ou usar os mneumônicos de pilha push/pop.
Numa chamada com a diretiva invoke você pode se referir à estrutura preenchida como uma unidade com ADDR Rct. Se uma chamada de API necessitar do endereço de uma estrutura, você deve preencher a estrutura com os valores requeridos e depois chamar a API
invoke chamadaAPI,parametro1,parametro2,ADDR Rct
Se você escrever um procedimento para o qual você queira passar os valores de uma estrutura, você pode passar esta estrutura usando os tipos de dados da estrutura no procedimento.
MeuProc proc par1:DWORD,par2:DWORD,MeuRect:RECT
mov eax, MeuRect.left ; copiar o primeiro membro para EAX
No procedimento que recebe RECT como parâmetro, cada um dos membros pode ser acessado através do seu nome. Você chama o procedimento da seguinte forma
invoke MeuProc,par1, par2, Rct
|