Udostępnij za pośrednictwem


Pierwotne operacje Pseudo

Ten temat zawiera listę operacji pseudo.

Uwagi

Pseudo operacji

Opis

RAMKA PROC [: ehandler]

Przyczyny MASM do generowania funkcję tabeli wpisu w .pdata i odkręcanie informacje zawarte w .xdata dla funkcji w strukturze obsługi wyjątków odkręcanie zachowanie.Jeżeli istnieje ehandler, to proc wpisuje .xdata jako określoną funkcję obsługi języka.

Gdy używany jest atrybut ramki, to musi następować.Dyrektywa ENDPROLOG.Jeśli funkcja jest funkcją liścia (jak określono w Typy funkcji) atrybut ramki jest zbędne, ponieważ są pozostałą część tych pseudo-operations.

.PUSHREG reg

Generuje UWOP_PUSH_NONVOL odkręcanie kodu dla wpis i numer rejestrowy określony przy użyciu bieżących przesunięcie w prologu.

Ten powinien być używany tylko z rejestry całkowitoliczbowe nieulotna.Dla wypycha lotnych rejestrów, należy użyć.ALLOCSTACK 8, zamiast

.SETFRAME reg, przesunięcie

Wypełnienia w ramce zarejestrować pola i przesunięcie w informacji odkręcanie, przy użyciu określonego rejestru i przesunięcie.Przesunięcie musi być wielokrotnością 16 i mniejsza lub równa 240.Niniejsza dyrektywa generuje również nazwę kodu odkręcanie UWOP_SET_FPREG dla określonego rejestru, przy użyciu bieżący przesunięcie prologu.

.Rozmiar ALLOCSTACK

Generuje UWOP_ALLOC_SMALL lub UWOP_ALLOC_LARGE o określonym rozmiarze bieżący przesunięcie w prologu.

Operand rozmiar musi być wielokrotnością liczby 8.

.Przesunięcie SAVEREG reg

Generuje UWOP_SAVE_NONVOL lub nazwę kodu odkręcanie UWOP_SAVE_NONVOL_FAR dla określonego rejestru i przesunięcia przy użyciu bieżący przesunięcie prologu.MASM wybierze najbardziej skuteczny sposób kodowania.

Przesunięcie muszą być pozytywne i wielokrotnością liczby 8.Przesunięcie jest względna w stosunku do podstawy ramki procedury, która jest ogólnie, w RSP, lub, jeśli za pomocą wskaźnika ramki, wskaźnika nieskalowanej klatki.

.SAVEXMM128 reg, przesunięcie

Generuje UWOP_SAVE_XMM128 lub nazwę kodu odkręcanie UWOP_SAVE_XMM128_FAR dla określonego rejestru XMM i przesunięcia przy użyciu bieżący przesunięcie prologu.MASM wybierze najbardziej skuteczny sposób kodowania.

Przesunięcie musi być pozytywne i wielokrotnością 16.Przesunięcie jest względna w stosunku do podstawy ramki procedury, która jest ogólnie, w RSP, lub, jeśli za pomocą wskaźnika ramki, wskaźnika nieskalowanej klatki.

.PUSHFRAME [kod]

Generuje nazwę kodu odkręcanie UWOP_PUSH_MACHFRAME.Jeśli określono opcjonalny kod, zapis kodu odkręcanie podaje modyfikator 1.W przeciwnym razie modyfikator jest 0.

.ENDPROLOG

Sygnalizuje koniec deklaracje prologu.Musi nastąpić w pierwszych 255 bajtów funkcji.

Oto prolog funkcja próbki z właściwego wykorzystywania większość rozkazów:

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

Zobacz też

Informacje

Pomocnicy operacji unwind dla MASM