Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Вычитание упакованных BCD-чиселСодержание книги
Поиск на нашем сайте Аналогично сложению, микропроцессор рассматривает упакованные BCD-числа как двоичные и, соответственно, выполняет вычитание BCD-чисел как двоичных. Пример 14. Вычитание упакованных BCD-чисел Выполним вычитание 67-75. Так как микропроцессорвыполняет вычитание способом сложения, то и мы последуемэтому: 67 = 0110 0111 + -75 = 1011 0101 = -8 = 0001 1100 = 28???Как видим, результат равен 28 в десятичной системе счисления, что является абсурдом. В двоично-десятичном коде результат должен быть равен 0000 1000 (или 8 в десятичной системе счисления). При программировании вычитания упакованных BCD-чисел программист, как и при вычитании неупакованных BCD-чисел, должен сам осуществлять контроль за знаком. Это делается с помощью флага cf, который фиксирует заем из старших разрядов. das (Decimal Adjust for Substraction) — коррекция результата вычитания для представления в десятичном виде. Логические команды Логические команды В системе команд микропроцессора есть следующий набор команд, поддерживающих работу с логическими данными: and операнд_1,операнд_2 — операция логического умножения. or операнд_1,операнд_2 — операция логического сложения. xor операнд_1,операнд_2 — операция логического исключающего сложения. test операнд_1,операнд_2 — операция “проверить” (способом логического умножения). not операнд — операция логического отрицания. Для представления роли логических команд в системе команд микропроцессора очень важно понять области их применения и типовые приемы их использования при программировании.
· Интересующие нас биты маски (операнд_2) при выполнении команды xor должны быть единичными, остальные — нулевыми.
Как видно из примера, для реакции на результат команды test целесообразно использовать команду перехода jnz метка (Jump if Not Zero) — переход, если флаг нуля zf ненулевой, или команду с обратным действием — jz метка (Jump if Zero) — переход, если флаг нуля zf = 0. Следующие две команды позволяют осуществить поиск первого установленного в 1 бита операнда. Поиск можно произвести как с начала так и от конца операнда: bsf операнд_1,операнд_2 (Bit Scaning Forward) - сканирование битов вперед.
bsr операнд_1,операнд_2 (Bit Scaning Reset) — сканирование битов в обратном порядке. Листинг 1 демонстрирует пример применения команд bsr и bsf. Введите код и исследуйте работу программы в отладчике (в частности, обратите внимание на то, как меняется содержимое регистра bx после команд bsf и bsr).
В последних моделях микропроцессоров Intel в группе логических команд появилось еще несколько команд, которые позволяют осуществить доступ к одному конкретному биту операнда. Операнд может находиться как в памяти, так и в регистре общего назначения. Положение бита задается смещением бита относительно младшего бита операнда. Значение смещения может задаваться как в виде непосредственного значения, так и содержаться в регистре общего назначения. В качестве значения смещения вы можете использовать результаты работы команд bsr и bsf. Все команды присваивают значение выбранного бита флагу cf. bt операнд,смещение_бита (Bit Test) — проверка бита.
bts операнд,смещение_бита (Bit Test and Set) — проверка и установка бита.
btr операнд,смещение_бита (Bit Test and Reset) — проверка и сброс бита. btc операнд,смещение_бита (Bit Test and Convert) — проверка и инвертирование бита. Команды сдвига Команды сдвига Команды этой группы также обеспечивают манипуляции над отдельными битами операндов, но иным способом, чем логические команды, рассмотренные выше. коп операнд,счетчик_сдвигов Количество сдвигаемых разрядов — счетчик_сдвигов — располагается, как видите, на месте второго операнда и может задаваться двумя способами:
Исходя из размерности регистра cl, понятно, что значение счетчика сдвигов может лежать в диапазоне от 0 до 255. Но на самом деле это не совсем так. Все команды сдвига устанавливают флаг переноса cf. По принципу действия команды сдвига можно разделить на два типа:
Команды линейного сдвига К командам этого типа относятся команды, осуществляющие сдвиг по следующему алгоритму:
Команды линейного сдвига делятся на два подтипа:
К командам логического линейного сдвига относятся следующие: shl операнд,счетчик_сдвигов (Shift Logical Left) - логический сдвиг влево. shr операнд,счетчик_сдвигов (Shift Logical Right) — логический сдвиг вправо.
Рис. 1. Схема работы команд линейного логического сдвига Ниже показан фрагмент программы, который выполняет преобразование двух неупакованных BCD-чисел в слове памяти bcd_dig в упакованное BCD-число в регистре al.
Команды арифметического линейного сдвига отличаются от команд логического сдвига тем, что они особым образом работают со знаковым разрядом операнда. sal операнд,счетчик_сдвигов (Shift Arithmetic Left) — арифметический сдвиг влево. sar операнд,счетчик_сдвигов (Shift Arithmetic Right) — арифметический сдвиг вправо.
Рис. 2. Схема работы команд линейного арифметического сдвига Команды циклического сдвига К командам циклического сдвига относятся команды, сохраняющие значения сдвигаемых бит. Есть два типа команд циклического сдвига:
К командам простого циклического сдвига относятся: rol операнд,счетчик_сдвигов (Rotate Left) — циклический сдвиг влево. ror операнд,счетчик_сдвигов (Rotate Right) — циклический сдвиг вправо.
Рис. 3. Схема работы команд простого циклического сдвига Как видно из рис. 3, команды простого циклического сдвига в процессе своей работы осуществляют одно полезное действие, а именно: циклически сдвигаемый бит не только вдвигается в операнд с другого конца, но и одновременно его значение становиться значением флага cf.
Команды циклического сдвига через флаг переноса cf отличаются от команд простого циклического сдвига тем, что сдвигаемый бит не сразу попадает в операнд с другого его конца, а записывается сначала в флаг переноса cf. Лишь следующее исполнение данной команды сдвига (при условии, что она выполняется в цикле) приводит к помещению выдвинутого ранее бита с другого конца операнда (см. рис. 4). К командам циклического сдвига через флаг переноса cf относятся следующие: rcl операнд,счетчик_сдвигов (Rotate through Carry Left) — циклический сдвиг влево через перенос. rcr операнд,счетчик_сдвигов (Rotate through Carry Right) — циклический сдвиг вправо через перенос.
Рис. 4. Команды циклического сдвига через флаг переноса cf Из рис. 4 видно, что при сдвиге через флаг переноса появляется промежуточный элемент, с помощью которого, в частности, можно производить подмену циклически сдвигаемых битов, в частности, рассогласование битовых последовательностей.
|
||||||||||||
|
Последнее изменение этой страницы: 2017-02-05; просмотров: 664; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.115 (0.008 с.) |