пятница, 1 февраля 2013 г.

как работают команды передачи управления?

Наряду со средствами арифметических вычислений, система команд микропроцессора имеет также средства логического преобразования данных. Под логическими понимаются такие преобразования данных, в основе которых лежат правила формальной логики.Формальная логика работает на уровне утверждений истинно и ложно. Для микропроцессора это, как правило, означает 1 иP0 соответственно. Для компьютера язык нулей и единиц является родным, но минимальной единицей данных, с которой работают машинные команды, является байт. Однако на системном уровне часто необходимо иметь возможность работать на предельно низком уровне ЂЂЂ на уровне бит.Рис.P29. Средства логической обработки данныхК средствам логического преобразования данных относятся логические команды и логические операции. Операнд команды ассемблера в общем случае может представлять собой выражение, которое, в свою очередь, является комбинаций операторов и операндов. Среди этих операторов могут быть и операторы, реализующие логические операции над объектами выражения.Перед подробным рассмотрением этих средств рассмотрим, что же представляют собой сами логические данные и какие операции над ними производятся.Логические данныеТеоретической базой для логической обработки данных является формальная логика. Существует несколько систем логики. Одна из наиболее известных ЂЂЂ это исчисление высказываний. Высказывание ЂЂЂ это любое утверждение, о котором можно сказать, что оно либо истинно, либо ложно.Исчисление высказываний представляет собой совокупность правил, используемых для определения истинности или ложности некоторой комбинации высказываний.Исчисление высказываний очень гармонично сочетается с принципами работы компьютера и основными методами его программирования. Все аппаратные компоненты компьютера построены на логических микросхемах. Система представления информации в компьютере на самом нижнем уровне основана на понятии бита. Бит, имея всего два состояния (0 (ложно) и 1 (истинно)), естественным образом вписывается в исчисление высказываний.Согласно теории, над высказываниями (над битами) могут выполняться следующие логические операции.1.PОтрицание (логическое НЕ)PЂЂЂ логическая операция над одним операндом, результатом которой является величина, обратная значению исходного операнда.Эта операция однозначно характеризуется следующей таблицей истинности (табл. 12).Таблица 12. Таблица истинности для логического отрицания2.PЛогическое сложение (логическое включающее ИЛИ)PЂЂЂ логическая операция над двумя операндами, результатом которой является «истина» (1), если один или оба операнда имеют значение «истина» (1), и «ложь» (0), если оба операнда имеют значение «ложь» (0).Эта операция описывается с помощью следующей таблицы истинности (табл. 13).Таблица 13. Таблица истинности для логического включающего ИЛИ3.PЛогическое умножение (логическое И)PЂЂЂ логическая операция над двумя операндами, результатом которой является «истина» (1) только в том случае, если оба операнда имеют значение «истина» (1). Во всех остальных случаях значение операции «ложь» (0).Эта операция описывается с помощью следующей таблицы истинности (табл. 14).Таблица 14. Таблица истинности для логического И4.PЛогическое исключающее сложение (логическое исключающее ИЛИ)PЂЂЂ логическая операция над двумя операндами, результатом которой является «истина» (1), если только один из двух операндов имеет значение «истина» (1), и ложь (0), если оба операнда имеют значение «ложь» (0) или «истина» (1). Эта операция описывается с помощью следующей таблицы истинности (таб. 15).Таблица 15. Таблица истинности для логического исключающего ИЛИСистема команд микропроцессора содержит пять команд, поддерживающих данные операции. Эти команды выполняют логические операции над битами операндов. Размерность операндов, естественно, должна быть одинакова. Например, если размерность операндов равна слову (16 бит), то логическая операция выполняется сначала над нулевыми битами операндов, и ее результат записывается на место бита 0 результата. Далее команда последовательно повторяет эти действия над всеми битами с первого до пятнадцатого.Логические командыВ системе команд микропроцессора есть следующий набор команд, поддерживающих работу с логическими данными:1)Pand операнд_1, операнд_2 ЂЂЂ операция логического умножения. Команда выполняет поразрядно логическую операцию И (конъюнкцию) над битами операндов операнд_1 и операнд_2. Результат записывается на место операнд_1;2)Pог операнд_1, операнд_2 ЂЂЂ операция логического сложения. Команда выполняет поразрядно логическую операцию ИЛИ (дизъюнкцию) над битами операндов операнд_1 и операнд_2. Результат записывается на место операнд_1;3)Pхог операнд_1, операнд_2 ЂЂЂ операция логического исключающего сложения. Команда выполняет поразрядно логическую операцию исключающего ИЛИ над битами операндов операнд_1 и операнд_2. Результат записывается на место операнде;4)Ptest операнд_1, операнд_2 ЂЂЂ операция «проверить» (способом логического умножения). Команда выполняет поразрядно логическую операцию И над битами операндов операнд_1 и операнд_2. Состояние операндов остается прежним, изменяются только флаги zf, sf, и pf, что дает возможность анализировать состояние отдельных битов операнда без изменения их состояния;5)Pnot операнд ЂЂЂ операция логического отрицания. Команда выполняет поразрядное инвертирование (замену значения на обратное) каждого бита операнда. Результат записывается на место операнда.Для представления роли логических команд в системе команд микропроцессора очень важно понять области их применения и типовые приемы их использования при программировании.С помощью логических команд возможно выделение отдельных битов в операнде с целью их установки, сброса, инвертирования или просто проверки на определенное значение.Для организации подобной работы с битами операнд_2 обычно играет роль маски. С помощью установленных в 1 бите этой маски и определяются нужные для конкретной операции биты операнд_1. Покажем, какие логические команды могут применяться для этой цели:1)Pдля установки определенных разрядов (бит) в 1 применяется команда ог операнд_1, операнд_2.В этой команде операнд_2, выполняющий роль маски, должен содержать единичные биты на месте тех разрядов, которые должны быть установлены в 1 в операнд_1;2)Pдля сброса определенных разрядов (бит) в 0 применяется команда and операнд_1, операнд_2.В этой команде операнд_2, выполняющий роль маски, должен содержать нулевые биты на месте тех разрядов, которые должны быть установлены в 0 в операнд_1;3)Pкоманда хог операнд_1, операнд_2 применяется:а)Pдля выяснения того, какие биты в операнд_1 и операнде различаются;б)Pдля инвертирования состояния заданных бит в операнд_1.Интересующие нас биты маски (операнд_2) при выполнении команды хог должны быть единичными, остальные ЂЂЂ нулевыми;Для проверки состояния заданных бит применяется команда test операнд_1, операнд_2 (проверить операнд_1).Проверяемые биты операнд_1 в маске (операнд_2) должны иметь единичное значение. Алгоритм работы команды test подобен алгоритму команды and, но он не меняет значения операнд_1. Результатом команды является установка значения флага нуля zf:1)Pесли zf = 0, то в результате логического умножения получился нулевой результат, т.Pе. один единичный бит маски, который не совпал с соответствующим единичным битом операнде;2)Pесли zf = 1, то в результате логического умножения получился ненулевой результат, т.Pе. хотя бы один единичный бит маски совпал с соответствующим единичным битом операнд_1.Для реакции на результат команды test целесообразно использовать команду перехода jnz метка (Jump if Not Zero)PЂЂЂ переход, если флаг нуля zf ненулевой, или команду с обратным действием ЂЂЂ jz метка (Jump if Zero)PЂЂЂ переход, если флаг нуля zf = 0.Следующие две команды позволяют осуществить поиск первого установленного в 1 бита операнда. Поиск можно произвести как с начала, так и от конца операнда:1)Pbsf операнд_1, операнд_2 (Bit Scaning Forward)PЂЂЂ сканирование битов вперед. Команда просматривает (сканирует) биты операнд_2 от младшего к старшему (от бита 0 до старшего бита) в поисках первого бита, установленного в 1. Если таковой обнаруживается, в операнд_1 заносится номер этого бита в виде целочисленного значения. Если все биты операнд_2 равны 0, то флаг нуля zf устанавливается в 1, в противном случае флаг zf сбрасывается в 0;2)Pbsr операнд_1, операнд_2 (Bit Scaning Reset)PЂЂЂ сканирование битов в обратном порядке. Команда просматривает (сканирует) биты операнд_2 от старшего к младшему (от старшего бита к биту 0) в поисках первого бита, установленного в 1. Если таковой обнаруживается, в операнд_1 заносится номер этого бита в виде целочисленного значения. При этом важно, что позиция первого единичного бита слева отсчитывается все равно относительно бита 0. Если все биты операнд_2 равны 0, то флаг нуля zf устанавливается в 1, в противном случае флаг zf сбрасывается в 0.В последних моделях микропроцессоров Intel в группе логических команд появилось еще несколько команд, которые позволяют осуществить доступ к одному конкретному биту операнда. Операнд может находиться как в памяти, так и в регистре общего назначения. Положение бита задается смещением бита относительно младшего бита операнда. Значение смещения может задаваться как в виде непосредственного значения, так и содержаться в регистре общего назначения. В качестве значения смещения вы можете использовать результаты работы команд bsr и bsf. Все команды присваивают значение выбранного бита флагу СЕ1)Pbt операнд, смещение_бита (Bit Test)PЂЂЂ проверка бита. Команда переносит значение бита в флаг cf;2)Pbts операнд, смещение_бита (Bit Test and Set)PЂЂЂ проверка и установка бита. Команда переносит значение бита в флаг CF и затем устанавливает проверяемый бит в 1;3)Pbtr операвд, смещение_бита (Bit Test and Reset)PЂЂЂ проверка и сброс бита. Команда переносит значение бита в флаг CF и затем устанавливает этот бит в 0;4)Pbtc операнд, смещение_бита (Bit Test and Convert)PЂЂЂ проверка и инвертирование бита. Команда переносит значение бита в флаг cf и затем инвертирует значение этого бита.Команды сдвигаКоманды этой группы также обеспечивают манипуляции над отдельными битами операндов, но иным способом, чем логические команды, рассмотренные выше.Все команды сдвига перемещают биты в поле операнда влево или вправо в зависимости от кода операции. Все команды сдвига имеют одинаковую структуру ЂЂЂ коп операнд, счетчик_сдвигов.Количество сдвигаемых разрядов ЂЂЂ счетчик_сдвигов ЂЂЂ располагается на месте второго операнда и может задаваться двумя способами:1)Pстатически, что предполагает задание фиксированного значения с помощью непосредственного операнда;2)Pдинамически, что означает занесение значения счетчика сдвигов в регистр cl перед выполнением команды сдвига.Исходя из размерности регистра cl понятно, что значение счетчика сдвигов может лежать в диапазоне от 0 до 255. Но на самом деле это не совсем так. В целях оптимизации микропроцессор воспринимает только значение пяти младших битов счетчика, т.Pе. значение лежит в диапазоне от 0 до 31.Все команды сдвига устанавливают флаг переноса cf.По мере сдвига битов за пределы операнда они сначала попадают на флаг переноса, устанавливая его равным значению очередного бита, оказавшегося за пределами операнда. Куда этот бит попадет дальше, зависит от типа команды сдвига и алгоритма программы.По принципу действия команды сдвига можно разделить на два типа:1)Pкоманды линейного сдвига;2)Pкоманды циклического сдвига.Команды линейного сдвигаК командам этого типа относятся команды, осуществляющие сдвиг по следующему алгоритму:1)Pочередной «выдвигаемый» бит устанавливает флаг CF;2)Pбит, вводимый в операнд с другого конца, имеет значение 0;3)Pпри сдвиге очередного бита он переходит во флаг CF, при этом значение предыдущего сдвинутого бита теряется! Команды линейного сдвига делятся на два подтипа:1)Pкоманды логического линейного сдвига;2)Pкоманды арифметического линейного сдвига.К командам логического линейного сдвига относятся следующие:1)Pshl операнд, счетчик_сдвигов (Shift Logical Left)PЂЂЂ логический сдвиг влево. Содержимое операнда сдвигается влево на количество битов, определяемое значением счетчик_сдвигов. Справа (в позицию младшего бита) вписываются нули;2)Pshr операнд, счетчик_сдвигов (Shift Logical Right)PЂЂЂ логический сдвиг вправо. Содержимое операнда сдвигается вправо на количество битов, определяемое значением счетчик_сдвигов. Слева (в позицию старшего, знакового бита) вписываются нули.На рисунке 30 показан принцип работы этих команд.Рис.P30. Схема работы команд линейного логического сдвигаКоманды арифметического линейного сдвига отличаются от команд логического сдвига тем, что они особым образом работаются со знаковым разрядом операнда.1)Psal операнд, счетчик_сдвигов (Shift Arithmetic Left)PЂЂЂ арифметический сдвиг влево. Содержимое операнда сдвигается влево на количество битов, определяемое значением счетчик_сдвигов. Справа (в позицию младшего бита) вписываются нули. Команда sal не сохраняет знака, но устанавливает флаг с/в случае смены знака очередным выдвигаемым битом. В остальном команда sal полностью аналогична команде shl;2)Psar операнд, счетчик_сдвигов (Shift Arithmetic Right)PЂЂЂ ариф

ЛЕКЦИЯ ЂЂЂP19. Команды передачи управления / Информатика и информационные технологии: конспект лекций

Комментариев нет:

Отправить комментарий