Ширина стека 8 битов шириной для архитектуры IA32 и для всех микропроцессоров/микроконтроллеров типов.
Я в настоящее время читаю http://ozark.hendrix.edu/~burch/csbsju/cs/350/handouts/x86.html об ассемблере. При объяснении "вызова" это говорит, что указатель вершины стека уменьшается на 4, и счетчик команд является нажатием в стек. Это означает, что ширина буфера стека имеет 8 битов шириной, потому что счетчик команд 32 бита длиной? Я пытался найти его в руководстве разработки программного обеспечения архитектуры intel IA32, но не может, казаться, подтвердить это.
Спасибо Sziang
В архитектуре IA32 память адресуется в байтах.
Следовательно, чтобы поместить в стек еще 4 байта, вам нужно сместить указатель стека на 4.
Все операции, которые помещают значения в «стек» для процессора x86 (например, операции, связанные с ESP, такие как PUSH, CALL и т. Д.), Передаются с 4-байтовыми приращениями. Эффективная ширина стека составляет 4 байта / 32 бита. Если вы пишете код для процессора x64, он имеет ширину 8 байт, но вы спрашивали об IA32.
У меня всегда был указатель стека, выровненный по 4-байтовой границе (DWORD). Я не знаю, можно ли DWORD-неверно выровнять стек и заставить его работать правильно; если это произойдет, вы заплатите серьезную потерю производительности при доступе к памяти для push и pop (что очень часто делается в реальном коде), потому что реальный процессор хочет читать небольшими фрагментами размером с степень двойки.
Я впервые слышу о «ширине стека».
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
Это означает, что 8 бит - это наименьшая адресуемая единица памяти в наборе команд (байт). Все адреса памяти в IA32 представляют собой смещение в ОЗУ, кратное 8 битам.