Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Мнемоника команд поразрядной обработки данных




Обозначение Выполняемая функция
Логические команды
NOT Поразрядное отрицание (инвертирование)
AND Поразрядное логическое умножение (И/конъюнкция)
OR Поразрядное логическое сложение (ИЛИ/дизъюнкция)
XOR Поразрядная сумма по модулю 2 (исключающее ИЛИ)
TEST Поразрядная проверка
Команды сдвига
SHL/SAL Логический/Арифметический сдвиг влево
SHR Логический сдвиг вправо
SAR Арифметический сдвиг вправо
Команды циклического сдвига
ROL Циклический сдвиг влево
ROR Циклический сдвиг вправо
RCL Циклический сдвиг влево с использованием флага переноса
RCR Циклический сдвиг вправо с использованием флага переноса

Команда NOT имеет следующий формат в мнемонике ассемблера:

NOT dest,

где dest – операнд, который может иметь любой режим адресации, кроме непосредственной.

Эта команда производит поразрядное отрицание каждого бита своего операнда. Логическая операция "отрицание" (инвертирование) имеет следующую таблицу истинности:

X not X
   
   

Результат выполнения команды NOT помещается в ее операнд. При этом не изменяются значения флагов.

Команда NOT имеет следующий формат машинного кода:

1111011 w mod 010 r/m disp_low disp_high

 


Примеры использования команды NOT:

NOT DX ; инвертирование бит 16-разрядного регистра
NOT DH ; инвертирование бит 8-разрядного регистра
NOT word ptr [BX + 12] ; инвертирование бит 16-разрядной ячейки ; памяти
NOT byte ptr [SI] ; инвертирование бит 8-разрядной ячейки ; памяти

Команда AND имеет следующий формат в мнемонике ассемблера:

AND dest,src,

где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; src – второй операнд, который может иметь любой режим адресации, если первый операнд имеет регистровую адресацию, или иметь регистровую или непосредственную адресацию, если первый операнд адресует данные в памяти.

Эта команда производит поразрядное логическое умножение своих операндов, результат помещается в первый операнд.

Операция логического умножения (ее еще называют конъюнкцией или операцией "И") имеет следующую таблицу истинности:

X Y X and Y
     
     
     
     

Содержимое регистра флагов при выполнении команды AND изменяется следующим образом: флаги CF и OF сбрасываются, флаги PF, SF и ZF изменяются в зависимости от результата выполнения команды. Флаг AF – не определен.

Команда AND имеет следующие форматы машинных кодов:

1) логическое умножение операнда в памяти или в регистре с операндом в регистре

000100 dw mod reg r/m disp_low disp_high

2) логическое умножение непосредственного операнда с содержимым аккумулятора

0010010 w data_low data_high

3) логическое умножение непосредственного операнда с операндом в регистре или в памяти

1000000 w mod 100 r/m disp_low disp_high data_low data_high

Примеры использования команды AND:

AND DX,[BX] ; поразрядное логическое умножение ; содержимого ячейки памяти и регистра
AND [BX + SI],DX ; поразрядное логическое умножение ; содержимого регистра и ячейки памяти
AND AX,123 ; поразрядное логическое умножение ; содержимого аккумулятора (AX) и константы
AND AL,123 ; поразрядное логическое умножение ; содержимого аккумулятора (AL) и константы
AND word ptr [12],123 ; поразрядное логическое умножение ; непосредственных данных с содержимым ; ячейки памяти
AND CX,123 ; поразрядное логическое умножение ; непосредственных данных с содержимым ; регистра

Команда OR имеет следующий формат в мнемонике ассемблера:

OR dest,src,

где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; src – второй операнд, который может иметь любой режим адресации, если первый операнд имеет регистровую адресацию, или иметь регистровую или непосредственную адресацию, если первый операнд адресует данные в памяти.

Эта команда производит поразрядное логическое сложение своих операндов, результат помещается в первый операнд.

Операция логического сложения (ее еще называют дизъюнкцией или операцией "ИЛИ") имеет следующую таблицу истинности:

X Y X or Y
     
     
     
     

Содержимое регистра флагов при выполнении команды OR изменяется следующим образом: флаги CF и OF сбрасываются, флаги PF, SF и ZF изменяются в зависимости от результата выполнения команды, Флаг AF – не определен.

Команда OR имеет следующие форматы машинных кодов:

