Понятие регистров и стека
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Понятие регистров и стека - 2008-10-30 22:05:33.140000
|
|
|
Mend
Сообщений: 15
Оценки: 0
Присоединился: 2008-10-28 08:22:46.700000
|
Начал учить асм. И опять натолкнулся на описание регистров и стека, о которых много раз читал. Но как оказалось так и не понял смысл прочитанного. Может кто нибудь объяснить как это все работает. То есть при запуске программы что куда помещается и что в процессе происходит. Надеюсь понятно сформулировал, в поиске не нашел.
|
|
|
RE: Понятие регистров и стека - 2008-10-30 23:13:17.900000
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
quote:
Регистр процессора — сверхбыстрая память внутри процессора, предназначенная прежде всего для хранения промежуточных результатов вычисления (регистр общего назначения/регистр данных) или содержащая данные, необходимые для работы процессора — смещения базовых таблиц, уровни доступа и т. д. (специальные регистры). Доступ к значениям, хранящимся в регистрах как правило в несколько раз быстрее чем доступ к ячейкам оперативной памяти (даже если кеш-память содержит нужные данные), но объем оперативной памяти намного превосходит суммарный объем регистров (объем среднего модуля оперативной памяти сегодня составляет 1 Гб - 4 Гб[1], суммарная «ёмкость» регистров общего назначения/данных для процессора Intel 80x86 16 битов * 4 = 64 бита (8 байт)). То есть физически каждый регистр - это маленький кусок памяти внутри самого процессора. Маленький, но оооочень быстрый. Со стеком сложнее. Для начала почитай про очереди LIFO (ну и FIFO заодно, чтобы понять разницу), иначе будет сложно врубиться в схему его работы. Физически у стека бывают разные реализации. В простейшем случае стек - это просто кусок оперативной памяти, на который указывает один из регистров. Поскольку доступ к регистрам - самый быстрый, и адрес вершины стека уже лежит там (то есть его не нужно никак высчитывать, просто бери и используй), то обращение к этой памяти также происходит на порядок быстрее, чем к обычным переменным. Со стеком главное не запутаться в терминах. Стек, как и LIFO, - это просто названия принципа работы. А как этот принцип используется - другой вопрос. Например, в более высокоуровневых языках стек может создаваться программно просто как цепочка связанныъ кусков памяти, и может нести любую информацию, которую вложит туда программист. При этом такой программный-стек-цепочка отличается от стека вызовов подпрограмм (который и используется, когда ты пишешь push smth) и сосуществует с ним рядом: стек вызовов - при вызове процедур, программный стек - по усмотрению программиста. Более подробно о стеке вызовов, который тебя, видимо, и интересует, здесь: http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D0%BA_%D0%B2%D1%8B%D0%B7%D0%BE%D0%B2%D0%BE%D0%B2
|
|
|
RE: Понятие регистров и стека - 2008-10-31 09:38:55.763333
|
|
|
ZoAs
Сообщений: 10
Оценки: 0
Присоединился: 2008-10-31 09:25:31.133333
|
Вот на этом сайте объяснено хорошо: kalashnikoff.ru. Вроде с первого раза понять можно.
|
|
|
RE: Понятие регистров и стека - 2008-10-31 12:54:36.916666
|
|
|
Смаил
Сообщений: 49
Оценки: 0
Присоединился: 2008-10-31 08:59:57.420000
|
quote:
ORIGINAL: ZoAs Вот на этом сайте объяснено хорошо: kalashnikoff.ru. Вроде с первого раза понять можно. Я прочитала, действительно все понятно, никаких вопросов не возникло.
|
|
|
RE: Понятие регистров и стека - 2008-10-31 19:41:37.113333
|
|
|
Mend
Сообщений: 15
Оценки: 0
Присоединился: 2008-10-28 08:22:46.700000
|
Спасибо ответившим, вроде стало прояснятся
|
|
|
|
|