курсовая логика. 1 Логические данные 2 2 Логические команды 4
Скачать 29.95 Kb.
|
Содержание1 Логические данные 2 2 Логические команды 4 2.1 And 4 2.2 Or 4 2.3 Xor 4 2.4 Test 5 3Роль логических команд в системе команд микропроцессора 5 1 Логические данныеНаряду со средствами арифметических вычислений, система команд микропроцессора имеет также средства логического преобразования данных. Под логическими понимаются такие преобразования данных, в основе которых лежат правила формальной логики. Формальная логика работает на уровне утверждений истинно и ложно. Для микропроцессора это, как правило, означает 1 и 0 соответственно. Для компьютера язык нулей и единиц является родным, но минимальной единицей данных, с которой работают машинные команды, является байт. Однако, на системном уровне часто необходимо иметь возможность работать на предельно низком уровне — на уровне бит. К средствам логического преобразования данных относятся логические команды и логические операции. Теоретической базой для логической обработки данных является формальная логика. Существует несколько систем логики. Одна из наиболее известных — это исчисление высказываний. Высказывание — это любое утверждение, о котором можно сказать, что оно либо истинно, либо ложно. Исчисление высказываний представляет собой совокупность правил, используемых для определения истинности или ложности некоторой комбинации высказываний. Согласно теории, над высказываниями (над битами) могут выполняться следующие логические операции: отрицание (логическое НЕ); логическое сложение (логическое включающее ИЛИ); логическое умножение (логическое И); логическое исключающее сложение (логическое исключающее ИЛИ). 1.1 Отрицание (логическое НЕ) — логическая операция над одним операндом, результатом которой является величина, обратная значению исходного операнда (таблица 2). Таблица 1
1.2 Логическое сложение (логическое включающее ИЛИ) — логическая операция над двумя операндами, результатом которой является “истина” (1), если один или оба операнда имеют значение “истина” (1), и “ложь” (0) — если оба операнда имеют значение “ложь” (0). Эта операция описывается с помощью следующей таблицы истинности (таблица 2). Таблица 2
1.3 Логическое умножение (логическое И) — логическая операция над двумя операндами, результатом которой является “истина” (1) только в том случае, если оба операнда имеют значение “истина” (1). Во всех остальных случаях значение операции “ложь” (0). Эта операция описывается с помощью следующей таблицы истинности (таблица 3). Таблица 3
1.4 Логическое исключающее сложение (логическое исключающее ИЛИ) — логическая операция над двумя операндами, результатом которой является “истина” (1), если только один из двух операндов имеет значение “истина” (1), и ложь (0), если оба операнда имеют значение “ложь” (0) или “истина” (1). Эта операция описывается с помощью следующей таблицы истинности (таблица 4). Таблица 4
Система команд микропроцессора содержит пять команд, поддерживающих данные операции. Эти команды выполняют логические операции над битами операндов. Размерность операндов, естественно, должна быть одинакова. Например, если размерность операндов равна слову (16 бит), то логическая операция выполняется сначала над нулевыми битами операндов и ее результат записывается на место бита 0 результата. Далее команда последовательно повторяет эти действия над всеми битами с первого до пятнадцатого. 2 Логические командыВ системе команд микропроцессора есть следующий набор команд, поддерживающих работу с логическими данными: Andand операнд_1, операнд_2 — операция логического умножения. Команда выполняет поразрядно логическую операцию И (конъюнкцию) над битами операндов операнд_1 и операнд_2. Результат записывается на место операнд_1. Oror операнд_1, операнд_2 — операция логического сложения. Команда выполняет поразрядно логическую операцию ИЛИ (дизъюнкцию) над битами операндов операнд_1 и операнд_2. Результат записывается на место операнд_1. 2.3 Xorxor операнд_1,операнд_2 — операция логического исключающего сложения. Команда выполняет поразрядно логическую операцию исключающего ИЛИ над битами операндов операнд_1 и операнд_2. Результат записывается на место операнд_1. 2.4 Testtest операнд_1, операнд_2 — операция “проверить” (способом логического умножения). Команда выполняет поразрядно логическую операцию И над битами операндов операнд_1 и операнд_2. Состояние операндов остается прежним, изменяются только флаги zf, sf, и pf, что дает возможность анализировать состояние отдельных битов операнда без изменения их состояния. 2.5 Not not операнд — операция логического отрицания. Команда выполняет поразрядное инвертирование (замену значения на обратное) каждого бита операнда. Результат записывается на место операнда. Роль логических команд в системе команд микропроцессораДля представления роли логических команд в системе команд микропроцессора очень важно понять области их применения и типовые приемы их использования при программировании. С помощью логических команд возможно выделение отдельных битов в операнде с целью их установки, сброса, инвертирования или просто проверки на определенное значение. Для организации подобной работы с битами операнд_2 обычно играет роль маски. С помощью установленных в 1 битов этой маски и определяются нужные для конкретной операции биты операнд_1. Покажем, какие логические команды могут применяться для этой цели: Для установки определенных разрядов (бит) в 1 применяется команда or операнд_1,операнд_2. В этой команде операнд_2, выполняющий роль маски, должен содержать единичные биты на месте тех разрядов, которые должны быть установлены в 1 в операнд_1.Например, or eax,10b ;установить 1-й бит в регистре eax Для сброса определенных разрядов (бит) в 0 применяется команда and операнд_1,операнд_2. В этой команде операнд_2, выполняющий роль маски, должен содержать нулевые биты на месте тех разрядов, которые должны быть установлены в 0 в операнд_1. and eax,fffffffdh ;сбросить в 0 1-й бит в регистре eax Команда xor операнд_1,операнд_2 применяется: для выяснения того, какие биты в операнд_1 и операнд_2 различаются; для инвертирования состояния заданных бит в операнд_1. xor eax,10b ;инвертировать 1-й бит в регистре eax jz mes ;переход, если 1-й бит в al был единичным Интересующие нас биты маски (операнд_2) при выполнении команды xor должны быть единичными, остальные — нулевыми. test операнд_1,операнд_2 (проверить операнд_1) – команда применяется для проверки состояния заданных бит. Проверяемые биты операнд_1 в маске (операнд_2) должны иметь единичное значение. Алгоритм работы команды test подобен алгоритму команды and, но он не меняет значения операнд_1. Результатом команды является установка значения флага нуля zf: если zf = 0, то в результате логического умножения получился нулевой результат, то есть один единичный бит маски, который не совпал с соответствующим единичным битом операнд_1; если zf = 1, то в результате логического умножения получился ненулевой результат, то есть хотя бы один единичный бит маски совпал с соответствующим единичным битом операнд_1. test eax,00000010h jz m1 ;переход, если 4-й бит равен 1 Как видно из примера, для реакции на результат команды test целесообразно использовать команду перехода jnz метка (Jump if Not Zero) — переход, если флаг нуля zf ненулевой, или команду с обратным действием — jz метка (Jump if Zero) — переход, если флаг нуля zf = 0. Следующие две команды позволяют осуществить поиск первого установленного в 1 бита операнда. Поиск можно произвести как с начала так и от конца операнда: bsf операнд_1,операнд_2 (Bit Scaning Forward) - сканирование битов вперед. Команда просматривает (сканирует) биты операнд_2 от младшего к старшему (от бита 0 до старшего бита) в поисках первого бита, установленного в 1. Если таковой обнаруживается, в операнд_1 заносится номер этого бита в виде целочисленного значения. Если все биты операнд_2 равны 0, то флаг нуля zf устанавливается в 1, в противном случае флаг zf сбрасывается в 0. mov al,02h bsf bx,al ;bx=1 jz m1 ;переход, если al=00h ... bsr операнд_1,операнд_2 (Bit Scaning Reset) — сканирование битов в обратном порядке. Команда просматривает (сканирует) биты операнд_2 от старшего к младшему (от старшего бита к биту 0) в поисках первого бита, установленного в 1. Если таковой обнаруживается, в операнд_1 заносится номер этого бита в виде целочисленного значения. При этом важно, что позиция первого единичного бита слева отсчитывается все равно относительно бита 0. Если все биты операнд_2 равны 0, то флаг нуля zf устанавливается в 1, в противном случае флаг zf сбрасывается в 0. Пример приведенный в приложении А демонстрирует применение команд bsr и bsf. (обратите внимание на то, как меняется содержимое регистра bx после команд bsf и bsr). В последних моделях микропроцессоров Intel в группе логических команд появилось еще несколько команд, которые позволяют осуществить доступ к одному конкретному биту операнда. Операнд может находиться как в памяти, так и в регистре общего назначения. Положение бита задается смещением бита относительно младшего бита операнда. Значение смещения может задаваться как в виде непосредственного значения, так и содержаться в регистре общего назначения. В качестве значения смещения вы можете использовать результаты работы команд bsr и bsf. Все команды присваивают значение выбранного бита флагу cf. bt операнд, смещение_бита (Bit Test) — проверка бита. Команда переносит значение бита в флаг cf. bt ax,5 ;проверить значение бита 5 jnc m1 ;переход, если бит = 0 bts операнд,смещение_бита (Bit Test and Set) — проверка и установка бита. Команда переносит значение бита в флаг cf и затем устанавливает проверяемый бит в 1. mov ax,10 bts pole,ax ;проверить и установить 10-й бит в pole jсm1 ;переход, если проверяемый бит был равен 1 btr операнд,смещение_бита (Bit Test and Reset) — проверка и сброс бита. Команда переносит значение бита в флаг cf и затем устанавливает этот бит в 0. btc операнд,смещение_бита (Bit Test and Convert) — проверка и инвертирование бита. Команда переносит значение бита в флаг cf и затем инвертирует значение этого бита. |