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