Описание поп в Ассамблее

Я учусь на 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.

Другие вопросы по тегам