ТЕСТ (инструкция x86)
Эта статья нуждается в дополнительных цитатах для проверки . ( март 2023 г. ) |
![]() | Тема этой статьи Википедии может не соответствовать общему правилу по известности . ( март 2024 г. ) |
На языке ассемблера x86 TEST
Инструкция выполняет побитовое И над двумя операндами . Флаги SF
, ZF
, PF
изменяются, а результат AND отбрасывается. OF
и CF
флаги установлены на 0
, пока AF
флаг не определен. Для инструкции TEST существует 9 различных кодов операций в зависимости от типа и размера операндов . Он может сравнивать 8-битные, 16-битные, 32-битные или 64-битные значения. Он также может сравнивать регистры , непосредственные значения и регистрировать косвенные значения. [ 1 ]
Варианты кода операции TEST
[ редактировать ]Операция TEST очищает флаги CF
и OF
до нуля. SF
устанавливается на самый старший бит результата AND . Если результат 0
, ZF
установлено на 1
, в противном случае установлено значение 0
. Флаг четности устанавливается на побитовое исключающее ИЛИ наименее значимого байта результата. 1
если число единиц в этом байте четное, 0
в противном случае. Стоимость AF
является неопределенным.
Примеры
[ редактировать ]; Conditional Jump
test cl,cl ; set ZF to 1 if cl == 0
jz 0x8004f430 ; jump if ZF == 1
; Conditional Jump with NOT
test cl, cl ; set ZF to 1 if cl == 0
jnz 0x8004f430 ; jump if ZF == 0
; or
test eax, eax ; set SF to 1 if eax < 0 (negative)
js error ; jump if SF == 1
; regular application
test al, $0F ; set ZF if "al AND $0f = 0" (here: address-align test for 16b)
jnz @destination ; jump if eax IS NOT "MODULO 16=0"
Ссылки
[ редактировать ]- ^ «Руководство разработчика программного обеспечения для архитектур Intel 64 и IA-32, том 2B: Справочник по набору команд, Новая Зеландия» (PDF) . Проверено 21 декабря 2019 г.