· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Команда test и jz/jnz.

Посл.отвђт Сообщенiе


Дата: Июн 29, 2003 01:12:58

В книге В. Юрова "Assembler: учебник" урок №9 стр.189 про команду test написано следующее (в скобках мои замечания):

Для проверки состояния заданных бит применяется команда
test операнд_1,операнд_2
Проверяемые биты операнд_1 в маске (операнд_2) должны иметь единичное значение. Алгоритм работы команды test подобен алгоритму команды and, но он не меняет значения операнд_1.
Результатом команды является установка значения флага нуля zf:
если zf=0, то в результате логического умножения получился нулевой результат, то есть один единичный бит маски не совпал с соответствующим единичным битом операнд_1;(усл.1)
если zf=1, то в результате логического умножения получился ненулевой результат, то есть хотя бы один единичный бит маски совпал с соответствующим единичным битом операнд_1.(усл.2 см. прим. 1)
test eax,00000010h
jz ml ;переход если 4 бит равен 1(см. прим.2)

Прим.1:
усл.1 и усл.2 на мой взгляд противоречат друг другу:
если zf устанавливается в 0 если хотябы один бит не совпал, а в 1 если хотя бы один бит совпал то получается если все биты совпали zf должен установиться в какое-то промежуточное положение?
Прим.2:
мне кажется, что переход будет если 4 бит не равен 1

Подскажите я сошел с ума или в книге ошибка? И если не сложно растолкуйте когда сработает jz, а когда jnz.


Дата: Июн 29, 2003 03:13:44

если zf устанавливается в 0 если хотябы один бит не совпал, а в 1 если хотя бы один бит совпал то получается если все биты совпали zf должен установиться в какое-то промежуточное положение?

Нет. Ты просто немного не допонял. Лучше читать Абеля.
А так - должны СОВПАСТЬ ВСЕ БИТЫ. Только тогда поднимется zf.


Дата: Июн 30, 2003 09:03:01

"если zf=0, то в результате логического умножения получился нулевой результат"

Ummm... I think it is the other way around.
ZF=1 if the DATA into OPERAND1 WOULD have BEEN ZERO after AND.

TEST 000F, FFFF // ZF=0
TEST 000F, FFF0 // ZF=1
TEST 000F, FFF1 // ZF=0


Дата: Июн 30, 2003 17:03:22

test просто делает and, только без модификации регистра приемника.
вот и вся разница.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.039