December 12 2017 08:27:09
Навигация
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации .

Забыли пароль?
Запросите новый здесь.
КОМАНДЫ ЛОГИЧЕСКИХ ОПЕРАЦИЙ И СДВИГОВ
ПРОЦЕССОРЫ ОБЩЕГО НАЗНАЧЕНИЯ И СИСТЕМЫ НА ИХ ОСНОВЕ

Данная группа команд включает также комплексные команды сравнения/пересылки CMPXCHG, CMPXCHG8B. Команда CMPXCHG производит сравнение содержимого аккумулятора (AL, АХ или ЕАХ) и заданного в команде регистра или ячейки памяти r/m. В случае их равенства устанавливается значение признака ZF = 1,и содержимое регистра или ячейки памяти пересылается в 8-, 16- или 32-разрядный регистр, указанный в команде. В случае неравенства устанавливается значение ZF = 0, и содержимое регистра или ячейки памяти r/m пересылается в аккумулятор AL, АХ или ЕАХ (в зависимости от заданной разрядности). Команда CMPXCHG8B оперирует с 8-байтными (счетверенными) словами. Она сравнивает значение счетверенных слов, хранящихся в паре регистров EDX:ECX и адресованной ячейке памяти. При их равенстве устанавливается значение ZF = 1, и по указанному адресу в ячейку памяти пересылается содержимое пары регистров ECX:EDX. При неравенстве устанавливается значение ZF = 0, и содержимое адресованной ячейки памяти пересылается в пару регистров EDX:ECX. Отметим, что при выполнении команды CMPXCHG производится установка всех признаков в соответствии с результатом сравнения, а при выполнении команды CMPXCHG8B устанавливается только признак ZF (см. табл. 2.17).

2.2.3. КОМАНДЫ ЛОГИЧЕСКИХ ОПЕРАЦИЙ И СДВИГОВ

Команды этой группы приведены в табл. 2.18. Установка признаков по результатам их выполнения указана в табл. 2.17.

Таблица 2.18 Команды логических операций и сдвигов

Синтаксис команды Операция
AND r/m(8,16,32), r(8,16,32)
r(8,16,32), r/m(8,16,32)
r/m(8,16,32), im(8,16,32)
r/m(16,32), im8
EAX(AX.AL), im32(16,8)
r/m(8,16,32)   AND r(8,16,32) ® r/m(8,16,32)
r(8,16,32)       AND r/m(8,16,32) ® r(8,16,32)
r/m(8,16,32)   AND im(8,16,32) ® r/m(8,16,32)
r/m(16,32)      AND im8(3HaK) ® r/m(16,32)
EAX(AX,AL) AND im32(16,8) ® EAX(AX,AL)
OR r/m(8t16,32), r(8,16,32)
r(8,16,32), r/m(8,16,32)
r/m(8,16,32), im(8,16,32)
r/m(16,32), im8
EAX(AX,AL), im32(16,8)
r/m(8,16,32)   OR r(8,16,32) ® r/m(8,16,32) r(8,16,32)        OR r/m(8,16,32) ® r(8,16,32) r/m(8,16,32)   OR im(8,16,32) ® r/m(8,16,32) r/m(16,32)      OR im8(3HaK) ® r/m(16,32) EAX(AX,AL) OR im32(16,8) ® EAX(AX,AL)
XOR r/m(8,16,32), г(8,16,32)
г(8,16,32), r/m(8,16,32)
r/m(8,16,32), im(8,16,32)
r/m(16,32), im8
EAX(AX.AL), im32(16,8)
r/m(8,16,32)   XOR r(8,16,32) ® r/m(8,16,32) r(8,16,32)       XOR r/m(8,16,32) ® r(8,16,32) r/m(8,16,32)   XOR im(8,16,32) ® r/m(8,16,32) r/m(16,32)      XOR im8(знак) ® r/m(16,32) EAX(AX,AL) XOR im32(16,8) ® EAX(AX,AL)
NOT r/m(8,16,32) Инверсия r/m(8,16,32)
TEST r/m(8,16,32), r(8,16,32)
r/m(8,16,32),im(8,16,32)
EAX(AX.AL), im32(16,8)
r/m(8,16,32)   AND r(8,16,32), установка SF,ZF,PF
r/m(8,16,32)   AND im(8,16,32), установка SF,ZF,PF
EAX(AX,AL) AND im32(16,8), установка SF,ZF,PF
SAL r/m(8,16,32), im8 Арифметический сдвиг r/m(8,16,32) влево на n разрядов, n=im8
Арифметический сдвиг r/m(8,16,32) влево на n разрядов, n=(CL)
SAR r/m(8,16,32), im8

