Всегда ли ширина стека равна размеру регистра процессора? - PullRequest
3 голосов
/ 21 августа 2009

Например, для 8-разрядного ЦП размер стека должен быть 8-разрядным, 16-разрядный ЦП против ширины 16-разрядного стека, 32-разрядный 64-разрядный ЦП и т. Д. , Это верно для всех архитектур?

Ответы [ 4 ]

5 голосов
/ 21 августа 2009

ЦП имеет шину данных и адресную шину. Они могут иметь одинаковую ширину, но часто это не так.

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

Другие регистры в основном имеют дело с данными, и поэтому имеют те же измерения, что и шина данных. Но, как обычно, есть исключения.

Взять старый пример. 6502. 8-битный процессор (8-битная шина данных, 16-битная адресная шина). Он имеет (более или менее) регистры общего назначения X и Y и «аккумулятор», называемый A. Все 8-битные регистры. Существует указатель стека и указатель инструкций, указатель стека имеет 8 явных и 8 неявных битов (стек всегда находится в одной и той же 256-байтовой области) и, следовательно, регистр указателя стека имеет 8 битов, указатель инструкций имеет 16 битов 1007 *

8086, имеет 16-битную шину данных и 20-битную адресную шину. Общие регистры где 8 (и 16 бит). Указатель инструкции и указатель стека где 16 бит, но используются регистры сегмента (также 16 бит) для получения полного 20 битного адреса.

4 голосов
/ 21 августа 2009

8-битный процессор, ожидаемый размер стека быть 8-битной шириной

Вы можете этого ожидать, но вы ошибаетесь. Основное использование стека - хранение и извлечение адресов возврата, а на 8-битных процессорах это фактически 16-битные значения. Например, инструкция Z80:

PUSH HL

помещает 16-битное значение (содержимое двух 8-битных регистров, H и L) в стек. Нет инструкции Z80, которая выдвигает 8-битное значение.

1 голос
/ 28 января 2012

Еще один момент, о котором еще не упоминалось, это то, что некоторые процессоры (например, семейство Microchip PIC) имеют выделенный стек, к которому нет доступа, как к обычному ОЗУ. В серии PIC16 стек привязан исключительно к счетчику программ, а размер стека (предположительно) такой же, как и у счетчика программ. В серии PIC18 стек и программный счетчик имеют ширину 21 бит; старшие 20 бит можно скопировать в или из счетчика программы; Код также может проверять верхний элемент стека как 5-битную часть и две 8-битные части.

1 голос
/ 21 августа 2009

На самом деле стек - это просто концепция, и «ширина стека» ничего не значит.

Предположительно, вы имеете в виду ширину элементов стека, но обычно вы можете хранить значения произвольного размера в любом стеке (с некоторыми отступами или выравниванием) независимо от размера ширины шины архитектуры или размера регистра.

Обратите внимание, что термины 8-битный, 16-битный и т. Д. Немного произвольны и не являются точными определениями, поэтому это усложняет любые попытки определения "ширины".

...