Как уменьшить значение регистра на единицу не используя инструкцию DEC?

Как уменьшить значение регистра на единицу не используя инструкцию dec ? Если можно, то несколько способов.


Ответы (2 шт):

Автор решения: Илья К

просто вычитание

sub eax, 1

прибавление отрицательного числа

add eax, -1
→ Ссылка
Автор решения: nick_n_a

Логическая короткая альтернатива. Возможно будет уложена в два байта.

          ; eax = 1    0   -1
neg eax   ; смена знака
          ; eax = -1   0    1
not eax   ; инверсия
          ; eax = 0  -1   -2

Ещё известный способ — lea — вычисление эффективного адреса:

lea eax, [eax - 1] ; 

Можно не все регистры использовать, ebx, ebp, esi, edi — точно можно, другие — надо или пробовать, или читать документацию.

lea — особая команда лучше почитать на неё доку. Ещё lea не затрагивает флаги, что даёт возможность запутать код через работу с флагами.

→ Ссылка