ADD Сложение
Признаки: O D I T S Z A P C
* * * * * *.
Команда: ADD destination,source.
Логика: destination = destination + source.
ADD складывает операнды и засылает сумму по назначению (destination). Оба операнда могут быть байтами или словами, и оба операнда могут быть двоичными числами со знаком или без знака.
Примечания:
При сложении чисел, занимающих более 16 бит, полезна команда ADC, т.к. она прибавляет перенос от предыдущей операции.
CMP Сравнение
Признаки: O D I T S Z A P C
* * * * * *.
Команда: CMP destination,source.
Логика: Установка признаков в соответствии с результатом. (destination - source)
CMP сравнивает два числа, вычитая операнд source из операнда destination, и изменяет значения признаков. CMP не изменяет сами операнды. Операндами могут быть байты или слова.
DEC Декремент
Признаки: O D I T S Z A P C
* * * * * *.
Команда: DEC destination.
Логика: destination = destination - 1
Эта команда отнимает от операнда destination единицу. Операнд destination, который может быть словом или байтом, интерпретируется как двоичное число без знака.
|
|
-------------------------------------------------------------
Операнды Такты Обращения Байты Пример
байт(слово)
регистр16 2 1 DEC BX
регистр8 3 2 DEC BL
память 15(23)+EA 2 2-4 DEC MATRIX[SI]
-------------------------------------------------------------
Примечания:
При выполнении этой команды признак переноса CF не изменяется, поэтому если Вы хотите декрементировать число, записанное несколькими словами, то лучше воспользоваться командами SUB и SBB.
DIV Деление без учета знака
Признаки: O D I T S Z A P C
? ?????.
Команда: DIV source.
Логика: AL = AX / source ;операнд source - байт
AH = remainder or
AX = DX:AX / source;операнд source - слово
DX = remainder.
Эта команда выполняет деление без учета знака. Если операнд source является байтом, то DIV делит значение слова в AX на операнд source, засылая частное в AL и остаток (remainder) в AH. Если же операнд source является словом, то DIV делит значение двойного слова из DX:AX на операнд source, засылая частное в AX и остаток в DX.
Примечания:
Если результат слишком велик и не умещается в AL (соотв. AX), то генерируется прерывание INT 0 (деление на ноль), и тогда частное с остатком не определены. Когда генерируется прерывание INT 0, то для процессоров 80286 и 80386 запоминаемое значение CS:IP указывает на неудавшуюся команду (т.е. на команду DIV). Для процессоров 8088/8086 CS:IP указывает, однако, на команду, следующую за неудавшейся командой DIV.
IDIV Деление с учетом знака
|
|
Признаки: O D I T S Z A P C
? ?????.
Команда: IDIV source.
Логика: AL = AX / source ;операнд source - байт
AH = remainder or
AX = DX:AX / source;операнд source - слово
DX = remainder.
Эта команда выполняет деление с учетом знака. Если операнд source является байтом, то IDIV делит значение слова в AX на операнд source, засылая частное в AL и остаток (remainder) в AH. Если же операнд source является словом, то IDIV делит значение двойного слова из DX:AX на операнд source, засылая частное в AX и остаток в DX.
Примечания:
Если результат слишком велик и не умещается в AL (соотв. AX), то генерируется прерывание INT 0 (деление на ноль), и тогда частное с остатком не определены. Микропроцессоры 80286 и 80386 могут в качестве частного после выполнения этой команды генерировать наибольшее (по абсолютной величине) негативное число (80h или 8000h), однако, 8088/8086 сгенерируют в такой ситуации прерывание INT 0. Когда генерируется прерывание INT 0, то для процессоров 80286 и 80386 запоминаемое значение CS:IP указывает на неудавшуюся команду (т.е. на команду IDIV). Для процессоров 8088/8086 CS:IP указывает, однако, на команду, следующую за неудавшейся командой IDIV.
IMUL Умножение с учетом знака
Признаки: O D I T S Z A P C
* ???? *.
Команда: IMUL source.
Логика: AX = AL * source ;операнд source - байт
or
DX:AX = AX * source;операнд source - слово.
Эта команда выполняет умножение с учетом знака. Если операнд source является байтом, то IMUL умножает операнд source на AL, засылая произведение в AX. Если же операнд source является словом, то IMUL умножает операнд source на AX, засылая произведение в DX:AX. Признаки переноса и переполнения CF и OF устанавливаются (=1), если старшая половина результата (т.е. AH для случая, когда source - байт, и DX, когда source - слово) содержит какую-либо значащую цифру произведения, иначе они сбрасываются (=0).
INC Инкремент
Признаки: O D I T S Z A P C
* * * * *.
Команда: INC destination.
Логика: destination = destination + 1.
Эта команда прибавляет к операнду destination единицу. Операнд destination, который может быть словом или байтом, интерпретируется как двоичное число без знака.
-------------------------------------------------------------
Операнды Такты Обращения Байты Пример
байт(слово)
регистр16 2 1 INC BX
регистр8 3 2 INC BL
память 15(23)+EA 2 2-4 INC MATRIX[SI]
MUL Умножение без учета знака
Признаки: O D I T S Z A P C
* ???? *.
Команда: MUL source.
Логика: AX = AL * source ;операнд source - байт
or
DX:AX = AX * source;операнд source - слово.
Эта команда выполняет умножение без учета знака. Если операнд source является байтом, то MUL умножает операнд source на AL, засылая произведение в AX. Если же операнд source является словом, то MUL умножает операнд source на AX, засылая произведение в DX:AX. Признаки переноса и переполнения CF и OF устанавливаются (=1), если старшая половина результата (т.е. AH для случая, когда source - байт, и DX, когда source - слово) содержит какую-либо значащую цифру произведения, иначе они сбрасываются (=0).
NEG Получение дополнительного кода
Признаки: O D I T S Z A P C
* * * * * *.
Команда: NEG destination.
Логика: destination = -destination; дополнительный код.
Команда NEG вычитает операнд destinstion из 0 и засылает результат обратно в destination. Эта команда является реализацией выполнения операции нахождения дополнительного кода операнда. Операндом может быть как байт, так и слово.
-------------------------------------------------------------
Операнды Такты Обращения Байты Пример
байты(слова)
регистр 3 - 2 NEG DL
память 16(24)+EA 2 2-4 NEG COEFFICIENT
|
|
Примечания:
Если операнд равен нулю, то признак переноса CF сбрасывается (=0); во всех остальных случаях он устанавливается (=1). Попытка применения операции NEG к байту -128 или слову -32,768 не приводит к изменению операнда, а только устанавливает признак переполнения (OF=1).
2.2.20 SUB Вычитание
Признаки: O D I T S Z A P C
* * * * * *.
Команда: SUB destination,source.
Логика: destination = destination - source.
Команда SUB вычитает операнд source из операнда
destination и засылает результат по адресу destination. Оба
операнда могут быть байтами или словами, и оба операнда могут
быть двоичными числами со знаком или без знака.
Примечания:
Если Вы хотите произвести вычитание чисел,которые длиннее 16 битов, то Вы можете воспользоваться командой SBB, которая вычитает также заем от предыдущего вычитания.
Вы можете вычитать непосредственный операнд размером в байт из операнда destination, даже если он размером в слово; в этом случае перед вычитанием байт растягивается до 16 битов, занося в новые биты значение бита знака.
Лекция 6.
Логические операции
AND Логическое умножение
Признаки: O D I T S Z A P C
0 * *? * 0.
Команда: AND destination,source.
Логика: destination = destination AND source.
AND выполняет логическое умножение побитно над своими операндами и засылает результат по назначению (destination). Оба операнда могут быть словами или байтами.
Логика команды AND
Destination Source Результат
0 0 0
0 1 0
1 0 0
1 1 1
Команда AND устанавливает каждый бит результата в 1, если соответствующие биты операндов равны 1.
NOT Логическое отрицание
Признаки не меняются.
Команда: NOT destination.
Логика: destination = NOT(destination); обратный код.
|
|
Логика команды NOT destination результат
0 1
1 0
Операнды Такты Обращения Байты Пример
байты(слова)
регистр 3 - 2 NOT DX
память 16(24)+EA 2 2-4 NOT MASK
OR Логическое сложение
Признаки: O D I T S Z A P C
0 * *? * 0.
Команда: OR destination,source.
Логика: destination = destination OR source.
OR выполняет логическое сложение побитно над своими операндами и засылает результат по назначению (destination). Оба операнда могут быть словами или байтами.
Логика команды OR
Destination Source Результат
0 0 0
0 1 1
1 0 1
1 1 1
Команда OR устанавливает каждый бит результата в 1, если хотя бы один из соответствующих битов операндов равен 1.
RCL Циклический сдвиг влево через CF
Признаки: O D I T S Z A P C
* *.
Команда: RCL destination,count.
Команда RCL сдвигает слово или байт, находящийся по адресу destination, влево на число битовых позиций, определяемое вторым операндом, COUNT. Бит, который выскакивает за левый предел операнда destination, заносится в признак переноса CF, а старое значение CF осуществляет ротацию, в том смысле, что оно заносится в освободившийся крайний правый бит операнда destination. Число таких "битовых ротаций" определяется операндом COUNT. Если COUNT не равен 1, то признак переполнения OF не определен. Если же COUNT равен 1, тогда в OF заносится результат выполнения операции исключающего или, примененной к 2 старшим битам исходного значения операнда destination.
Примечания:
В качестве операнда COUNT берется обычно значение в регистре CL. Если, однако, Вы хотите осуществить сдвиг лишь на одну позицию, то замените второй операнд (CL) на число 1, как показано выше в первом примере.
Микропроцессоры 80286 и 80386 ограничивают значение COUNT числом 31. Если COUNT больше, чем 31, то эти микропроцессоры используют COUNT MOD 32, чтобы получить новый COUNT в пределах 0-31. Эта верхняя граница имеет своей целью сократить тот период времени, на который будет задерживаться ответ на прерывание из-за ожидания конца выполнения команды.
Несколько команд RCL, использующих 1 в качестве второго операнда, выполняются быстрее и требуют меньшего об'ема памяти, чем одна команда RCL, использующая CL в качестве операнда COUNT.
Признак переполнения не определен, если операнд COUNT больше 1.
RCR Циклический сдвиг вправо через CF
Признаки: O D I T S Z A P C
Команда: RCR destination,count.
Команда RCR сдвигает слово или байт, находящийся по адресу destination, вправо на число битовых позиций, определяемое вторым операндом, COUNT. Бит, который выскакивает за правый предел операнда destination, заносится в признак переноса CF, а старое значение CF осуществляет ротацию, в том смысле, что оно заносится в освободившийся крайний левый бит операнда destination. Число таких "битовых ротаций" определяется операндом COUNT.
Если COUNT не равен 1, то признак переполнения OF не определен. Если же COUNT равен 1, тогда в OF заносится результат выполнения операции исключающего или, примененной к 2 старшим битам результата.
Примечания:
В качестве операнда COUNT берется обычно значение в регистре CL. Если, однако, Вы хотите осуществить сдвиг лишь на одну позицию, то замените второй операнд (CL) на число 1, как показано выше в первом примере.
Микропроцессоры 80286 и 80386 ограничивают значение COUNT числом 31. Если COUNT больше, чем 31, то эти микропроцессоры используют COUNT MOD 32, чтобы получить новый COUNT в пределах 0-31. Эта верхняя граница имеет своей целью сократить тот период времени, на который будет задерживаться ответ на прерывание из-за ожидания конца выполнения команды.
Несколько команд RCR, использующих 1 в качестве второго операнда, выполняются быстрее и требуют меньшего об'ема памяти, чем одна команда RCR, использующая CL в качестве операнда COUNT.
Признак переполнения не определен, если операнд COUNT больше 1.
ROL Циклический сдвиг влево
Признаки: O D I T S Z A P C
* *.
Команда: ROL destination,count.
Команда ROL сдвигает слово или байт, находящийся по адресу destination, влево на число битовых позиций, определяемое вторым операндом, COUNT. Бит, который выскакивает за левый предел операнда destination, заносится в него снова с правого края. Значение CF совпадает со значением бита, который последним был вытеснен за левый край операнда.
Если COUNT не равен 1, то признак переполнения OF не определен. Если же COUNT равен 1, тогда в OF заносится результат выполнения операции исключающего или, примененной к 2 старшим битам исходного значения операнда destination.
Примечания:
В качестве операнда COUNT берется обычно значение в регистре CL. Если, однако, Вы хотите осуществить сдвиг лишь на одну позицию, то замените второй операнд (CL) на число 1, как показано выше в первом примере.
Микропроцессоры 80286 и 80386 ограничивают значение COUNT числом 31. Если COUNT больше, чем 31, то эти микропроцессоры используют COUNT MOD 32, чтобы получить новый COUNT в пределах 0-31. Эта верхняя граница имеет своей целью сократить тот период времени, на который будет задерживаться ответ на прерывание из-за ожидания конца выполнения команды.
Несколько команд ROL, использующих 1 в качестве второго операнда, выполняются быстрее и требуют меньшего об'ема памяти, чем одна команда ROL, использующая CL в качестве операнда COUNT.
Признак переполнения не определен, если операнд COUNT больше 1.
ROR Циклический сдвиг вправо
Признаки: O D I T S Z A P C
* *.
Команда: ROR destination,count.
Команда ROR сдвигает слово или байт, находящийся по адресу destination, вправо на число битовых позиций, определяемое вторым операндом, COUNT. Бит, который выскакивает за правый предел операнда destination, заносится в него снова с левого края. Значение CF совпадает со значением бита, который последним был вытеснен за правый край операнда.
Если COUNT не равен 1, то признак переполнения OF не определен. Если же COUNT равен 1, тогда в OF заносится результат выполнения операции исключающего или, примененной к 2 старшим битам результата.
Примечания:
В качестве операнда COUNT берется обычно значение в регистре CL. Если, однако, Вы хотите осуществить сдвиг лишь на одну позицию, то замените второй операнд (CL) на число 1, как показано выше в первом примере.
Микропроцессоры 80286 и 80386 ограничивают значение COUNT числом 31. Если COUNT больше, чем 31, то эти микропроцессоры используют COUNT MOD 32, чтобы получить новый COUNT в пределах 0-31. Эта верхняя граница имеет своей целью сократить тот период времени, на который будет задерживаться ответ на прерывание из-за ожидания конца выполнения команды.
Несколько команд ROR, использующих 1 в качестве второго операнда, выполняются быстрее и требуют меньшего об'ема памяти, чем одна команда ROR, использующая CL в качестве операнда COUNT.
Признак переполнения не определен, если операнд COUNT больше 1.
SAL Арифметический сдвиг влево
Признаки: O D I T S Z A P C
* * *? * *.
Команда: SAL destination,count.
Команда SAL сдвигает слово или байт, находящийся по адресу destination, влево на число битовых позиций, определяемое вторым операндом, COUNT. По мере вытеснения битов за левый край операнда destination, справа в освободившиеся биты заносятся нули. Значение CF совпадает со значением бита, который последним был вытеснен за левый край операнда.
Если COUNT не равен 1, то признак переполнения OF не определен. Если же COUNT равен 1, тогда OF=0, если 2 старших бита исходного значения операнда destination совпадали, иначе OF=1.
Примечания:
В качестве операнда COUNT берется обычно значение в регистре CL. Если, однако, Вы хотите осуществить сдвиг лишь на одну позицию, то замените второй операнд (CL) на число 1, как показано выше в первом примере.
Микропроцессоры 80286 и 80386 ограничивают значение COUNT числом 31. Если COUNT больше, чем 31, то эти микропроцессоры используют COUNT MOD 32, чтобы получить новый COUNT в пределах 0-31. Эта верхняя граница имеет своей целью сократить тот период времени, на который будет задерживаться ответ на прерывание из-за ожидания конца выполнения команды.
Несколько команд SAL, использующих 1 в качестве второго операнда, выполняются быстрее и требуют меньшего об'ема памяти, чем одна команда SAL, использующая CL в качестве операнда COUNT.
Признак переполнения не определен, если операнд COUNT больше 1.
Команда SHL, логический сдвиг влево, - это та же команда, что и SAL.
SAR Арифметический сдвиг вправо
Признаки: O D I T S Z A P C
* * *? * *.
Команда: SAR destination,count.
Команда SAR сдвигает слово или байт, находящийся по адресу destination, вправо на число битовых позиций, определяемое вторым операндом, COUNT. По мере вытеснения битов за правый край операнда destination, слева в освободившиеся биты заносятся биты, совпадающие с битом знака исходного значения операнда destination. Значение CF совпадает со значением бита, который последним был вытеснен за правый край операнда.
Если COUNT не равен 1, то признак переполнения OF не определен. Если же COUNT равен 1, то OF=0.
Примечания:
В качестве операнда COUNT берется обычно значение в регистре CL. Если, однако, Вы хотите осуществить сдвиг лишь на одну позицию, то замените второй операнд (CL) на число 1, как показано выше в первом примере.
Микропроцессоры 80286 и 80386 ограничивают значение COUNT числом 31. Если COUNT больше, чем 31, то эти микропроцессоры используют COUNT MOD 32, чтобы получить новый COUNT в пределах 0-31. Эта верхняя граница имеет своей целью сократить тот период времени, на который будет задерживаться ответ на прерывание из-за ожидания конца выполнения команды.
Несколько команд SAR, использующих 1 в качестве второго операнда, выполняются быстрее и требуют меньшего об'ема памяти, чем одна команда SAR, использующая CL в качестве операнда COUNT.
Признак переполнения не определен, если операнд COUNT больше 1.
SHL Логический сдвиг влево
Признаки: O D I T S Z A P C
* * *? * *.
Команда: SHL destination,count.
Команда SHL сдвигает слово или байт, находящийся по адресу destination, влево на число битовых позиций, определяемое вторым операндом, COUNT. По мере вытеснения битов за левый край операнда destination, справа в освободившиеся биты заносятся нули. Значение CF совпадает со значением бита, который последним был вытеснен за левый край операнда.
Если COUNT не равен 1, то признак переполнения OF не определен. Если же COUNT равен 1, тогда OF=0, если 2 старших бита исходного значения операнда destination совпадали, иначе OF=1.
Примечания:
В качестве операнда COUNT берется обычно значение в регистре CL. Если, однако, Вы хотите осуществить сдвиг лишь на одну позицию, то замените второй операнд (CL) на число 1, как показано выше в первом примере.
Микропроцессоры 80286 и 80386 ограничивают значение COUNT числом 31. Если COUNT больше, чем 31, то эти микропроцессоры используют COUNT MOD 32, чтобы получить новый COUNT в пределах 0-31. Эта верхняя граница имеет своей целью сократить тот период времени, на который будет задерживаться ответ на прерывание из-за ожидания конца выполнения команды.
Несколько команд SHL, использующих 1 в качестве второго операнда, выполняются быстрее и требуют меньшего об'ема памяти, чем одна команда SHL, использующая CL в качестве операнда COUNT.
Признак переполнения не определен, если операнд COUNT больше 1.
Команда SAL, арифметический сдвиг влево, - это та же команда, что и SHL.
SHR Логический сдвиг вправо
Признаки: O D I T S Z A P C
* * *? * *.
Команда: SHR destination,count
Команда SHR сдвигает слово или байт, находящийся по адресу destination, вправо на число битовых позиций, определяемое вторым операндом, COUNT, или содержимым CL, если второй операнд опущен. По мере вытеснения битов за правый край операнда destination, слева в освободившиеся биты заносятся нули. Если бит знака сохраняет свое значение, то признак переполнения OF равен 0, иначе он равен 1. Значение CF совпадает со значением бита, который последним был вытеснен за правый край операнда.
Если COUNT не равен 1, то признак переполнения OF не определен. Если же COUNT равен 1, то OF равен значению старшего бита исходного операнда.
Примечания:
В качестве операнда COUNT берется обычно значение в регистре CL. Если, однако, Вы хотите осуществить сдвиг лишь на одну позицию, то замените второй операнд (CL) на число 1, как показано выше в первом примере.
Микропроцессоры 80286 и 80386 ограничивают значение COUNT числом 31. Если COUNT больше, чем 31, то эти микропроцессоры используют COUNT MOD 32, чтобы получить новый COUNT в пределах 0-31. Эта верхняя граница имеет своей целью сократить тот период времени, на который будет задерживаться ответ на прерывание из-за ожидания конца выполнения команды.
Несколько команд SHR, использующих 1 в качестве второго операнда, выполняются быстрее и требуют меньшего об'ема памяти, чем одна команда SHR, использующая CL в качестве операнда COUNT.
Признак переполнения не определен, если операнд COUNT больше 1.
TEST Тест Признаки: O D I T S Z A P C
Команда: TEST destination,source.
Логика: (destination AND source); Только изменение признаков
CF = 0
OF = 0.
Команда TEST выполняет операцию AND над своими операндами и меняет значения признаков. Сами операнды не изменяются.
Команда TEST полезна при проверке значения конкретного бита. Например, следующий кусок программы передает управление в ONE_FIVE_OFF, если биты 1 и 5 регистра AL сброшены. Значения остальных битов во внимание не принимаются.
TEST AL,00100010b;Маскируем все биты, кроме 1 и 5
JZ ONE_FIVE_OFF;Если хотя бы один установлен,
;то ZF=1
NOT_BOTH: .
.
ONE_FIVE_OFF:. ;Биты 1 и 5 сброшены
XOR Исключающее ИЛИ
Признаки: O D I T S Z A P C
0 * * * * 0.
Команда: XOR destination,source.
Логика: destination = destination XOR source.
XOR выполняет операцию исключающего или побитно над своими операндами и засылает результат по назначению (destination). Оба операнда могут быть словами или байтами.
Логика команды XOR
Destination Source Результат
0 0 0
0 1 1
1 0 1
1 1 0
Команда XOR устанавливает каждый бит результата в 1, если в точности один из соответствующих битов операндов равен 1.
Лекция 7.