Согласно моим исследованиям, инструкция PUSHA
была введена в 1982 году в процессор Wikipedia: Intel 80286.
Документ "Intel 80286 Programmer's Reference Manual 1987" объясняет это назначения, используя слова:
... PUSHA (Push Все Регистры) сохраняет содержимое восьми общих регистров в стеке ... Эта команда упрощает вызовы процедур за счет сокращения количество инструкций, необходимых для сохранения содержимого общих регистров для использования в процедуре. PUSHA это дополняется Попа ...
... POPA (Pop Все Регистры) выскакивает восемь регистров общего назначения, указанные в приведенном выше описании, за исключением того, что значение SP отбрасывается вместо загружен в SP. POPA меняет предыдущую Пущу, восстановление регистров общих с их значениями перед тем Пуща была выполнен ...
... Прерывание Процедуры обслуживания может повлиять на другие, чем другой IP, CS, и ФЛАГИ регистров. Подпрограмма прерывания должна сохранять дополнительную информацию контекста перед продолжением, чтобы состояние машины можно было восстановить по завершении процедуры обслуживания прерываний (инструкции PUSHA и POPA предназначены для этих операций). Наконец, выполнение команды IRET выталкивает старый IP, CS и ФЛАГИ из стека и возобновляет выполнение прерванной программы ...
... В общем, разработчик системы может свободно использовать почти любые векторы прерываний для любой заданной цели. Однако некоторые из векторов с наименьшим номером - , зарезервированные Intel для специальных функций; их использование конкретно подразумевается по определенным типам исключений. Ни один из первых 32 векторов не должен быть , определенный пользователем; эти векторы либо вызываются заранее определенные исключениями или зарезервированы Intel для будущего расширения ...
Моего вольного перевода является то, что она должна быть простым способом создать снимок процессор «состояние» в точке времени, чтобы его можно было обработать обработчиками исключений и принять соответствующие корректирующие действия. Рассмотрение стеков кадров звонящего является одной из вещей, которые могут потребоваться.
После того, как это дизайнерское решение было принято, если практически фиксированными и замораживали до сегодняшнего дня, потому что «полностью обратно совместимые набор команд» является типичными характеристиками архитектуры x86 (см Wikipedia: x86, Wikipedia: x86-64)
delphifirst: Почему инструкция PUSHAD беспокоит хранение ESP?
Он делает это. Период.Почему инженеры 30 лет назад решили, что .. в настоящее время бессмысленный вопрос, не влияющий на программирование решений современных программистов
Потому что для этого потребовалось меньше транзисторов, чтобы реализовать его 32 года назад, позволяя простую копию банка регистров. Напротив, вы должны * никогда не использовать эту инструкцию. Он был полностью исключен в x64. –