1) логическое сложение операнда в памяти или в регистре с операндом в регистре

000010 dw mod reg r/m disp_low disp_high

2) логическое сложение непосредственного операнда с содержимым аккумулятора

0000110 w data_low data_high

3) логическое сложение непосредственного операнда с операндом в регистре или в памяти

1000000 w mod 001 r/m disp_low disp_high data_low data_high

Примеры использования команды OR:

OR DX,[SI] ; поразрядное логическое сложение ; содержимого ячейки памяти и регистра
OR [BX + 12],DX ; поразрядное логическое сложение ; содержимого регистра и ячейки памяти
OR AX,123 ; поразрядное логическое сложение содержимого ; аккумулятора (AX) и константы
OR AL,123 ; поразрядное логическое сложение содержимого ; аккумулятора (AL) и константы
OR word ptr [12],12 ; поразрядное логическое сложение ; непосредственных данных с содержимым ; ячейки памяти
OR CX,123 ; поразрядное логическое сложение ; непосредственных данных ; с содержимым регистра

Команда XOR имеет следующий формат в мнемонике ассемблера:

XOR dest,src,

где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; src – второй операнд, который может иметь любой режим адресации, если первый операнд имеет регистровую адресацию, или иметь регистровую или непосредственную адресацию, если первый операнд адресует данные в памяти.

Эта команда производит поразрядное логическое сложение по модулю два (исключающее ИЛИ) своих операндов, результат помещается в первый операнд.

Операция сложение по модулю два имеет следующую таблицу истинности:

X Y X xor Y
     
     
     
     

Содержимое регистра флагов при выполнении команды XOR изменяется следующим образом: флаги CF и OF сбрасываются, флаги PF, SF и ZF изменяются в зависимости от результата выполнения команды. Флаг AF – не определен.

Команда XOR имеет следующие форматы машинных кодов:

1) логическое сложение по модулю два операнда в памяти или в регистре с операндом в регистре

001100 dw mod reg r/m disp_low disp_high

2) логическое сложение по модулю два непосредственного операнда с содержимым аккумулятора

0011010 w data_low data_high

3) логическое сложение по модулю два непосредственного операнда с операндом в регистре или в памяти

1000000 w mod 110 r/m disp_low disp_high data_low data_high

Примеры использования команды XOR:

XOR DX,[BX + 12] ; поразрядное логическое сложение по модулю 2; содержимого ячейки памяти и регистра
XOR [BX + 12],DX ; поразрядное логическое сложение по модулю 2; содержимого регистра и ячейки памяти
XOR AX,123 ; поразрядное логическое сложение по модулю 2; аккумулятора (AX) и константы
XOR AL,123 ; поразрядное логическое сложение по модулю 2; аккумулятора (AL) и константы
XOR word ptr [12],12 ; поразрядное логическое сложение по модулю 2; непосредственных данных с содержимым; ячейки памяти
XOR CX,123 ; поразрядное логическое сложение по модулю 2; непосредственных данных ; с содержимым регистра

Команда TEST имеет следующий формат в мнемонике ассемблера:

TEST dest,src,

где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; src – второй операнд, который может иметь любой режим адресации, если первый операнд имеет регистровую адресацию, или иметь регистровую или непосредственную адресацию, если первый операнд адресует данные в памяти.

Эта команда во всем аналогична команде AND, за тем лишь исключением, что результат ни куда не помещается, а только изменяется содержимое регистра флагов. Команда TEST применяется для логического сравнения своих операндов.

Команда TEST имеет следующие форматы машинных кодов:

1) логическое сравнение операнда в памяти или в регистре с операндом в регистре

1000010 w mod reg r/m disp_low disp_high

2) логическое сравнение непосредственного операнда с содержимым аккумулятора

1010100 w data_low data_high

3) логическое сравнение непосредственного операнда с операндом в регистре или в памяти

1111011 w mod 100 r/m disp_low disp_high data_low data_high

Примеры использования команды TEST:

TEST DX,[BX + 12] ; логическое сравнение ; содержимого ячейки памяти и регистра
TEST [BX + 12],DX ; логическое сравнение ; содержимого регистра и ячейки памяти
TEST AX,123 ; логическое сравнение ; содержимого аккумулятора (AX) и константы
TEST AL,123 ; логическое сравнение ; содержимого аккумулятора (AL) и константы
TEST word ptr [12],23 ; логическое сравнение ; непосредственных данных с содержимым ; ячейки памяти
TEST CX,123 ; логическое сравнение ; непосредственных данных с содержимым ; регистра

