Як вивчити англійську
У наш час будь-яка людина має знати англійську мову. А тим більше програміст. Тому що досить велика частина документації існує тільки англійською. А професіонал не може чекати, поки хтось переведе йому документацію. Він повинен вміти швидко отримувати потрібну інфорамцію і використовувати її, незалежно від того, на якому вона мовою - англійською або російською. Посилання на курси з англійської.
Команда 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 виконує перехід, якщо результат НЕ дорівнює нулю.