Как уменьшить значение регистра на единицу не используя инструкцию 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 не затрагивает флаги, что даёт возможность запутать код через работу с флагами.