Почему поп принимает параметр в сборке? - PullRequest
7 голосов
/ 31 марта 2010
popl   %ebp

Кажется, %ebp не нужен, потому что для операции pop в стеке не нужен параметр.

Почему это имеет смысл?

Ответы [ 3 ]

9 голосов
/ 31 марта 2010

С http://www.cs.virginia.edu/~evans/cs216/guides/x86.html

pop - Pop pop

Команда pop удаляет 4-байтовый элемент данных с вершины стека, поддерживаемого аппаратным обеспечением, в указанный операнд (то есть регистр или ячейку памяти). Сначала он перемещает 4 байта, расположенные в ячейке памяти [SP], в указанный регистр или ячейку памяти, а затем увеличивает SP на 4.

Синтаксис
pop
pop

Примеры
pop edi - вставляет верхний элемент стека в EDI.
pop [ebx] - вставляет в память верхний элемент стека с четырьмя байтами, начиная с местоположения EBX.

Еще один хороший справочник - http://en.wikibooks.org/wiki/X86_Assembly, и он доступен в PDF-форме .

6 голосов
/ 31 марта 2010

этот параметр устанавливает пункт назначения.

3 голосов
/ 31 марта 2010

Чтобы расширить ответ Андрея, помимо увеличения указателя стека на элемент popped, элемент popped также копируется в адрес назначения или регистр. Инструкция, которую вы дали, более или менее эквивалентна двум инструкциям (синтаксис Intel)

add esp,4
mov [ss:esp-4],ebp

который, я думаю, в синтаксисе att (gas)

add $4, %esp
mov %ss-4(%esp), %ebp
...