команда test

команда test

Як вивчити англійську

У наш час будь-яка людина має знати англійську мову. А тим більше програміст. Тому що досить велика частина документації існує тільки англійською. А професіонал не може чекати, поки хтось переведе йому документацію. Він повинен вміти швидко отримувати потрібну інфорамцію і використовувати її, незалежно від того, на якому вона мовою - англійською або російською. Посилання на курси з англійської.

Команда TEST виконує логічне І між усіма бітами двох операндів. Результат нікуди не записується, команда впливає тільки на прапори (тобто перший операнд не змінюється). синтаксис:

TEST Число1, Число2

Залежно від результату можуть бути змінені прапори ZF, SF, PF. Інструкція TEST завжди скидає прапори OF і CF.

Число1 може бути одним з наступних:

  • Область пам'яті (MEM)
  • Регістр загального призначення (REG)

Число2 може бути одним з наступних:

  • Область пам'яті (MEM)
  • Регістр загального призначення (REG)
  • Безпосереднє значення (IMM)

З урахуванням обмежень, які були описані вище, комбінації Число1-Число2 можуть бути наступними:

Таблиця істинності для логічного І приведена тут.

Як можна здогадатися, команди AND і TEST по суті виконують одну і ту ж операцію - операцію логічного І.

Але навіщо тоді потрібні дві команди і коли краще використовувати AND, а коли - TEST?

Відмінності, зрозуміло, є. Про один уже було сказано: команда AND записує результат операції логічного І в перший операнд, а команда TEST нікуди не записує результат, а лише змінює прапори (в залежності від результату).

Якщо команда AND найбільш часто використовується для скидання певних бітів числа, то команда TEST зазвичай використовується для перевірки бітів і спільно з командами умовного переходу.

Крім того, за допомогою інструкції TEST можна визначити стан відразу декількох бітів числа.

Припустимо, ми хочемо дізнатися, скинуті чи нульовий і третій біти числа в регістрі AL. Тоді можна використовувати таку команду з бітової маскою. де встановлено 3-й і 0-й біти:

TEST AL, 00001001b

А тепер кілька прикладів, які показують, як працює цей код.

Тобто прапор нуля ZF буде встановлений тільки в тому випадку, якщо обидва біта (0-й і 3-й) скинуті.

Тут ми перевіряємо, чи є число в регістрі АХ парним або непарним. І в залежності від результату переходимо до тієї чи іншої мітці.

Інструкції JNZ і JZ вивчимо як-небудь іншим разом. Але якщо коротко, то JZ виконує перехід, якщо результат дорівнює нулю, а JNZ виконує перехід, якщо результат НЕ дорівнює нулю.

Схожі статті