.ALLOCSTACK

.ALLOCSTACK genera un UWOP_ALLOC_SMALL o un UWOP_ALLOC_LARGE con le dimensioni specificate per l'offset corrente nel prologo.

Sintassi

.ALLOCSTACK Dimensione

Osservazioni:

Microsoft Assembler (MASM) sceglie la codifica più efficiente per una determinata dimensione.

.ALLOCSTACK consente agli utenti di ml64.exe specificare il modo in cui una funzione frame si rimuove ed è consentita solo all'interno del prologo, che si estende dalla dichiarazione PROCFRAMEall'oggetto . Direttiva ENDPROLOG .

  • Queste direttive generano metadati di rimozione (.xdata e .pdata sezioni) ma non producono codice eseguibile.
  • Precedere .ALLOCSTACK le istruzioni che implementano effettivamente le azioni da rimuovere. Eseguire il wrapping di entrambe le direttive di rimozione e il codice che devono rimuovere in una macro per garantire il contratto.

L'operando di dimensioni deve essere un multiplo di 8.

La controparte dell'epilogo è . FREESTACK.

Esempio: specificare un gestore di rimozione versione 3/eccezione

L'esempio seguente illustra come specificare un gestore di rimozione/eccezione:

; 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 di rimozione versione 3

Importante

Il supporto della versione 3 della rimozione è sperimentale ed è soggetto a modifiche. Abilitarlo usando ml64.exe /unwindv3.

.ALLOCSTACK genera una WOD_ALLOC_SMALLvoce di codice di rimozione , WOD_ALLOC_LARGEo WOD_ALLOC_HUGE di rimozione versione 3 con le dimensioni specificate per l'offset corrente nel prologo.

.ALLOCSTACK deve essere visualizzato prima dell'istruzione sub rsp, N descritta. Questo requisito è l'opposto della versione 1, in cui la direttiva segue l'istruzione .

MASM genera uno dei tre codici di rimozione a seconda delle dimensioni di allocazione:

Codice di rimozione Condition
WOD_ALLOC_SMALL dimensioni ≤ 128 byte
WOD_ALLOC_LARGE dimensioni ≤ 32 KB
WOD_ALLOC_HUGE Dimensione> 32 KB

La versione 1 genera solo UWOP_ALLOC_SMALL o UWOP_ALLOC_LARGE. La versione 3 aggiunge una terza variante, WOD_ALLOC_HUGE, per le allocazioni superiori a 32 KB.

Note

In Rimozione versione 1 la direttiva viene visualizzata dopo l'istruzione corrispondente. In Rimozione versione 3 la direttiva viene visualizzata prima dell'istruzione.

Esempio di rimozionev3

; 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

Vedi anche

Versione di rimozione x64 3 (sperimentale)
Riferimento a direttive
Grammatica BNF MASM
MASM per x64 (ml64.exe)