.ALLOCSTACK

.ALLOCSTACK menghasilkan UWOP_ALLOC_SMALL atau UWOP_ALLOC_LARGE dengan ukuran yang ditentukan untuk offset saat ini dalam prolog.

Sintaks

.ALLOCSTACK Ukuran

Keterangan

Microsoft Assembler (MASM) memilih pengodean yang paling efisien untuk ukuran tertentu.

.ALLOCSTACK memungkinkan ml64.exe pengguna untuk menentukan bagaimana fungsi bingkai melepas lelah dan hanya diizinkan dalam prolog, yang meluas dari deklarasi PROCFRAME ke . Direktif ENDPROLOG.

  • Arahan ini menghasilkan metadata unwind (.xdata dan .pdata bagian) tetapi tidak menghasilkan kode yang dapat dieksekusi.
  • Awali .ALLOCSTACK dengan instruksi yang benar-benar mengimplementasikan tindakan yang akan dilepaskan. Bungkus arahan unwind dan kode yang dimaksudkan untuk melepas lelah dalam makro untuk memastikan perjanjian.

Operand ukuran harus kelipatan 8.

Rekan epilog adalah . FREESTACK.

Contoh: tentukan handler unwind versi 3 unwind/exception

Contoh berikut menunjukkan cara menentukan handler unwind/exception:

; 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

Melepas penat perilaku Versi 3

Important

Dukungan Unwind Versi 3 bersifat eksperimental dan dapat berubah. Aktifkan dengan menggunakan ml64.exe /unwindv3.

.ALLOCSTACK WOD_ALLOC_SMALLmenghasilkan entri kode unwind , , WOD_ALLOC_LARGEatau WOD_ALLOC_HUGE Unwind Versi 3 dengan ukuran yang ditentukan untuk offset saat ini dalam prolog.

.ALLOCSTACK harus muncul sebelum instruksi yang sub rsp, N dijelaskannya. Persyaratan ini adalah kebalikan dari Versi 1, di mana arahan mengikuti instruksi.

MASM memancarkan salah satu dari tiga kode unwind tergantung pada ukuran alokasi:

Lepaskan kode Keadaan
WOD_ALLOC_SMALL ukuran ≤ 128 byte
WOD_ALLOC_LARGE ukuran ≤ 32 KB
WOD_ALLOC_HUGE Ukuran> 32 KB

Versi 1 hanya UWOP_ALLOC_SMALL menghasilkan atau UWOP_ALLOC_LARGE. Versi 3 menambahkan varian ketiga, WOD_ALLOC_HUGE, untuk alokasi yang lebih besar dari 32 KB.

Nota

Di Unwind Versi 1, arahan muncul setelah instruksi yang sesuai. Di Unwind Versi 3, arahan muncul sebelum instruksi.

Contoh untuk 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

Lihat juga

x64 Unwind Versi 3 (eksperimental)
Referensi Arahan
Tata Bahasa MASM BNF
MASM untuk x64 (ml64.exe)