Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
INC
Влияние команды на флаги и форматы команды:
* |
* |
* |
* |
* |
FE /0 |
INC r/m8 |
Увеличить r/m8 на 1 |
8086 |
inc al |
FF /0 |
INC r/m16 |
Увеличить r/m16 на 1 |
8086 |
inc word ptr [di] |
FF /0 |
INC r/m32 |
Увеличить r/m32 на 1 |
Intel386 |
inc dword ptr [ebx] |
40+rw |
INC r16 |
Увеличить r16 на 1 |
8086 |
inc dx |
40+rd |
INC r32 |
Увеличить r32 на 1 |
Intel386 |
inc ecx |
Описание:
Команда INC (Increment by 1) относится к группе команд целочисленной (или двоичной) арифметики (Binary Arithmetic Instructions). Она производит целочисленное сложение, увеличивая операнд команды (операнд-назначение, DEST) на единицу. Операнд-назначение (DEST) является единственным операндом команды и может быть быть переменной в регистре или в памяти (r16, r32, r/m8, r/m16, r/m32).
Особенностью команды INC является то, что она влияет на флаги EFLAGS.OF, EFLAGS.SF, EFLAGS.ZF, EFLAGS.AF и EFLAGS.PF, но не влияет на флаг переноса EFLAGS.CF. Это востребовано при организации разнообразных циклов, когда нет необходимости отслеживать переполнение. В противном случае нужно использовать команду ADD со вторым операндом равным 1.
Команда INC с операндом-назначением (DEST), являющимся переменной в памяти, может использоваться совместно с префиксом блокировки LOCK, который обеспечит атомарное исполнение команды.
Для команды INC обратной является команда DEC, уменьшающая операнд-назначение (DEST) на единицу.
Операция:
DEST = DEST + 1;
Особые ситуации защищенного режима:
#GP(0), если операнд-назначение (DEST) находится в памяти в сегменте, запрещенном для записи.
#GP(0), если при обращении к операнду в памяти в сегменте DS, ES, FS или GS используется нулевой селектор.
#GP(0), если любая часть операнда в памяти находится вне допустимого пространства эффективных адресов в сегменте CS, DS, ES, FS или GS.
#SS(0), если любая часть операнда в памяти находится вне допустимого пространства эффективных адресов в стековом сегменте SS.
Intel386 … :
#PF(Код ошибки) при страничной ошибке.
#UD при использовании префикса LOCK, если операнд-назначение (DEST) не является значением в памяти.
Intel486 … :
#AC(0) при невыровненной ссылке в память, если активирован контроль выравнивания (CR0.AM = 1, EFLAGS.AC = 1, CPL = 3).
Особые ситуации режима реальной адресации:
#GP, если любая часть операнда в памяти находится вне допустимого для реального режима пространства эффективных адресов в сегменте CS, DS, ES, FS или GS.
#SS, если любая часть операнда в памяти выходит за допустимую для реального режима верхнюю границу стекового сегмента SS.
Intel386 … :
#UD при использовании префикса LOCK, если операнд-назначение (DEST) не является значением в памяти.
Особые ситуации режима V86:
#GP(0), если любая часть операнда в памяти находится вне допустимого пространства эффективных адресов в сегменте CS, DS, ES, FS или GS.
#SS(0), если любая часть операнда в памяти находится вне допустимого пространства эффективных адресов в стековом сегменте SS.
Intel386 … :
#PF(Код ошибки) при страничной ошибке.
#UD при использовании префикса LOCK, если операнд-назначение (DEST) не является значением в памяти.
Intel486 … :
#AC(0) при невыровненной ссылке в память, если активирован контроль выравнивания (CR0.AM = 1, EFLAGS.AC = 1, CPL = 3).
Замечание:
К командам целочисленной арифметики относятся команды ADD, ADC, SUB, SBB, IMUL, MUL, IDIV, DIV, INC, DEC, NEG, CMP.
В свою очередь, сами названные команды целочисленной арифметики делятся на следующие подгруппы:
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru