Hello Alex.
19 Apr 05 05:21, you wrote to me: AK> Mon Apr 18 2005 22:33, Vladimir V. Teplouhov wrote to Alex Kouznetsov:
VVT>>>> Предже чем провести операцию на стеке - надо сперва загрузить VVT>>>> туда данные, потом выгрузить результат. Вот в этих командах VVT>>>> без адреса никак не обойтись.
AK>>> "Чушь стонала и охала" (с), прекрасно можно обойтись, достаточно AK>>> иметь литералы. Почитай как работают фортовские команды @ и !
VVT>> есть и такие команды конечно. VVT>> Hо как ты собрался сперва загрузить этот адрес на стек, подумал?
AK> Литералом, ессно, как тебе было сказано прямым текстом. AK> Аль не знаешь, что такое литерал?
понятия не имею - в процах такого изврата нет, и нафиг не надо.
Или ты про форт? Hу и каша же у тебя в голове :)
В форте одна такая команда фактически требует нескольких сотен комманд процессора - и нафиг такой изврат на нормальном языке и проце не нужен - компилятор сразу сгенерит команды, которые обращаются на прямую к переменным без этих извратов.
В общем форт конечно интересная система, просто классика теории программирования, но нигде кроме как для раскрутки с нуля на голой машине(для чего он собсно и создавался) нафиг не нужен. Hынче проще написать на другой машине где все есть и откомпилить кросс-компилятором. Писать компилятор на форте не предлагать - их уже готовых с открытыми исходниками сколько хошь, так что проехали можно сказать...
VVT>> Впринципе кажется в транспютерах была сделана загрузка по 4 бита VVT>> в байтовой команде - типа сдвигается и прибавляется 4 бита из поля VVT>> данных комманды. Hо чтобы загрузить 4 байта адреса понадобится VVT>> 8 байт кодов операций, оно надо, если по-уму в большинстве случаев VVT>> можно обойтись одним?
AK> Почитай как это делается в стековых процессорах, например, Ignite (ShBoom)
что-то новое уже сложно придумать - все давно придумано :)
AK>>> Знаешь ли ты, в каких командах стековой машины действительно трудно AK>>> или невозможно обойтись без адреса в теле команды?
VVT>> ну и в каких же?
AK> Переходы по адресу ;-)))
кстати это-то как раз можно и через стек реализовать. Хотя операция загрузки константы все равно понадобится :)
... VVT>> именно семантикой языка. VVT>> Если в выражении паскаля всего 2 приоритета операций то впринципе
AK> С какого бодуна их там всего 2? Даже при простой разборке инфиксных AK> формул надо иметь штук 7 приоритетoв двухместных операций, как у
с такого - операции типа умножения и типа сложения. Hу еще может один-два можно нарыть если булевские посчитать и с одним операндом которые.
В общем потребности в хранении большого количества промежуточных результатов просто нет. (форт редкий изврат - хранит результаты функций на самом стеке, когда во всех нормальных процах для этого есть другой стек)
Проще говоря, почисти себе мозги после форта :) То с чем проц работает аппаратно - тоесть арифметические операции и тп просто не требует большого стека, причем этот стек внутри проца и тащить это дерьмо в память просто нафиг не надо - на то он и стек для промежуточных результатов, которые нигде больше нафиг не нужны. Вот вложенность процедур и функций может быть большая, да, и для нее нужен большой стек, но он обычно храниться в памяти и ничем не ограничен. И всякое промежуточное дерьмо на нем обычно не считают чтобы на тормозило из-за лишних обращений к памяти. Hу а встроенный в проц стек это по сути те-же РОH, только с другим способом адресации, и нафиг там не надо хранить чего-то много или долго - для этого есть переменные и другие стеки. (так-же на тех стеках выделяется место для хранения временных переменных функций и процедур)
Vladimir