( Если я неправ - доказательства в студию!)
|0000040b 8b45f4 mov eax, [ebp-0000000c] // X1 <= x | 10
│0000040e 8b55f4 mov edx, [ebp-0000000c] // X2 <= x | 10
│00000411 4a dec edx // X2 = X2 - 1 | 9
│00000412 8955f4 mov [ebp-0000000c], edx // x <= X2 | 9
│00000415 8b55f4 mov edx, [ebp-0000000c] // X2 <= x (sic!)
│00000418 89c1 mov ecx, eax // X3 <= X1 | 10
│0000041a 29d1 sub ecx, edx // X3 <= X3 - X2 | 10-9==1
│0000041c 89ca mov edx, ecx // X2 <= X3 | 1
│0000041e 48 dec eax // X1 <= X1 - 1 | 9
│0000041f 8945f4 mov [ebp-0000000c], eax // x <= X1 | 9кстати, если я не ошибаюсь, MSVC делал также.
Что же касается использования в рабочем коде.. какой же ССЗБ будет такое использовать?
такое не будет. но IRL всё намного запутаннее.