.PUSHREG

UWOP_PUSH_NONVOL Menghasilkan entri kode unwind untuk nomor register yang ditentukan menggunakan offset saat ini dalam prolog.

Sintaks

. Register PUSHREG

register mungkin salah satu dari:
RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15

Unwind Versi 3 memperluas dukungan register untuk menyertakan R16–R31. register mungkin salah satu dari:
RAX, RCX, RDX, RBX, RDI, RSI, RBP, R8, R9, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20, R21, R22, R23, R24, R25, R26, R27, R28, R29, R30, R31

Keterangan

Gunakan .PUSHREG dengan ml64.exe untuk menentukan bagaimana fungsi bingkai melepas lelah. Anda hanya dapat menggunakan .PUSHREG 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 .PUSHREG dengan instruksi yang benar-benar mengimplementasikan tindakan yang akan dilepaskan. Untuk memastikan perjanjian, bungkus arahan unwind dan kode yang dimaksudkan untuk melepas lelah dalam makro.

Kode

Sampel berikut menunjukkan cara mendorong register nonvolatile.

; ml64 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
   push r10
.pushreg r10
   push r15
.pushreg r15
   push rbx
.pushreg rbx
   push rsi
.pushreg rsi
.endprolog
   ; rest of function ...
   ret
Example1 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.

Note

Di Unwind Versi 1, arahan muncul setelah instruksi yang sesuai. Di Unwind Versi 3, arahan muncul sebelum instruksi. Di Unwind Versi 3, .PUSHREG menghasilkan entri kode unwind WOD_PUSH dan harus muncul sebelum instruksi yang push reg dijelaskannya. Persyaratan ini adalah kebalikan dari Versi 1, di mana arahan mengikuti instruksi.

Contoh untuk unwindv3

; ml64 /unwindv3 ex1.asm /link /entry:Example1 /SUBSYSTEM:CONSOLE
_text SEGMENT
Example1 PROC FRAME
   .pushreg r10
   push r10
   .pushreg r15
   push r15
   .pushreg rbx
   push rbx
   .pushreg rsi
   push rsi
.endprolog
   ; rest of function ...
   ret
Example1 ENDP
_text ENDS
END

Rekan epilog adalah . POPREG.

Lihat juga

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