r/m(8,16,32), CL
Арифметический сдвиг r/m(8,16,32) вправо на п разрядов, n=im8
Арифметический сдвиг r/m(8,16,32) вправо на п разрядов, n=(CL)
SHL r/m(8,16,32), im8

r/m(8,16,32), CL
Логический сдвиг r/m(8,16,32) влево на n разрядов, n=im8
Логический сдвиг r/m(8,16,32) влево на n разрядов, n=(CL)
SHR r/m(8,16,32), im8

r/m(8,16,32), CL
Логический сдвиг r/m(8,16,32) вправо на n разрядов, n=im8
Логический сдвиг r/m(8,16,32) вправо на n разрядов, n=(CL)
ROL r/m(8,16,32), im8

r/m(8,16,32), CL
Циклический сдвиг r/m(8,16,32) влево на n разрядов, n=im8
Циклический сдвиг r/m (8,16,32) влево на n разрядов, n=(CL)
ROR r/m(8,16,32), im8

r/m(8,16,32), CL
Циклический сдвиг r/m (8,16,32) вправо на n разрядов, n=im8
Циклический сдвиг r/m (8,16,32) вправо на n разрядов, n=(CL)
RCL r/m(8,16,32), im8

r/m(8,16,32), CL
Циклический сдвиг r/m (8,16,32) влево через CF на n разрядов, n=im8
Циклический сдвиг r/m (8,16,32) влево через CF на n разрядов, n=(CL)
RCR r/m(8,16,32), im8

r/m(8,16,32), CL
Циклический сдвиг r/m (8,16,32) вправо через CF на n разрядов, n=im8
Циклический сдвиг r/m (8,16,32) вправо через CF на n разрядов, n=(CL)
CHLD r/m(16,32),r(16,32),im8

г/т(16,32),г(16,32), CL
Сдвиг r/m (16,32) влево на n разрядов с запоминанием разрядов справа из r(16,32), n=im8
Сдвиг r/m (16,32) влево на n разрядов с запоминанием разрядов справа из r(16,32), n=(CL)
CHRD r/m(16,32),r(16,32),im8

r/m(16,32),r(16,32), CL
Сдвиг r/m (16,32) вправо на n разрядов с запоминанием разрядов слева из r(16,32), n=im8 Сдвиг r/m ( 16,32) вправо на n разрядов с запоминанием разрядов слева из r(16,32), n=(CL)

Логические операции конъюнкции (И), дизъюнкции (ИЛИ), неравнозначности (исключающее ИЛИ) выполняются командами AND, OR, XOR побитно над значениями каждого из разрядов операндов. В этих командах реализуются такие же варианты адресации операндов, как и в арифметических командах ADD, SUB. При использовании в качестве операндов 16- или 32-разрядного содержимого регистра или ячейки памяти и 8-разрядного непосредственного операнда im8 последний расширяется знаком до 16 или 32 разрядов. Команда NOT производит инвертирование значения каждого бита в адресуемом регистре или ячейке памяти. При этом значения признаков не изменяются.

Команда проверки TEST реализует побитную конъюнкцию операндов без изменения их значений и устанавливает соответствующие признаки в регистре EFLAGS (аналогично арифметической команде СМР).

Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, авторизуйтесьили зарегистрируйтесь для голосования.

Нет данных для оценки.

Время загрузки: 0.04 секунд 2,295,831 уникальных посетителей