Как сохранить регистры на x86_64 для подпрограммы обслуживания прерывания?

Я смотрел на старый код школьного проекта и, пытаясь скомпилировать его на своем ноутбуке, столкнулся с некоторыми проблемами. Изначально он был написан для старой 32-битной версии gcc. Как бы то ни было, я пытался преобразовать часть сборки в 64-битный совместимый код и натолкнулся на несколько проблем.

Вот исходный код:

pusha
pushl   %ds
pushl   %es
pushl   %fs
pushl   %gs
pushl   %ss

pusha недопустим в 64-битном режиме. Итак, что было бы правильным способом сделать это в сборке x86_64 в 64-битном режиме?

Должна быть причина, по которой pusha недействителен в 64-битном режиме, поэтому у меня есть ощущение Ввод всех регистров вручную может быть не очень хорошей идеей.

24
задан Ciro Santilli 新疆改造中心法轮功六四事件 22 March 2015 в 14:35
поделиться