. ALLOCSTACK

.ALLOCSTACK gera um UWOP_ALLOC_SMALL ou um UWOP_ALLOC_LARGE com o tamanho especificado para o deslocamento atual no prólogo.

Sintaxe

.ALLOCSTACK Tamanho

Remarks

O Microsoft Assembler (MASM) escolhe a codificação mais eficiente para um determinado tamanho.

.ALLOCSTACK permite ml64.exe aos utilizadores especificar como uma função de frame se desenrola e só é permitido dentro do prólogo, que se estende da declaração PROCFRAME até ao . Diretiva ENDPROLOG .

  • Estas diretivas geram metadados de desmantelamento (.xdata e .pdata secções), mas não produzem código executável.
  • Comece .ALLOCSTACK com as instruções que realmente implementam as ações a desenrolar. Envolve tanto as diretivas de desmantelamento como o código que devem desfazer numa macro para garantir o acordo.

O operando de tamanho deve ser um múltiplo de 8.

A contraparte do epílogo é . FREESTACK.

Exemplo: especificar um unwind/traiteur de exceções de unwind versão 3

O exemplo seguinte mostra como especificar um tratador de desenrolar/exceção:

; ml64 ex3.asm /link /entry:Example3 /SUBSYSTEM:Console
text SEGMENT
PUBLIC Example3
PUBLIC Example3_UW
Example3_UW PROC
   ; exception/unwind handler body

   ret 0

Example3_UW ENDP

Example3 PROC FRAME : Example3_UW

   sub rsp, 16
.allocstack 16

.endprolog

   ; function body
    add rsp, 16
   ret 0

Example3 ENDP
text ENDS
END

Comportamento do Unwind Versão 3

Importante

O suporte ao Unwind Versão 3 é experimental e está sujeito a alterações. Ative-o usando ml64.exe /unwindv3.

.ALLOCSTACKgera uma WOD_ALLOC_SMALLentrada do código de WOD_ALLOC_LARGEWOD_ALLOC_HUGE desbobinamento da Versão 3 com o tamanho especificado para o deslocamento atual no prólogo.

.ALLOCSTACK deve aparecer antes da sub rsp, N instrução que descreve. Este requisito é o oposto da Versão 1, onde a diretiva segue a instrução.

O MASM emite um de três códigos de desmantelamento, dependendo do tamanho da alocação:

Código de desmontagem Condition
WOD_ALLOC_SMALL Tamanho ≤ 128 bytes
WOD_ALLOC_LARGE Tamanho ≤ 32 KB
WOD_ALLOC_HUGE Tamanho> 32 KB

A versão 1 gera apenas UWOP_ALLOC_SMALL ou UWOP_ALLOC_LARGE. A versão 3 adiciona uma terceira variante, WOD_ALLOC_HUGE, para alocações superiores a 32 KB.

Note

No Unwind Versão 1, a diretiva aparece após a instrução correspondente. Na Versão 3 de Desenrolar, a diretiva aparece antes da instrução.

Exemplo para unwindv3

; ml64 ex3.asm /unwindv3 /link /entry:Example3 /SUBSYSTEM:Console
text SEGMENT
PUBLIC Example3
PUBLIC Example3_UW
Example3_UW PROC
   ; exception/unwind handler body

   ret 0

Example3_UW ENDP

Example3 PROC FRAME : Example3_UW

.allocstack 16
   sub rsp, 16

.endprolog

   ; function body
    add rsp, 16
   ret 0

Example3 ENDP
text ENDS
END

Ver também

x64 Unwind Versão 3 (experimental)
Referência de Diretivas
MASM BNF Gramática
MASM para x64 (ml64.exe)