Какова ширина стека в архитектуре Intel IA32? - PullRequest
5 голосов
/ 30 июня 2010

Ширина стека 8 бит для архитектуры IA32 и для всех типов микропроцессоров / микроконтроллеров.

Я сейчас читаю http://ozark.hendrix.edu/~burch/csbsju/cs/350/handouts/x86.html о языке ассемблера.При объяснении «вызова» он говорит, что указатель стека уменьшается на 4, а счетчик программ помещается в стек.Означает ли это, что ширина буфера стека составляет 8 бит, потому что счетчик программы имеет длину 32 бита?Я попытался найти его в руководстве по разработке программного обеспечения для архитектуры Intel IA32, но не могу подтвердить это.

Спасибо Сян

Ответы [ 4 ]

5 голосов
/ 30 июня 2010

В архитектуре IA32 память адресуется в байтах.

Следовательно, чтобы поместить в стек еще 4 байта, вам необходимо сместить указатель стека на 4.

3 голосов
/ 30 июня 2010

Впервые слышу о "ширине стека".

push / pop / call / ret имеют ширину по умолчанию (которая соответствует режиму работы процессоров). Но стек как таковой не имеет ширины. (Выравнивание - это совсем другая история.)

Из документов Intel (для push):

"In non-64-bit modes: if the address-size and operand-size attributes are 32,
the 32-bit ESP register (stack pointer) is decremented by 4.
If both attributes are 16, the 16-bit SP register (stack pointer)
is decremented by 2."

[...]

"In 64-bit mode, the instruction’s default operation size is 64 bits.
In a push, the 64-bit RSP register (stack pointer) is decremented by 8."

Для руководств (которые всегда имеют последнее слово) проверьте: Руководства по процессорам Intel

3 голосов
/ 30 июня 2010

Операции, которые помещают значения в «стек» для процессора x86 (например, операции, включающие ESP, такие как PUSH, CALL и т. Д.), Все передают 4-байтовые приращения. Эффективная ширина стека составляет 4 байта / 32 бита. Если вы кодируете процессор x64, он имеет ширину 8 байт, но вы спросили о IA32.

У меня всегда был указатель стека, выровненный по границе 4 байта (DWORD). Я не знаю, можете ли вы DWORD-выровнять стек и заставить его работать должным образом; если это произойдет, вы заплатите серьезную потерю производительности при доступе к памяти для толчков и всплывающих окон (что очень часто делается в реальном коде), потому что реальный процессор хочет читать небольшими порциями размера два *.

2 голосов
/ 30 июня 2010

Это означает, что 8 бит - это наименьшая адресуемая единица памяти в наборе команд (байт). Все адреса памяти в IA32 представляют собой кратные 8 битам смещения в ОЗУ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...