Команда 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 имеет следующий формат машинного кода:

110100 vw mod 100 r/m disp_low disp_high

где поле v определяет тип второго операнда. Если v = 0, то вторым операндом команды является 1, а если v = 1, то вторым операндом является регистр CL.

Примеры использования команды SHL/SAL:

SHL DX,1 ; сдвиг содержимого регистра на 1 разряд влево
MOV CL,3 SHL DX, CL ; сдвиг содержимого регистра на 3 разряда влево
SHL byte ptr [12],1 ; сдвиг содержимого ячейки памяти на ; 1 разряд влево

Команда 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 имеет следующий формат машинного кода:

110100 vw mod 101 r/m disp_low disp_high

где поле v определяет тип второго операнда. Если v = 0, то вторым операндом команды является 1, а если v = 1, то вторым операндом является регистр CL.

Примеры использования команды SHR:

SHR DX,1 ; сдвиг содержимого регистра на 1 разряд вправо
MOV CL,3 SHR DX, CL ; сдвиг содержимого регистра на 3 разряда вправо
SHR byte ptr [123],1 ; сдвиг содержимого ячейки памяти ; на 1 разряд вправо

Команда 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 имеет следующий формат машинного кода:

110100 vw mod 110 r/m disp_low disp_high

где поле v определяет тип второго операнда. Если v = 0, то вторым операндом команды является 1, а если v = 1, то вторым операндом является регистр CL.

Примеры использования команды SAR:

SAR DX,1 ; арифметический сдвиг содержимого регистра; на 1 разряд вправо
MOV CL,3 SAR DX, CL ; арифметический сдвиг содержимого регистра; на 3 разряда вправо
SAR byte ptr [123],1 ; арифметический сдвиг содержимого ячейки; памяти на 1 разряд вправо

Команда ROL имеет следующий формат в мнемонике ассемблера:

ROL dest,count,

где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; count – второй операнд, который может быть регистром CL или числовым выражением со значением 1.

Эта команда циклически сдвигает влево содержимое своего первого операнда на число разрядов, указанных во втором операнде. Если вторым операндом является 1, то сдвиг производится на 1 разряд. Если второй операнд – регистр CL, то сдвиг осуществляется на количество разрядов равное содержимому данного регистра.

При сдвиге на 1 разряд старший бит первого операнда помещается во флаг переноса (CF), а остальные разряды сдвигаются влево, затем младший бит принимает значение равное CF. Если старший бит результата не совпадает с новым значением CF, то флаг переполнения (OF) устанавливается в 1, иначе сбрасывается в 0.

Сдвиг на несколько разрядов можно рассматривать как последовательность сдвигов на один разряд, но флаг OF в этом случае не определен.

На остальные флаги команда ROL не воздействует.

Команда ROL имеет следующий формат машинного кода:

110100 vw mod 000 r/m disp_low disp_high

где поле v определяет тип второго операнда. Если v = 0, то вторым операндом команды является 1, а если v = 1, то вторым операндом является регистр CL.

Примеры использования команды ROL:

ROL DX,1 ; циклический сдвиг содержимого регистра; на 1 разряд влево
MOV CL,3 ROL DX, CL ; циклический сдвиг содержимого регистра; на 3 разряда влево
ROL byte ptr [123],1 ; циклический сдвиг содержимого ячейки памяти; на 1 разряд влево

Команда ROR имеет следующий формат в мнемонике ассемблера:

ROR dest,count,

где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; count – второй операнд, который может быть регистром CL или числовым выражением со значением 1.

Эта команда циклически сдвигает вправо содержимое своего первого операнда на число разрядов, указанных во втором операнде. Если вторым операндом является 1, то сдвиг производится на 1 разряд. Если второй операнд – регистр CL, то сдвиг осуществляется на количество разрядов равное содержимому данного регистра.

При сдвиге на 1 разряд младший бит первого операнда помещается во флаг переноса (CF), а остальные разряды сдвигаются вправо, затем старший бит принимает значение равное CF. Если старший и предшествующий ему биты результата равны между собой, то флаг переполнения (OF) сбрасывается в 0, иначе устанавливается в 1.

