Арифметические команды

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.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: