Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КП_2007.doc
Скачиваний:
3
Добавлен:
16.09.2019
Размер:
1.02 Mб
Скачать

Команда inc (Инкремент на 1) Команда inc прибавляет 1 к операнду - приемнику, но в отличие от add не влияет на флаг cf.

Последовательность команд:

14EB:0100 B8FE00 MOV AX,00FE

14EB:0103 FEC0 INC AL

14EB:0105 FEC0 INC AL

14EB:0107 FEC0 INC AL

Загружаем –2 в регистр AL:

AX=00FF BX=0070 CX=0000 DX=FFFF SP=EA04 BP=0000

SI=0000 DI=0000 DS=14EB ES=14EB SS=14EB CS=14EB

IP=0103

NV UP EI NG NZ AC PO NC

14EB: 0103 FEC0 INC AL

AX=00FF BX=0070 CX=0000 DX=FFFF SP=EA04 BP=0000

SI=0000 DI=0000 DS=14EB ES=14EB SS=14EB CS=14EB

IP=0105

NV UP EI NG NZ NA PE NC

* * *

Выполнили инкремент в регистр AL, получив –1. Флаги, изменяемые арифметическими командами, изменяются также и командой INC.

14EB: 0105 FEC0 INC AL

AX=0000 BX=0070 CX=0000 DX=FFFF SP=EA04 BP=0000

SI=0000 DI=0000 DS=14EB ES=14EB SS=14EB CS=14EB

IP=0107

NV UP EI PL ZR AC PE NC

* * *

Выполнив инкремент от –1 до 0, надо было бы сформировать перенос. В этом отношении – отсутствии влияния на флаг перенос – командой INC отличается от обычных арифметических команд.

14EB: 0107 FEC0 INC AL

AX=0001 BX=0070 CX=0000 DX=FFFF SP=EA04 BP=0000

SI=0000 DI=0000 DS=14EB ES=14EB SS=14EB CS=14EB

IP=0109

NV UP EI PL NZ NA PO NC

* *

При выполнении инкремента от 0 до 1 результат отражается в состоянии флагов.

Исключительные ситуации реального режима:

Такие же, как для команды ADD.

Исключительные ситуации защищенного режима:

Такие же, как для команды ADD.

Команда imul

Команда IMUL выполняет операцию знакового умножения.

Команда имеет 3 варианта:

  1. Однооператорная форма. Операнд может быть байтом, словом или двойным словом в памяти или регистре общего назначения. Команда IMUL, так же как и команда MUL, неявно использует содержимое регистров EAX и EDX в качестве операндов.

  2. Двухоператорная форма. Один из операндов-источников может находиться в любом регистре общего назначения, в то время как другой может быть в регистре общего назначения или в памяти. Произведение размещается на месте операнда в регистре общего назначения.

  3. Трехоперандная форма. Два операнда представляют собой источники и один приемник. Один из операндов-источников является непосредственным значением, записанным в команде. Второй может находиться в памяти или в любом регистре общего назначения. Произведение может быть записано в любой регистр общего назначения. Непосредственный операнд считается знаковым. Если он является байтом, процессор перед выполнением умножения автоматически расширяет его знак до размера второго операнда.

В некоторых случаях в результате выполнения команды IMUL изменяется состояние различных флагов; в этих случаях значение флагов оказывается неопределенным, другими словами, их новое состояние не несет никакой информации.

Последовательность команд:

14EB:0100 B8EEFF MOV AX,FFEE

14EB:0100 B370 MOV BL,70

14EB:0100 F6EB IMUL BL

14EB:0107 B8EEFF MOV AX,FFEE

14EB:010A F7EB IMUL BX

Алгоритм работы команды зависит от используемой формы команды. Форма команды с одним операндом требует явного указания местоположения только одного сомножителя, который может быть расположен в ячейке памяти или регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя:

  • если операнд, указанный в команде, — байт, то второй сомножитель располагается в al;

  • если операнд, указанный в команде, — слово, то второй сомножитель располагается в ax;

  • если операнд, указанный в команде, — двойное слово, то второй сомножитель располагается в eax.

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

  • при умножении байтов результат помещается в ax;

  • при умножении слов результат помещается в пару dx:ax;

  • при умножении двойных слов результат помещается в пару edx:eax.

Исключительные ситуации реального режима:

Такие же, как для команды ADD.

Исключительные ситуации защищенного режима:

Такие же, как для команды ADD.