Консультация № 55074
11.09.2006, 20:11
0.00 руб.
0 3 1
Здравствуйте. Помогите пожалуйста разобраться с командами or и and, как ими пользоваться и зачем они нужны ? Сколько не читал про эти команды в книгах, нихрена не понял.

Обсуждение

Неизвестный
11.09.2006, 20:52
общий
это ответ
Здравствуйте, Whiteman!

Команды OR, AND, XOR выполняют побитовые операции ИЛИ, И, исключающее ИЛИ соответственно.
Их формат - <команда> <операнд 1>,<операнд 2>.
i-ый бит результата формируется из i-ых битов операндов в соответствии с таблицей:
оп1 0 0 1 1
оп2 0 1 0 1
OR 0 1 1 1
AND 0 0 0 1
XOR 0 1 1 0
Например, инструкция OR AL,DL при AL=15h и DL=78h записывает в AL число 7Dh, так как
AL=00010101
DL=01111000
рез=01111101.
Подобное на языке высокого уровня - AL = AL or DL;.

Немного о флагах.
- CF и OF всегда обнуляются
- ZF устанавливается только в случае, если результат = 0
- SF копирует старший бит результата
- PF устанавливается при чётном числе установленных битов в результате
- AF меняется непредсказуемым образом
- остальные флаги не меняются

Используются эти команды, например, для установки(OR), сброса(AND) и инвертирования(XOR) бит. Так, команда AND AL,0FCh сбрасывает 2 младших бита AL.

Команда XOR используется для обнуления регистров, например, XOR AX,AX. Выгода - в меньшем по сравнению с MOV AX,0 числе байт в машинном представлении.

Иногда возникает необходимость проверить значение регистра на ноль или на знак. Надо соответствующим образом установить флаги. Для этого можно применить AND AX,AX и переходы JZ, JS. Выгода опять-таки в меньшем по сравнению с CMP AX,0 размере машкода.

Удачи!
Неизвестный
12.09.2006, 09:40
общий
Ещё хочется добавить к ответу Олега Владимировича:Область применения битовых операций очешь обширна. Они используются для вычисления CRC, архивации, маскирования, быстрых математических операций (не только целочисленных), атрибутировании, проверки значений на истинность, вычислений пределов и пр. и пр...Они действительно очень действенны при нехватке ресурсов, например:;Задание: поменять местами два регистра, не используя дополнительной ячейки памяти и никаких операторов, кроме операторов битовой логики (например на монокристальных контроллерах, где нет операции xchg).;Ответ:xor ax, bxxor bx, axxor ax, bxТакже они очень действенны для оптимизации программы по скорости, построении полиморфных алгоритмов (например, генерация маски), определении областей перекрытия и т.д.P.S.: Сорри. Очень хотелось рассказать какие они хорошие (операции побитовой логики), да мысленные глаза разбежались...:)
Неизвестный
12.09.2006, 12:22
общий
Спасибо Sergijj. Извини за тройку, но правда ни хрена по-английски не понимаю.
Форма ответа