Aracılığıyla paylaş


Ham Sanal İşlemler

Bu konu sanal işlemleri listeler.

Notlar

Sanal işlemler

Tanımlama

PROC FRAME [:ehandler]

MASM'in .pdata'da işlev tablo girdisi oluşturmasına neden olur ve işlevin yapılandırılmış özel durum işleme bırakma davranışı için .xdata'daki bilgileri bırakır.Eğer ehandler varsa, .xdata'daki bu proc dile özel işleyici olarak girilmiştir.

FRAME özniteliği kullanıldığında, .ENDPROLOG yönergesi ile devam edilmelidir.Eğer işlev bir yaprak işleviyse (İşlev Türleri'da tanımlandığı gibi) bu sanal işlemlerin kalanı gibi FRAME özniteliği de gereksizdir.

.PUSHREG yazmaç

Başlangıçtaki geçerli sapmayı kullanarak belirtilen yazmaç sayısı için UWOP_PUSH_NONVOL bırakma kod girdisi oluşturur.

Bu sadece kalıcı tamsayı yazmaçları ile kullanılmalıdır.Geçici yazmaçlara koymak için, onun yerine .ALLOCSTACK 8'i kullanın.

.SETFRAME yazmaç, sapma

Çerçeve yazmaç alanını ve bırakma bilgisindeki sapmayı, belirtilen yazmacı ve sapmayı kullanarak doldurur.Sapma 16'nın tam katı olmalı ve 240'tan küçük veya eşit olmalı.Bu yönerge ayrıca geçerli başlangıç sapmasını kullanarak belirtilen yazmaç için UWOP_SET_FPREG bırakma kod girdisi oluşturur.

.ALLOCSTACK boyut

Girişteki geçerli sapma için belirtilen boyutla UWOP_ALLOC_SMALL veya UWOP_ALLOC_LARGE oluşturur.

Boyut işleneni 8'in tam katı olmalıdır.

.SAVEREG yazmaç, sapma

Geçerli başlangıç sapmasını kullanarak belirtilen yazmaç ve sapma için ya UWOP_SAVE_NONVOL ya da UWOP_SAVE_NONVOL_FAR bırakma kod girdisi oluşturur.MASM en verimli kodlamayı seçecektir.

Sapma pozitif ve 8'in tam katı olmalıdır.Sapma yordam çerçevesinin (genellikle RSP'de olan ya da çerçeve işaretçisi kullanıyorsa ölçeklendirilmemiş çerçeve işaretçisi olan) tabanına göredir.

.SAVEXMM128 yazmaç, sapma

Geçerli başlangıç sapmasını kullanarak belirtilen XMM yazmaç ve sapma için ya UWOP_SAVE_XMM128 ya da UWOP_SAVE_XMM128_FAR bırakma kod girdisi oluşturur.MASM en verimli kodlamayı seçecektir.

Sapma pozitif ve 16'nın tam katı olmalıdır.Sapma yordam çerçevesinin (genellikle RSP'de olan ya da çerçeve işaretçisi kullanıyorsa ölçeklendirilmemiş çerçeve işaretçisi olan) tabanına göredir.

.PUSHFRAME [kod]

UWOP_PUSH_MACHFRAME bırakma kod girdisi oluşturur.Eğer isteğe bağlı kod belirtilirse, bırakma koduna 1 değiştiricisi verilir.Aksi takdirde değiştirici 0'dır.

.ENDPROLOG

Giriş bildirimlerinin sonunu gösterir.İşlevin ilk 255 baytında bulunmalıdır.

Aşağıda çoğu işlem kodlarının uygun kullanımıyla birlikte örnek işlev girişi vardır:

sample PROC FRAME   
   db      048h; emit a REX prefix, to enable hot-patching
push rbp
.pushreg rbp
sub rsp, 040h
.allocstack 040h   
lea rbp, [rsp+020h]
.setframe rbp, 020h
movdqa [rbp], xmm7
.savexmm128 xmm7, 020h;the offset is from the base of the frame
;not the scaled offset of the frame
mov [rbp+018h], rsi
.savereg rsi, 038h
mov [rsp+010h], rdi
.savereg rdi, 010h; you can still use RSP as the base of the frame
; or any other register you choose
.endprolog

; you can modify the stack pointer outside of the prologue (similar to alloca)
; because we have a frame pointer.
; if we didn’t have a frame pointer, this would be illegal
; if we didn’t make this modification,
; there would be no need for a frame pointer

sub rsp, 060h

; we can unwind from the following AV because of the frame pointer

mov rax, 0
mov rax, [rax] ; AV!

; restore the registers that weren’t saved with a push
; this isn’t part of the official epilog, as described in section 2.5

movdqa xmm7, [rbp]
mov rsi, [rbp+018h]
mov rdi, [rbp-010h]

; Here’s the official epilog

lea rsp, [rbp-020h]
pop rbp
ret
sample ENDP

Ayrıca bkz.

Başvuru

MASM için Yardımcıları Bırakma