<<
>>

Команды сравнения данных

Команды сравнения данных сравнивают значение числа в вершине стека и опе- ранда, указанного в команде. Ш FCOМ [операнд_в_памяти] — команда без операндов сравнивает два значения: одно находится в регистре SТ(О), другое в регистре SТ(1).
Если указан операнд [опе- ранд_в_памяти], то сравнивается значение в регистре ST(0) стека сопроцессора со значением в памяти. II FCOМP операнд — команда сравнивает значение в вершине стека сопроцессора SТ(О) со значением операнда, который находится в регистре или в памяти. По- следним действием команды является выталкивание значения из SТ(О)· » FCOМPP операнд — команда аналогична по действию команде FCOМ без операн- дов, но последним ее действием является выталкивание из стека значений обо- их регистров, SТ(О) и SТ(1). я FICOМ операнд_в_памяти — команда сравнивает значение в вершине стека сопро- цессора ST(0) с целым операндом в памяти. Длина целого операнда — 16 или 32 бита, то есть это целое слово и короткое целое (см. табл. 17.1). II FICOМP операнд —команда сравнивает значение в вершине стека сопроцессора SТ(О) с целым операндом в памяти.
После сравнения и установки битов C3...C0 команда выталкивает значение из SТ(0). Длина целого операнда — 16 или 32 бита, то есть это целое слово и короткое целое (см. табл. 17.1). ^ FГST — команда не имеет операндов и сравнивает значения в SТ(О) с нулем(зна- чением 00). Предыдущие команды сравнения работают корректно, если операнды в них являются целыми или вещественными числами. Когда один из операндов оказы- вается нечислом, то фиксируется исключение недействительной ситуации, а коды условия СЗ.. .СО соответствуют исключительной ситуации несравнимых или неупо- рядоченных операндов. Само же действие сравнения не производится. Процессор предоставляет три команды, позволяющие все же произвести сравнение таких опе- рандов, но как вещественных чисел без учета их порядков.
ш FUСОМ st(i) — команда сравнивает значения (без учета их порядков) в регистрах стека сопроцессора SТ(О) и SТ(i). 9 FUCOМP st(i) — команда сравнивает значения (без учета их порядков) в регист- рах стека сопроцессора ST(0) и SТ(i). Последним действием команды является выталкивание значения из вершины стека. Я FUСОМРР st(i) — команда сравнивает значения (без учета их порядков) в регист- рах стека сопроцессора ST(0) и SТ(i). Последние два действия команды одинако- вы — выталкивание значения из вершины стека. В результате работы команд сравнения в регистре состояния устанавливаются следующие значения битов кода условия СЗ, С2, СО: И если ST(0) > операнда, то 000; $ если ST(0) < операнда, то 001; й если ST(0) = операнду, то 100; ™ если операнды неупорядочены, то 111. Для того Чтобы получить возможность реагировать на эти коды командами ус- ловного перехода основного процессора (вспомните, что они реагируют на флаги в EFLAGS), нужно как-то записать сформированные биты условия СЗ, С2, СО в ре- гистр Е FLAGS. В системе команд сопроцессора существует команда FSТSW, которая позволяет запомнить слово состояния сопроцессора в регистре АХ или ячейке па- мяти. Далее значения нужных битов извлекаются и анализируются командами основного процессора. Например, запись старшего байта слова состояния, в кото- ром находятся биты СО...СЗ, в младший байт регистра EFLAGS/FLAGS осуществляет- ся командой SАНF. Эта команда записывает содержимое АН в младший байт регист- ра EFLAGS/FLAGS. После этого бит СО записывается на место флага CF, C2 — на место PF, СЗ — на место ZF. Бит С1 выпадает из общего правила, так как в регистре флагов на месте соответствующего ему бита находится единица. Анализ этого бита нужно проводить с помощью логических команд основного процессора. Зная все это, вам остается, исходя из особенностей своего алгоритма, применять те команды услов- ного перехода, которые анализируют состояние указанных флагов. В качестве иллюстрации рассмотрим программу разбиения массива веществен- ных чисел в формате двойного слова на два массива.
В первый массив поместим все элементы, которые больше или равны нулю, а во второй — меньше нуля (лис- тинг 17.2).
mаs_h_О dd i_mаs_h_0 mаs_l_б dd i_mаs_l_θ . code main ргос mоv ах, mоv ds, хог еsi mоv сх, finit fldz сусt: fcom mаs[еsi*4)

fstsw ax sahf jр error jс hi_0;переход, ;пересылка операнда mаs[еsi*4] mоv еах, mаs[еsi*4] mоv еdi, i_mаs_l_θ mоv mаs_l_θ[еdi*4], еах iпс i_mаs_l_θ jmр сусl_bst hi_О : ;пересылка операнда mаs[еsi*4] mоv еах, mаs [еsi*4]

;сравнение нуля в st(0) ` ;с очередным элементом массива mаs ' ;сохранение swг в регистре ах . ; запись swг->ах-> регистр флагов ;переход по "плохому" операнду в команде fcom если mаs[еsi*4]>= 0 (mаs[еsi*4] >=st(0)) меньшего 0. в массив mas 1 0

Листинг 17.2. Исследование команд сравнения данных Листинг 17.2( продолжение) том еdi, i_mаs_h_θ mоv rааs_h_О[еdi*4], еах ■ i пс i_mаs_h_θ сусl_bst: iпс si loop сусl error: ;здесь можно вывести сообщение об ошибке в задании операндов exit: mov ах , 4c00h iпt 21h main endp end main К группе команд сравнения данных логично отнести и команду FХАМ, которая анализирует операнд в вершине стека сопроцессора ST(0) и формирует значение битов СО, Сl, С2, СЗ в регистре состояния сопроцессора S WR. По состоянию этих би- тов можно судить: * о знаке мантиссы — знаковый бит операнда вСТ(О) заносится в бит СО регистра SWR; в корректности записи вещественного числа в ST(0) — идентифицируются пус- той регистр, корректное вещественное число, нечисло и неизвестный формат; Я типе специального численного значения: бесконечность, нуль, денормализован- ный операнд. Подробное описание команды FХАМ можно найти в приложении.

<< | >>
Источник: В. И. Юров. Assembler. Учебник для вузов. 2-е изд. 2003

Еще по теме Команды сравнения данных:

  1. Определение команды.
  2. Признаки команды.
  3. § 4.5. Деятельность команд в организации
  4. СРАВНЕНИЕ
  5. МЕТОД СРАВНЕНИЯ.
  6. Пример настройки и реабилитации в футбольной команде
  7. Диахронное и синхронное сравнение
  8. Нормативное сравнение
  9. Внутреннее и внешнее сравнение
  10. 1. Понятие и значение сравнения
  11. Функциональное сравнение
  12. Работа с другими командами
  13. Четыре шага по созданию эффективной команды
  14. Сравнение
  15. Различные уровни сравнения в зависимости от объектов исследования
  16. ШЕСТЬ СТУПЕНЕЙ НА ПУТИ СОЗДАНИЯ КОМАНДЫ.
  17. Кто становится лидером команды