Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Вопрос по Хамахеру

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Прочее] >> Вопрос по Хамахеру
Имя
Сообщение << Старые топики   Новые топики >>
Вопрос по Хамахеру - 2009-05-30 19:15:18.306666   
nokiauser

Сообщений: 3
Оценки: 0
Присоединился: 2009-05-30 19:04:27.553333
Сейчас читаю Хамахера "Оргранизация ЭВМ". Там приведен пример работы со стеком, с соответствующей проверкой на пустоту или заполненность(адрес начала стека 2000, конца - 1500, SP - указатель вершины стека)

Но мне кажется, что правильнее должно быть так:

SAFEPOP Compare #2000,SP
Branch<0 EMPTYERROR
Move (SP)+, ITEM

SAFEPUSH Compare #1500, SP
Branch>=0 FULLERROR
Move ITEM, -(SP)

Help me, please

Post #: 1
RE: Вопрос по Хамахеру - 2009-05-31 01:27:10.400000   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
Вероятно у него всё-таки правильно. У него стек растёт вниз. Я не буду утверждать что так оно на всех архитектурах, но, скажем, на x86 – именно так.
Post #: 2
RE: Вопрос по Хамахеру - 2009-05-31 11:28:06.013333   
nokiauser

Сообщений: 3
Оценки: 0
Присоединился: 2009-05-30 19:04:27.553333
Не мог бы ты ответь подробнее? Он пишет, что стек заполняется начиная с адреса 2000 и до 1500
Post #: 3
RE: Вопрос по Хамахеру - 2009-05-31 13:27:39.186666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
А что непонятно? Первое значение, которое мы push, кладётся в конец памяти стека, то есть оно имеет наибольший адрес. А указатель стека при этом уменьшается. Ну да. Если почитать внимательнее тот псевдокод который он использует, так и есть. Когда происходит push указатель уменьшается. Когда pop – наоборот указатель увеличивается.
1500 SP 2000 -------empty--------++top======== Вот такая примерно картинка. `=' – это заполненная часть стека, `top' – элемент который лежит на вершине, `++' – место куда указывает SP, `-' – свободное место в стеке.
Post #: 4
RE: Вопрос по Хамахеру - 2009-05-31 17:19:09.603333   
nokiauser

Сообщений: 3
Оценки: 0
Присоединился: 2009-05-30 19:04:27.553333
Это понятно, вопрос мой совсем в другом, он касается проверки на пустоту и заполненность. У него написано( контроль на пустоту при выталкивании )

Compare #2000,SP ( compare выполняет 2000-sp)
Branch > 0 EMPTYERROR
MOVE (SP)+, NEWITEM

Но ведь, если 2000 - SP > 0, значит что sp указывает на меньший адрес и следовательно стек не пуст, а что-то содержит( а у него происходит ошибка пустоты). Поэтому я и высказал мнение,что должно быть Branch < 0, ведь тогда стек пуст. Аналогичная ситуация и с проверкой на заполненность.
Post #: 5
Страниц:  [1]
Все форумы >> [Прочее] >> Вопрос по Хамахеру







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.