TEST (instrukcja x86)
0
W asemblerze x86 instrukcja TEST
wykonuje bitową operację AND na dwóch operandach . Flagi SF
, ZF
, PF są modyfikowane
, podczas gdy wynik AND jest odrzucany. Flagi OF
i CF
są ustawione na , podczas gdy flaga AF
jest niezdefiniowana. Istnieje 9 różnych opkodów dla instrukcji TEST w zależności od typu i rozmiaru operandów . Może porównywać wartości 8-bitowe, 16-bitowe, 32-bitowe lub 64-bitowe. Może również porównywać rejestry , wartości bezpośrednie i pośrednie wartości rejestrów .
TESTUJ warianty kodu operacji
0
0
0
Operacja TEST czyści flagi CF
i OF
do zera. SF jest ustawiany na najbardziej znaczący bit wyniku AND .
Jeśli wynikiem jest , ZF
jest ustawione na 1
, w przeciwnym razie na . Flaga parzystości jest ustawiona na bitowy XNOR najmniej znaczącego bajtu wyniku, 1
, jeśli liczba jedynek w tym bajcie jest parzysta, w przeciwnym razie. Wartość AF
jest niezdefiniowana.
Przykłady
0 ; Warunkowy test skoku cl , cl ; ustaw ZF na 1 jeśli cl == 0 jz 0x804f430 ; skok jeśli ZF == 1 ; Skok warunkowy z testem NOT cl , cl ; ustaw ZF na 1 jeśli cl == 0 jnz 0x804f430 ; skok jeśli ZF == 0 ; lub przetestuj eax , eax ; ustaw SF na 1 jeśli eax < 0 (ujemny) błąd js ; skok, jeśli SF == 1 ;zwykły test aplikacji al , $ F
; ustaw ZF, jeśli "al AND $0f = 0" (tutaj: test wyrównania adresu dla 16b) jnz @ miejsce docelowe ; skacz, jeśli eax NIE JEST „MODULO 16=0”