Используя вашу запись:
- eax @ 0 = ... что бы здесь ни было ...
- eax @ 1 = 0
- ax @2 = ax @ 1 + 1
Поскольку eax содержит ax, существует неявный шаг между 2 и 3
- eax @ 0 = ...
- eax @ 1 = 0
- ax @ 1 = 0 (потому что ax не может быть ненулевым, если eax равно нулю)
- ax @ 2 = ax @ 1 + 1
Шаг 2, потому что любое число с xor'ed само по себе равно 0 ... eax @ 0 мертво в этой точке, и, следовательно, eax @ 1 можно переименовать (используя ebx в качестве переименования, чтобы его можно было прочитать;виртуальный регистр, а не реальный):
- --- удален, eax больше не актуален
- ebx @ 0 = 0
- bx @ 0 = 0
- bx @ 1 = bx @ 0 + 1
Затем можно заметить, что поскольку шаг 3 является постоянной функцией, то же касается шага 4 (добавление константы к константе) исжимать их вместе (т.е. постоянное свертывание)
- - удалено, eax больше не актуально
- ebx @ 0 = 0
- bx @ 0 = 1
Если старшие 16 битов ebx ничего не доминируют, вы можете также удалить шаг 2.