C++Что такое представление на уровне сборки pushl/popl% esp?
ATT Ассамблея
Я пытаюсь понять поведение двух следующих инструкций:
pushl %esp
И:
popl %esp
Обратите внимание, что они сохранить вычисленное значение обратно в %esp
.
Я рассматриваю эти инструкции самостоятельно, а не последовательно. Я знаю, что значение, хранящееся в %esp
, всегда является значением перед приращением/декрементом, но как я могу представить поведение на языке ассемблера? Это то, что я придумал до сих пор:
Для толчке:
movl %esp, %edx 1. save value of %esp
subl $4, %esp 2. decrement stack pointer
movl %edx, (%esp) 3. store old value of %esp on top of stack
Для поп-музыки:
movl (%esp), %esp You wouldn’t need the increment portion.
Правильно ли это? Если нет, то где я иду не так? Благодарю.
Я кодирования в x86 ассемблере на протяжении десятилетий. У меня никогда не было случая использовать их. Я уверен, что они определены, но действительно ли это имеет значение на практике? –
Нет, в моем учебнике упоминается, что он никогда не используется на практике, но это хорошее упражнение, чтобы понять соглашение об обучении. – amorimluc
Может быть. Но я бы потратил свое время на размышления о инструкциях типа «введите», «оставить», «cmpsd», «lea», все из которых делают довольно странные вещи, которые очень полезны при правильных обстоятельствах. –