assembler. Учебник для вузов_Юров В.И_2003 -637с (862834), страница 44
Текст из файла (страница 44)
Результат формируется в соответствии с основным принципом работы процессоров Intel: младший байт по младшему адресу.ВычитаниеАналогично сложению, при вычитании процессор рассматривает упакованныеBCD-числа как двоичные. Выполним вычитание 67 - 75. Так как процессор выполняет вычитание способом сложения, то и мы последуем этому:67 =01100111+-75 =10110101-8 =00011100 = 28.Как видим, результат равен 28 в десятичной системе счисления, что являетсяабсурдом.
В двоично-десятичном коде результат должен быть равен 0000 1000 (или8 в десятичной системе счисления). При программировании вычитания упакованных BCD-чисел программист, как и при вычитании неупакованных BCD-чисел,должен сам осуществлять контроль за знаком. Это делается с помощью флага CF,который фиксирует заем из старших разрядов. Само вычитание BCD-чисел осуществляется обычной командой вычитания SUB или SBB. Коррекция результата192Глава 8.
Арифметические командывычитания для его представления в десятичном виде осуществляется командойDAS (Decimal Adjust for Substraction).В приложении описан алгоритм, по которому команда DAS преобразует содержимое регистра AL в две упакованные десятичные цифры.ИтогиII Процессор имеет довольно мощные средства для реализации вычислительныхопераций. Для этого у него есть блок целочисленных операций и блок операций с плавающей точкой. Для большинства задач, использующих язык ассемблера, достаточно целочисленной арифметики.Ш Команды целочисленных операций работают с данными двух типов: двоичными и двоично-десятичными числами (BCD-числами).» Двоичные данные могут либо иметь знак, либо не иметь такового. Процессор,на самом деле, не различает числа со знаком и без.
Он лишь помогаетотслеживать изменение состояния некоторых битов операндов и состояние отдельныхфлагов. Операции сложения и вычитания чисел со знаком и без знака проводятся одним устройством и по единым правилам.Ш Контроль за правильностью результатов и их надлежащей интерпретацией полностью лежит на программисте. Он должен контролировать состояние флаговCF и OF регистра EFLAGS во время вычислительного процесса.i! Для операций с числами без знака нужно контролировать флаг CF. Установкаего в 1 сигнализирует о том, что число вышло за разрядную сетку операндов.ж Для чисел со знаком установка флага OF в 1 говорит о том, что в результатесложения чисел одного знака результат выходит за границу допустимых значений чисел со знаком в данном формате, и сам результат меняет знак (пропадаетпорядок).ж По результатам выполнения арифметических операций устанавливаются также флаги PF, ZF и SF.• В отличие от команд сложения и вычитания, команды умножения и деленияпозволяют учитывать знаки операндов.It Арифметические команды очень «капризны» к размерности операндов, поэтому в систему команд процессора включены специальные команды, позволяющие отслеживать эту характеристику.* Хотя диапазон значений двоичных данных довольно велик, для коммерческихприложений его явно недостаточно, поэтому в архитектуру процессора введены средства для работы с так называемыми двоично-десятичными (BCD) данными.ti Двоично-десятичные данные представляются в двух форматах, упакованноми неупакованном.
Наиболее универсальным является неупакованный формат.Глава 9Логические командыи команды сдвигаКраткое описание группы логических командКоманды для выполнения логических операцийКоманды сдвигаОрганизация работы с отдельными битамиНаряду со средствами арифметических вычислений система команд процессораимеет также средства логического преобразования данных. Под логическим понимается такое преобразование данных, в основе которого лежат правила формальной логики.
Формальная логика работает на уровне утверждений истинно илиложно. Для процессора это, как правило, означает 1 или 0 соответственно. Длякомпьютера язык нулей и единиц является родным, но минимальной единицейданных, с которой работают машинные команды, является байт. Однако на системном уровне часто необходимо иметь возможность работать на предельно низком уровне — на уровне битов.К средствам логического преобразования данных в языке ассемблера относятся логические команды и логические операции (рис. 9.1).
Команды рассматриваютсяв этой главе, операции были изучены нами в главе 5. Напомню, что операнд команды ассемблера в общем случае может представлять собой выражение, которое,в свою очередь, является комбинацией операторов и операндов. Среди этих операторов могут быть и операторы, реализующие логические операции над объектамивыражения.Перед знакомством с этими средствами давайте посмотрим, что же представляют собой сами логические данные и какие действия над ними могут производиться.7 Зак. 256194Глава 9. Логические команды и команды сдвигаСредствалогическойобработки данныхОперации I[ Команды]IIлогические-and-ог — хог — not —-test-Jобработкибитовсканирования- l-bsfбитовLbsrпроверки имодификациибитов-Ы-btc-btrLbtsIсдвига Iобычногосдвига-sar-sal-shl-shr-shldchrH-| логические-and-or-xor-not-| сдвигаUhrLshl_| сравнения-eq-ne-It-leциклическогосдвигаl-rcl-gtU-rcrLge\-m\I— rorРис.
9.1. Средства процессора для работы с логическими даннымиЛогические данныеТеоретической базой для логической обработки данных является формальная логика. Существует несколько систем логики. Одна из наиболее известных — этоисчисление высказываний. Высказывание — это любое утверждение, о котором можно сказать, что оно либо истинно, либо ложно. Исчисление высказываний представляет собой совокупность правил определения истинности или ложности некоторой комбинации высказываний.Исчисление высказываний очень гармонично сочетается с принципами работы компьютера и основными методами его программирования. Все аппаратныекомпоненты компьютера построены на логических микросхемах.
Система представления информации в компьютере на самом нижнем уровне основана на понятии бита. Бит, имея всего два состояния — 0 (ложно) и 1 (истинно), естественнымобразом вписывается в систему исчисления высказываний.Согласно теории, над высказываниями (над битами) могут выполняться логические операции.ж Отрицание (логическое НЕ) — логическая операция над одним операндом, результатом которой является величина, обратная значению исходного операнда. Эта операция однозначно характеризуется следующей таблицей истинности1'.1Таблица истинности — таблица результатов логических операций в зависимости от значений исходных операндов.Логические команды195Значение операнда:О1Результат операции:1Ож Логическое сложение (логическое включающее ИЛИ) — логическая операция наддвумя операндами, результатом которой является истина (1), если один илиоба операнда истинны (1), или ложь (0), если оба операнда ложны (0).
Эта операция описывается с помощью следующей таблицы истинности:Значение операнда 1:0011Значение операнда 2:О1О1Результат операции:0111• Логическое умножение (логическое И) — логическая операция над двумя операндами, результатом которой является истина (1) только в том случае, еслиоба операнда истинны (1). Во всех остальных случаях значение операции — ложь(0). Эта операция описывается с помощью следующей таблицы истинности:Значение операнда 1 : 0011Значение операнда 2:О1О1Результат операции:0001^is Логическое исключающее сложение (логическое исключающее ИЛИ) — логическая операция над двумя операндами, результатом которой является истина(1), если только один из двух операндов истинен (1), и ложь (0), если оба операнда либо ложны (0), либо истинны (1).
Эта операция описывается с помощью следующей таблицы истинности:Значение операнда 1 : 0 0 1 1Значение операнда 2:О1О1Результат операции:0110Логические командыСистема команд процессора содержит пять команд, поддерживающих описанныеранее операции. Эти команды выполняют логические операции над битами операндов. Размерность операндов, естественно, должна быть одинакова.
Например,если размерность операндов равна слову (16 битов), то логическая операция выполняется сначала над нулевыми битами операндов, и ее результат записываетсяна место бита 0 результата. Далее команда последовательно повторяет эти действия над всеми битами с первого до пятнадцатого. Возможные варианты размерности операндов для каждой команды можно найти в приложении.Далее перечислены базовые команды процессора, поддерживающие работус логическими данными:Я and операнд_1,операнд_2 — операция логического умножения. Команда выполняет поразрядно логическую операцию И (конъюнкцию) над битами операндовоперанд_1 и операнд_2.