русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Применение логических инструкций


Дата добавления: 2014-10-07; просмотров: 1862; Нарушение авторских прав


Логические команды служат для сброса или установки отдельных бит в байте или слове. Они включают булевы операторы НЕ, И, ИЛИ, исключающее ИЛИ и операцию тестирования, которая устанавливает флаги, но не изменяет значения своих операндов.

Логические инструкции

not dst

Инструкция not инвертирует все биты байта или слова.

and dst, src

Инструкция and выполняет операции логическое И двух операндов (байтов или слов) и возвращает результат в операнд-приемник. Бит результата устанавливается в 1, если установлены в 1 оба соответствующих ему бита операндов, и устанавливаются в 0 противном случае.

or dst, src

Инструкция or выполняет операции логическое ИЛИ двух операторов (байтов или слов) и помещает результат на место операнда-приемника. Бит результата устанавливается в 1, если равен 1 хотя бы один из двух соответствующих ему битов операндов и устанавливается в 0 в противном случае.

xor dst, src

Инструкция xor выполняет операцию логическое исключающее ИЛИ двух операндов и помещает результат на место операнда-приемника. Бит результата устанавливается в 1, если соответствующие ему биты операндов имеют противоположные значения, и устанавливается в 0 в противном случае.

Примеры использования логических команд

Установить 3 и 0 биты в регистре аl, остальные биты не изменять.

or al, 00001001b

Сбросить 4 и 6 битвы в регистре al, остальные биты не изменять.

and al, 10101111b

Инвертировать 2 и 4 биты в регистре al, остальные биты не изменять.

xor al, 00010100b

Перейти на метку LAB, если установлен 4 бит регистра al, в противном случае продолжить выполнение программы.

test al, 00010000b

jnz LAB

продолжаем

. . .

LAB:

Посчитать число единиц в регистре al, рассматривая байт, как набор бит.

mov cx, b ; число сдвигов

xor bl, bl ; обнуление BL



LL: shl al, 1 ; сдвиг влево на один разряд

jnc NO ; переход, если нет переноса

inc bl ; иначе увеличить BL

NO: loop LL ; возврат, если cx ¹0

Пример выполнения работы

Дан массив из 10 байт. Все байты имеют нулевые старшие биты. Необходимо каждый байт содержащий единицу в нулевом бите дополнить до четного числа единиц установкой седьмого бита.

Текст программы:

· .data

· NB db 04h, 07h, 14h, 23h, 04h,38h, 3Fh, 2Ah0Dh, 34h

· .code

START: mov ax, @data

mov ds, ax ; Загрузить сегментный адрес данных

lea bx, NB ; bx-текущий адрес массива NB

mov cx, 10 ; cx-счетчик числа итераций

BEG: mov al, [bx] ; считать очередной байт массива

test al, 1b ; установлен ли бит 0?

jz BITOCLR ; нет, бит 0 сброшен

; бит 0 установлен

test al, 0ffh ; четное число единиц?

jp OK ; да, больше ничего делать не надо

or al, 80h ; нечетное дополнить до четного?

· jmp short OK ; бит 0 сброшен

BITOCLR: test al, 0ffh ; четное число единиц?

jnp OK ; нет, больше ничего делать не нужно

or al,80h ; нечетное, дополнить до нечетного

 

OK: mov [bx], al ; записать измененный байт массива

loop BEG

QUIT: mov ax, 4c00h ; Код завершения 0

Int 21h ; Выход в DOS

· end START

Варианты заданий

1. Дан массив из 10 байт. Посчитать количество байт, в которых сброшены 6 и 4 биты.

2. Дан массив из 8 байт. Рассматривая его, как массив из 64 бит, пос­чи­тать количество единиц.

3. Дан массив из 8 байт. Рассматривая его как массив логических значений х0 х1 х2 х3 х4 х5 х6 х7 (true-есть ненулевые биты в байте, false-все биты нулевые), вычислить логическую формулу

4. f=(x7 & x6 & x1) V (x6 & x4 & x2 & x1 & x0) V (x7 & x6 & x3 & x1).

5. Дан массив из 10 байт. Посчитать количество байт с числом единиц в байте равным три.

6. Рассматривая байт как набор логических значений x7 x6 x5 x4 x3 x1 x0 (true -1, false - 0), вычислить логическую формулу

7. f=(x7 & x6 & x3 ) V (x6 & x4 & x2 & x1) V (x7 & x6 & x2 & x0)

8. Дан массив из 8 байт. Рассматривая его, как массив из 64 бит посчитать длину самой длинной последовательности единиц.

9. Дан массив из 10 байт. Посчитать количество единиц во всех разрядах, кратных трём: 3, 6, 9, …, 75, 78.

10. Дан массив из 5 байт. Рассматривая его как массив из 8 пятиразрядных слов, найти “исключающее или” всех 8 слов для выражения “10101”.

11. Дан массив из 6 байт. Рассматривая его, как массив из 48 бит, посчитать в нём количество нулей.

12. Дан массив из 8 байт. Рассматривая его, как массив из 64 бит, посчитать количество пар единиц в окружении нулей. Конец последовательности рассматривать как нуль.

13. Дан массив из 7 байт. Рассматривая его, как массив из восьми семибитных слов, посчитать количество слов с нечетным числом нулей в слове.

14. Дан массив из 9 байт. Рассматривая его как массив из 72 бит, посчитать число переходов между нулями и единицами.

15. Дан массив из 3 байт. Рассматривая его, как массив из 24 бит, посчитать количество одиночных единиц в окружении нулей. Конец последовательности рассматривать как нуль.

16. Дан массив из 6 байт. Посчитать количество байт число единиц, в которых не превышает 3.

17. Дан массив из 11 байт. Посчитать количество байт, в которых нет единиц, стоящих рядом.

18. Дан массив из 4 байт. Рассматривая его, как массив из 32 бит посчитать длину самой длинной последовательности нулей.

19. Дан массив из 6 байт. Посчитать количество единиц во всех разрядах, кратных пяти: 5, 10, …, 45.

20. Дан массив из 3 байт. Рассматривая его как массив из 8 трёхразрядных слов, найти “исключающее или” всех 8 слов для выражения “101”.

21. Дан массив из 7 байт. Рассматривая его, как массив из 56 бит, посчитать в нём количество нулей, стоящих после единицы. Конец последовательности рассматривать как нуль.

22. Дан массив из 8 байт. Рассматривая его, как массив из 64 бит, посчитать количество пар единиц в окружении нулей. Конец последовательности рассматривать как нуль.

23. Дан массив из 5 байт. Рассматривая его, как массив из восьми пятибитных слов, посчитать количество слов с чётным числом единиц в слове.

24. Дан массив из 6 байт. Рассматривая его, как массив из 48 бит, посчитать число двух единиц, стоящих между нулями. Конец и начало последовательности рассматривать как нули.

25. Дан массив из 3 байт. Рассматривая его, как массив из 24 бит, посчитать количество одиночных единиц в окружении нулей. Конец последовательности рассматривать как нуль.

26. Дан массив из 6 байт. Посчитать количество байт, число единиц в которых не превышает 3.

27. Дан массив из 11 байт. Посчитать количество байт, в которых нет единиц, стоящих рядом.



<== предыдущая лекция | следующая лекция ==>
На bx -адрес таблицы пересчёта, на al возвращается код числа | Программные прерывания и системные вызовы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.294 сек.