Ассемблер - экстремальная оптимизация


в отладчике хорошо видно


Начиная с 80286 логика работы инструкции PUSH ESP предательским образом изменилась и теперь процессор помещает в стек такое значение регистра ESP, каким оно было до модификации (кстати, псевдокод команды PUSH, приведенный в руководстве Intel содержит ошибку, из которой следует, что в стек помещается уменьшенное значение ESP, хотя на практике это не так!).

И пока программисты спорят какое из двух решений "идеологически" более "правильное", прежний код отказывается работать, потому что команда PUSH ESP вместо указателя, указывающего на себя, теперь заталкивает в стек указатель на следующее двойное слово!

0012FF68  0E 10 40 00  34 FA 12 00  74 FF 12 00 00 00 00 00

          ^^^^^^^^^^^  ^^^^^^^^^^^  ^^^^^^^^^^^ ^^^^^^^^^^^

               |          |               |          |

               |       push esi           |  куда указывает esp

         адрес возврата               push esp



Содержание раздела