lect_8.ppt
- Количество слайдов: 14
ЛЕКЦИЯ № 8 ЛОГИЧЕСКИЕ ДАННЫЕ Логическими называют такие преобразования данных, которые основаны на правилах формальной логики. Формальная логика работает на уровне утверждений «истинно» и «ложно» . Средства логического преобразования данных позволяют работать с информацией на уровне бит.
Средства микропроцессора для работы с логическими данными
Основные логические операции • Отрицание (логическое НЕ) Значение операнда 0 1 Результат операции 1 0 Команда ассемблера: not операнд • Логическое сложение ( логическое включающее ИЛИ ) Значение операнда 1 0 0 1 1 Значение операнда 2 0 1 Результат операции 0 1 1 1 Команда ассемблера: or операнд 1, операнд 2
• Логическое умножение ( логическое И ) Значение операнда 1 0 0 1 1 Значение операнда 2 0 1 Результат операции 0 0 0 1 Команда ассемблера: and операнд 1, операнд 2 • Логическое исключающее сложение ( логическое исключающее ИЛИ ) Значение операнда 1 0 0 1 1 Значение операнда 2 0 1 Результат операции 0 1 1 0 Команда ассемблера: xor операнд 1, операнд 2
Команда test операнд 1, операнд 2 выполняет над операндами операцию логического умножения, однако не изменяет значения операнд 1, а воздействует только на флаги zf, sf, pf, что дает возможность анализировать состояние отдельных битов операнда без изменения их состояния. С помощью логических команд возможно выделение отдельных битов в операнде с целью их установки, сброса, инвертирования или проверки на определенное значение. Для организации таких действий операнд 2 выступает в роли маски. • Установка определенных бит в 1 or al, 01000010 b ; установка в 1 6 -го и 1 -го бит без изменения остальных • Сброс определенных бит в 0 and ax, 0 fffdh ; сброс в 0 младшего бита в ax без изменения остальных
• Инвертирование определенных бит xor al, 01000010 b ; инвертирование двух бит (1 и 6) • Проверка состояния заданных бит test eax, 00000010 h jz m 1 ; переход если 4 -й бит равен 1 • Поиск первого установленного в 1 бита mov al, 02 h bsf bx, al jz m 1 аналогичная команда bsr (Bit Scaning Reset) В последних моделях процессоров INTEL появились еще несколько команд логической группы, которые позволяют осуществить доступ к одному конкретному биту операнда. При этом операнд может находится и в регистре общего назначения и в памяти. Все команды присваивают значение выбранного бита флагу cf.
bt ax, 5 ; проверить значение бита 5 jnc m 1 ; переход если бит равен нулю. mov ax, 10 bts pole 1, ax ; проверить и установить 10 –й бит в pole 1 btr pole 1, ax ; проверить и сбросить btc pole 3, ax ; проверить и инвертировать 10 –й бит в pole 3 jc m 1 ; переход если проверенный бит был равен 1 10 -й бит в pole 2 Команды сдвига коп операнд, счетчик_сдвигов: • непосредственный операнд • значение в регистре cl (5 младших битов) Все команды сдвига устанавливают флаг переноса cf. По мере сдвига битов за пределы операнда, они сначала попадают во флаг переноса.
Линейный сдвиг • команды линейного логического сдвига: shl, shr
• Команды арифметического линейного сдвига: sal, sar Команды арифметического сдвига позволяют выполнять умножение и деление на степени двойки. 1. 2. 75 01001011 150 10010110
Циклический сдвиг • Команды простого циклического сдвига: rol, ror
• Команды циклического сдвига через флаг cf: rcl, rcr
Дополнительные команды сдвига shld операнд 1, операнд 2, счетчик_сдвигов shrd операнд 1, операнд 2, счетчик_сдвигов
Пример: вставка битовой строки ; prg_9_3. asm model small stack 256. data bit_str dd 11010111 h ; строка для вставки p_str dd 0 ffff 0000 h ; вставляемая подстрока 0 ffffh. code main: ; точка входа в программу mov ax, @data mov ds, ax xor ax, ax. 386 ; это обязательно mov eax, p_str ; правый край места вставки циклически переместить к краю ; строки bit_str (сохранение правого контекста): ror bit_str, 8 shr bit_str, 16 ; сдвинуть строку вправо на длину подстроки (16 бит) shld bit_str, eax, 16 ; сдвинуть 16 бит rol bit_str, 8 ; восстановить младшие 8 бит ; . . .
exit: end mov int main ; bit_str=11 ffff 11 ax, 4 c 00 h 21 h