2013-02-17 4 views
1

Я изучаю IA32. Когда я думаю о том, что делает popl DEST инструкции я думаю следующее:Decribing pop in Assembly

movl (%esp), DEST 
addl $4, %esp 

Но потом я начал второй угадывание себя, когда я думал о popl %esp. Несмотря на то, что это, вероятно, бессмысленная инструкция, я думаю, что, вероятно, лучше всего думать об общем описании инструкции popl DEST. Как бы вы это описали?

+0

Извините, что кто-то не нашел мой вопрос полезным. Пожалуйста, не стесняйтесь комментировать его, чтобы я мог улучшить вопросы в будущем. –

ответ

3

Вот небольшая часть псевдокоде для инструкции 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 будет декрементирован.

+0

Итак, похоже, что я решил описать это как документация от Intel. Для «pop% esp» есть только специальное примечание, в котором говорится, что он сначала увеличивает указатель стека. –

 Смежные вопросы

  • Нет связанных вопросов^_^