Мнемоника команд поразрядной обработки данных
Команда NOT имеет следующий формат в мнемонике ассемблера: NOT dest, где dest – операнд, который может иметь любой режим адресации, кроме непосредственной. Эта команда производит поразрядное отрицание каждого бита своего операнда. Логическая операция "отрицание" (инвертирование) имеет следующую таблицу истинности:
Результат выполнения команды NOT помещается в ее операнд. При этом не изменяются значения флагов. Команда NOT имеет следующий формат машинного кода:
Примеры использования команды NOT:
Команда AND имеет следующий формат в мнемонике ассемблера: AND dest,src, где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; src – второй операнд, который может иметь любой режим адресации, если первый операнд имеет регистровую адресацию, или иметь регистровую или непосредственную адресацию, если первый операнд адресует данные в памяти.
Эта команда производит поразрядное логическое умножение своих операндов, результат помещается в первый операнд. Операция логического умножения (ее еще называют конъюнкцией или операцией "И") имеет следующую таблицу истинности:
Содержимое регистра флагов при выполнении команды AND изменяется следующим образом: флаги CF и OF сбрасываются, флаги PF, SF и ZF изменяются в зависимости от результата выполнения команды. Флаг AF – не определен. Команда AND имеет следующие форматы машинных кодов: 1) логическое умножение операнда в памяти или в регистре с операндом в регистре
2) логическое умножение непосредственного операнда с содержимым аккумулятора
3) логическое умножение непосредственного операнда с операндом в регистре или в памяти
Примеры использования команды AND:
Команда OR имеет следующий формат в мнемонике ассемблера: OR dest,src, где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; src – второй операнд, который может иметь любой режим адресации, если первый операнд имеет регистровую адресацию, или иметь регистровую или непосредственную адресацию, если первый операнд адресует данные в памяти.
Эта команда производит поразрядное логическое сложение своих операндов, результат помещается в первый операнд. Операция логического сложения (ее еще называют дизъюнкцией или операцией "ИЛИ") имеет следующую таблицу истинности:
Содержимое регистра флагов при выполнении команды OR изменяется следующим образом: флаги CF и OF сбрасываются, флаги PF, SF и ZF изменяются в зависимости от результата выполнения команды, Флаг AF – не определен. Команда OR имеет следующие форматы машинных кодов: 1) логическое сложение операнда в памяти или в регистре с операндом в регистре
2) логическое сложение непосредственного операнда с содержимым аккумулятора
3) логическое сложение непосредственного операнда с операндом в регистре или в памяти
Примеры использования команды OR:
Команда XOR имеет следующий формат в мнемонике ассемблера: XOR dest,src, где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; src – второй операнд, который может иметь любой режим адресации, если первый операнд имеет регистровую адресацию, или иметь регистровую или непосредственную адресацию, если первый операнд адресует данные в памяти. Эта команда производит поразрядное логическое сложение по модулю два (исключающее ИЛИ) своих операндов, результат помещается в первый операнд.
Операция сложение по модулю два имеет следующую таблицу истинности:
Содержимое регистра флагов при выполнении команды XOR изменяется следующим образом: флаги CF и OF сбрасываются, флаги PF, SF и ZF изменяются в зависимости от результата выполнения команды. Флаг AF – не определен. Команда XOR имеет следующие форматы машинных кодов: 1) логическое сложение по модулю два операнда в памяти или в регистре с операндом в регистре
2) логическое сложение по модулю два непосредственного операнда с содержимым аккумулятора
3) логическое сложение по модулю два непосредственного операнда с операндом в регистре или в памяти
Примеры использования команды XOR:
Команда TEST имеет следующий формат в мнемонике ассемблера: TEST dest,src, где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; src – второй операнд, который может иметь любой режим адресации, если первый операнд имеет регистровую адресацию, или иметь регистровую или непосредственную адресацию, если первый операнд адресует данные в памяти. Эта команда во всем аналогична команде AND, за тем лишь исключением, что результат ни куда не помещается, а только изменяется содержимое регистра флагов. Команда TEST применяется для логического сравнения своих операндов.
Команда TEST имеет следующие форматы машинных кодов: 1) логическое сравнение операнда в памяти или в регистре с операндом в регистре
2) логическое сравнение непосредственного операнда с содержимым аккумулятора
3) логическое сравнение непосредственного операнда с операндом в регистре или в памяти
Примеры использования команды TEST:
Команда SHL/SAL имеет следующий формат в мнемонике ассемблера: SHL dest,count, или SAL dest,count, где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; count – второй операнд, который может быть регистром CL или числовым выражением со значением 1. Хотя во мнемонике ассемблера данной команде соответствует два обозначения (SHL и SAL), тем не менее это одна и та же команда. Команда SHL/SAL сдвигает влево содержимое своего первого операнда на число разрядов, указанных во втором операнде. Если вторым операндом является 1, то сдвиг производится на 1 разряд. Если второй операнд – регистр CL, то сдвиг осуществляется на количество разрядов равное содержимому данного регистра. При сдвиге на 1 разряд старший (знаковый) бит первого операнда помещается во флаг переноса (CF), а остальные разряды сдвигаются влево. В младший бит помещается 0. Если затем CF совпадает со старшим битом результата, то во флаг переполнения (OF) помещается 0, иначе он устанавливается в 1. Сдвиг на несколько разрядов можно рассматривать как последовательность сдвигов на один разряд, но флаг OF в этом случае не определен. Помимо изменения флагов OF и CF, данная команда воздействует на флаги PF, SF и ZF, флаг AF – не определен. Следует отметить, что сдвиг влево на n разрядов эквивалентен умножению операнда на число 2 n. Команда SHL/SAL имеет следующий формат машинного кода:
где поле v определяет тип второго операнда. Если v = 0, то вторым операндом команды является 1, а если v = 1, то вторым операндом является регистр CL. Примеры использования команды SHL/SAL:
Команда SHR имеет следующий формат в мнемонике ассемблера:
SHR dest,count, где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; count – второй операнд, который может быть регистром CL или числовым выражением со значением 1. Эта команда сдвигает вправо содержимое своего первого операнда на число разрядов, указанных во втором операнде. Если вторым операндом является 1, то сдвиг производится на 1 разряд. Если второй операнд – регистр CL, то сдвиг осуществляется на количество разрядов равное содержимому данного регистра. При сдвиге на 1 разряд младший бит первого операнда помещается во флаг переноса (CF), а остальные разряды сдвигаются вправо. В старший бит помещается 0. Если затем знаковый бит результата совпадает со следующим по порядку битом, то во флаг переполнения (OF) помещается 0, иначе он устанавливается в 1. Сдвиг на несколько разрядов можно рассматривать как последовательность сдвигов на один разряд, но флаг OF в этом случае всегда помещается ноль. Помимо изменения флагов OF и CF, данная команда воздействует на флаги PF, SF и ZF, флаг AF – не определен. Следует отметить, что данный сдвиг вправо на n разрядов эквивалентен беззнаковому делению операнда на число 2 n. Команда SHR имеет следующий формат машинного кода:
где поле v определяет тип второго операнда. Если v = 0, то вторым операндом команды является 1, а если v = 1, то вторым операндом является регистр CL. Примеры использования команды SHR:
Команда SAR имеет следующий формат в мнемонике ассемблера: SAR dest,count, где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; count – второй операнд, который может быть регистром CL или числовым выражением со значением 1. Эта команда сдвигает вправо содержимое своего первого операнда на число разрядов, указанных во втором операнде. Если вторым операндом является 1, то сдвиг производится на 1 разряд. Если второй операнд –регистр CL, то сдвиг осуществляется на количество разрядов равное содержимому данного регистра. При сдвиге на 1 разряд младший бит первого операнда помещается во флаг переноса (CF), а остальные разряды сдвигаются вправо, причем старший бит сохраняет свое значение. Если затем знаковый бит результата совпадает со следующим по порядку битом, то во флаг переполнения (OF) помещается 0, иначе он устанавливается в 1. Сдвиг на несколько разрядов можно рассматривать как последовательность сдвигов на один разряд, но флаг OF в этом случае всегда помещается ноль. Помимо изменения флагов OF и CF, данная команда воздействует на флаги PF, SF и ZF, флаг AF – не определен. Следует отметить, что данный сдвиг вправо на n разрядов эквивалентен знаковому делению операнда на число 2 n. Команда SAR имеет следующий формат машинного кода:
где поле v определяет тип второго операнда. Если v = 0, то вторым операндом команды является 1, а если v = 1, то вторым операндом является регистр CL. Примеры использования команды SAR:
Команда ROL имеет следующий формат в мнемонике ассемблера: ROL dest,count, где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; count – второй операнд, который может быть регистром CL или числовым выражением со значением 1. Эта команда циклически сдвигает влево содержимое своего первого операнда на число разрядов, указанных во втором операнде. Если вторым операндом является 1, то сдвиг производится на 1 разряд. Если второй операнд – регистр CL, то сдвиг осуществляется на количество разрядов равное содержимому данного регистра. При сдвиге на 1 разряд старший бит первого операнда помещается во флаг переноса (CF), а остальные разряды сдвигаются влево, затем младший бит принимает значение равное CF. Если старший бит результата не совпадает с новым значением CF, то флаг переполнения (OF) устанавливается в 1, иначе сбрасывается в 0. Сдвиг на несколько разрядов можно рассматривать как последовательность сдвигов на один разряд, но флаг OF в этом случае не определен. На остальные флаги команда ROL не воздействует. Команда ROL имеет следующий формат машинного кода:
где поле v определяет тип второго операнда. Если v = 0, то вторым операндом команды является 1, а если v = 1, то вторым операндом является регистр CL. Примеры использования команды ROL:
Команда ROR имеет следующий формат в мнемонике ассемблера: ROR dest,count, где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; count – второй операнд, который может быть регистром CL или числовым выражением со значением 1. Эта команда циклически сдвигает вправо содержимое своего первого операнда на число разрядов, указанных во втором операнде. Если вторым операндом является 1, то сдвиг производится на 1 разряд. Если второй операнд – регистр CL, то сдвиг осуществляется на количество разрядов равное содержимому данного регистра. При сдвиге на 1 разряд младший бит первого операнда помещается во флаг переноса (CF), а остальные разряды сдвигаются вправо, затем старший бит принимает значение равное CF. Если старший и предшествующий ему биты результата равны между собой, то флаг переполнения (OF) сбрасывается в 0, иначе устанавливается в 1. Сдвиг на несколько разрядов можно рассматривать как последовательность сдвигов на один разряд, но флаг OF в этом случае не определен. На остальные флаги команда ROR не воздействует. Команда ROR имеет следующий формат машинного кода:
где поле v определяет тип второго операнда. Если v = 0, то вторым операндом команды является 1, а если v = 1, то вторым операндом является регистр CL. Примеры использования команды ROR:
Команда RCL имеет следующий формат в мнемонике ассемблера: RCL dest,count, где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; count – второй операнд, который может быть регистром CL или числовым выражением со значением 1. Эта команда циклически сдвигает влево содержимое своего первого операнда на число разрядов, указанных во втором операнде, при этом используется значение флага переноса. Если вторым операндом является 1, то сдвиг производится на 1 разряд. Если второй операнд – регистр CL, то сдвиг осуществляется на количество разрядов равное содержимому данного регистра. При сдвиге на 1 разряд старший бит первого операнда помещается во флаг переноса (CF), остальные разряды сдвигаются влево, а младшим битом становится старое значение CF. Если старший бит результата не совпадает с новым значением CF, то флаг переполнения (OF) устанавливается в 1, иначе сбрасывается в 0. Сдвиг на несколько разрядов можно рассматривать как последовательность сдвигов на один разряд, но флаг OF в этом случае не определен. На остальные флаги команда RCL не воздействует. Команда RCL имеет следующий формат машинного кода:
где поле v определяет тип второго операнда. Если v = 0, то вторым операндом команды является 1, а если v = 1, то вторым операндом является регистр CL. Примеры использования команды ROL:
Команда RCR имеет следующий формат в мнемонике ассемблера: RCR dest,count, где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; count – второй операнд, который может быть регистром CL или числовым выражением со значением 1. Эта команда циклически сдвигает вправо содержимое своего первого операнда на число разрядов, указанных во втором операнде, при этом используется значение флага переноса. Если вторым операндом является 1, то сдвиг производится на 1 разряд. Если второй операнд – регистр CL, то сдвиг осуществляется на количество разрядов равное содержимому данного регистра. При сдвиге на 1 разряд младший бит первого операнда помещается во флаг переноса (CF), а остальные разряды сдвигаются вправо, а старшим битом становится старое значение CF. Если старший и предшествующий ему биты результата равны между собой, то флаг переполнения (OF) сбрасывается в 0, иначе устанавливается в 1. Сдвиг на несколько разрядов можно рассматривать как последовательность сдвигов на один разряд, но флаг OF в этом случае не определен. На остальные флаги команда RCR не воздействует. Команда RCR имеет следующий формат машинного кода:
где поле v определяет тип второго операнда. Если v = 0, то вторым операндом команды является 1, а если v = 1, то вторым операндом является регистр CL. Примеры использования команды RCR:
СОДЕРЖАНИЕ РАБОТЫ 1. Ознакомиться с теоретическим материалом. 2. С помощью программы debug исследовать выполнение всех арифметических команд с любым возможным типом их операндов. 3. В соответствии со своим вариантом решить поставленные задачи и с помощью DEBUG установить правильность их решения.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|