Сдвиг на несколько разрядов можно рассматривать как последовательность сдвигов на один разряд, но флаг OF в этом случае не определен.

На остальные флаги команда ROR не воздействует.

Команда ROR имеет следующий формат машинного кода:

110100 vw mod 001 r/m disp_low disp_high

где поле v определяет тип второго операнда. Если v = 0, то вторым операндом команды является 1, а если v = 1, то вторым операндом является регистр CL.

Примеры использования команды ROR:

ROR DX,1 ; циклический сдвиг содержимого регистра; на 1 разряд вправо
MOV CL,3 ROR DX, CL ; циклический сдвиг содержимого регистра; на 3 разряда вправо
ROR byte ptr [123],1 ; циклический сдвиг содержимого ячейки памяти; на 1 разряд вправо

Команда RCL имеет следующий формат в мнемонике ассемблера:

RCL dest,count,

где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; count – второй операнд, который может быть регистром CL или числовым выражением со значением 1.

Эта команда циклически сдвигает влево содержимое своего первого операнда на число разрядов, указанных во втором операнде, при этом используется значение флага переноса. Если вторым операндом является 1, то сдвиг производится на 1 разряд. Если второй операнд – регистр CL, то сдвиг осуществляется на количество разрядов равное содержимому данного регистра.

При сдвиге на 1 разряд старший бит первого операнда помещается во флаг переноса (CF), остальные разряды сдвигаются влево, а младшим битом становится старое значение CF. Если старший бит результата не совпадает с новым значением CF, то флаг переполнения (OF) устанавливается в 1, иначе сбрасывается в 0.

Сдвиг на несколько разрядов можно рассматривать как последовательность сдвигов на один разряд, но флаг OF в этом случае не определен.

На остальные флаги команда RCL не воздействует.

Команда RCL имеет следующий формат машинного кода:

110100 vw mod 010 r/m disp_low disp_high

где поле v определяет тип второго операнда. Если v = 0, то вторым операндом команды является 1, а если v = 1, то вторым операндом является регистр CL.

Примеры использования команды ROL:

RСL DX,1 ; циклический сдвиг через CF содержимого; регистра на 1 разряд влево
MOV CL,3 RCL DX, CL ; циклический сдвиг через CF содержимого; регистра на 3 разряда влево
RCL byte ptr [123],1 ; циклический сдвиг через CF содержимого ячейки; памяти на 1 разряд влево

Команда RCR имеет следующий формат в мнемонике ассемблера:

RCR dest,count,

где dest – первый операнд, который может иметь любой режим адресации, кроме непосредственной; count – второй операнд, который может быть регистром CL или числовым выражением со значением 1.

Эта команда циклически сдвигает вправо содержимое своего первого операнда на число разрядов, указанных во втором операнде, при этом используется значение флага переноса. Если вторым операндом является 1, то сдвиг производится на 1 разряд. Если второй операнд – регистр CL, то сдвиг осуществляется на количество разрядов равное содержимому данного регистра.

При сдвиге на 1 разряд младший бит первого операнда помещается во флаг переноса (CF), а остальные разряды сдвигаются вправо, а старшим битом становится старое значение CF. Если старший и предшествующий ему биты результата равны между собой, то флаг переполнения (OF) сбрасывается в 0, иначе устанавливается в 1.

Сдвиг на несколько разрядов можно рассматривать как последовательность сдвигов на один разряд, но флаг OF в этом случае не определен.

На остальные флаги команда RCR не воздействует.

Команда RCR имеет следующий формат машинного кода:

110100 vw mod 011 r/m disp_low disp_high

где поле v определяет тип второго операнда. Если v = 0, то вторым операндом команды является 1, а если v = 1, то вторым операндом является регистр CL.

Примеры использования команды RCR:

RCR DX,1 ; циклический сдвиг через CF содержимого регистра; на 1 разряд вправо
MOV CL,3 RCR DX, CL ; циклический сдвиг через CF содержимого регистра; на 3 разряда вправо
RCR byte ptr [2],1 ; циклический сдвиг через CF содержимого ячейки; памяти на 1 разряд вправо

СОДЕРЖАНИЕ РАБОТЫ

1. Ознакомиться с теоретическим материалом.

2. С помощью программы debug исследовать выполнение всех арифметических команд с любым возможным типом их операндов.

3. В соответствии со своим вариантом решить поставленные задачи и с помощью DEBUG установить правильность их решения.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...