Mon Apr 18 2005 22:33, Vladimir V. Teplouhov wrote to Alex Kouznetsov:
VVT>>> Предже чем провести операцию на стеке - надо сперва загрузить VVT>>> туда данные, потом выгрузить результат. Вот в этих командах VVT>>> без адреса никак не обойтись.
AK>> "Чушь стонала и охала" (с), прекрасно можно обойтись, достаточно AK>> иметь литералы. Почитай как работают фортовские команды @ и !
VVT> есть и такие команды конечно. VVT> Hо как ты собрался сперва загрузить этот адрес на стек, подумал?
Литералом, ессно, как тебе было сказано прямым текстом. Аль не знаешь, что такое литерал?
VVT> Впринципе кажется в транспютерах была сделана загрузка по 4 бита VVT> в байтовой команде - типа сдвигается и прибавляется 4 бита из поля VVT> данных комманды. Hо чтобы загрузить 4 байта адреса понадобится VVT> 8 байт кодов операций, оно надо, если по-уму в большинстве случаев VVT> можно обойтись одним?
Почитай как это делается в стековых процессорах, например, Ignite (ShBoom)
AK>> Знаешь ли ты, в каких командах стековой машины действительно трудно AK>> или невозможно обойтись без адреса в теле команды?
VVT> ну и в каких же?
Переходы по адресу ;-)))
VVT>>>>> В общем в этом смысле РОH или VVT>>>>> стек чем-то кэш напоминает :) Hу а произвольный доступ ко всем РОH VVT>>>>> чаще всего и не нужен - компилятор всегда может переставить команды VVT>>>>> местами так, чтобы все нормально адресовалось по принципу стека VVT>>>>> (причем собсно само так получается когда в польскую запись VVT>>>>> переводишь). Поэтому в коде команды и "адрес" РОH тоже лишний.
AK>>>> Ты говоришь это на основе собственного опыта и знаний, или это твои AK>>>> фантазии и иллюзии, навеянные упомянутой тобой "книжкой из AK>>>> библиотеки", которую ты когда-то видел? Какие у тебя есть основания, AK>>>> чтобы заявлять, что "компилятор всегда может..."?
VVT>>> определяется семантикой языка.
AK>> В огороде бузина...
VVT> именно семантикой языка. VVT> Если в выражении паскаля всего 2 приоритета операций то впринципе
С какого бодуна их там всего 2? Даже при простой разборке инфиксных формул надо иметь штук 7 приоритетoв двухместных операций, как у Баранова и Ноздрунова:
Таблица 3.1. Приоритеты двухместных операций ┌──────────&#
9472;┬─────┬───^
72;─┬─────┬─── ;──┬─────┬──& #9472;──┬─────┐ │ Приоритет │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ ├──────────&#
9472;┼─────┼───^
72;─┼─────┼─── ;──┼─────┼──& #9472;──┼─────┤ │ Операция │ OR │ AND │ = │ < │ + │ * │ │ │ │ XOR │ │ │ > │ - │ / │
** │ │ │ │ │ │ │ │ MOD │ │ └──────────&#
9472;┴─────┴───^
72;─┴─────┴─── ;──┴─────┴──& #9472;──┴─────┘ VVT> всегда можно обойтись 3 регистрами стека для данных - 2 для самой VVT> операции и 1 для хранения предыдущего результата.
"Чушь стонала и охала" (с)
VVT> Потому часто стек и ограничивают всего 4 регистрами.
"Чушь стонала и охала" (с)
VVT> (кстати впринципе в регистрах VVT> можно хранить только верхушку, а остальное отправлять в память - тогда VVT> размер стека будет как бы не ограничен,
это так
VVT> но такое хорошо только для форта,
"Чушь стонала и охала" (с)
VVT> для всего остального такое обычно не надо - все нормальные языки VVT> умеют работать с переменными по-нормальному и обычно долго на стеке VVT> или в РОH ничего не храниться)
"Чушь стонала и охала" (с)
Пока, Алексей