Какова ширина стека в архитектуре Intel IA32?

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

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

Спасибо Sziang

5
задан sziang 30 June 2010 в 04:58
поделиться

4 ответа

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

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

5
ответ дан 18 December 2019 в 14:42
поделиться

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

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

3
ответ дан 18 December 2019 в 14:42
поделиться

Я впервые слышу о «ширине стека».

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
ответ дан 18 December 2019 в 14:42
поделиться

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

2
ответ дан 18 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: