Описание поп в Ассамблее
Я учусь на IA32. Когда я думаю о том, что popl DEST
инструкция делает я думаю следующее:
movl (%esp), DEST
addl $4, %esp
Но потом я начал догадываться, когда думал о popl %esp
, Несмотря на то, что это, вероятно, бессмысленная инструкция, я думаю, что, возможно, есть лучший способ подумать об общем описании popl DEST
инструкция. Как бы вы описали это?
1 ответ
Вот небольшая часть псевдокода для инструкции POP из документации Intel:
IF StackAddrSize = 32
THEN
IF OperandSize = 32
THEN
DEST ← SS:ESP; (* Copy a doubleword *)
ESP ← ESP + 4;
ELSE (* OperandSize = 16*)
...
FI;
...
Но вот что это говорит конкретно о POP xSP
:
Инструкция POP ESP увеличивает указатель стека (ESP) до того, как данные в старой вершине стека будут записаны в место назначения.
Это означает, что последовательность
PUSH ESP
POP ESP
не делает ничего необычного, как этот:
PUSH EAX
POP EAX
Точно так же есть текст на PUSH xSP
:
Инструкция PUSH ESP выдвигает значение регистра ESP в том виде, в каком оно существовало до выполнения инструкции. Если инструкция PUSH использует операнд памяти, в котором регистр ESP используется для вычисления адреса операнда, адрес операнда вычисляется перед уменьшением регистра ESP.