powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Виртуальный ассемблер для виртуальной стековой машины.
25 сообщений из 98, страница 3 из 4
Виртуальный ассемблер для виртуальной стековой машины.
    #39149082
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилEolt,

на стеке память выделять будешь?

автоматически можно выделять, изначально задается некая глубина стека, которая проверяется внутри каждого PUSH, когда подходишь к границе, добавляешь еще памяти, или освобождаешь, если стек уменьшается

авторк параметрам и локальным переменным обращаться как будешь - вычислять позицию всякий раз относительно текущего указателя стека?

об этом еще не думал
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39149094
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eoltавторк параметрам и локальным переменным обращаться как будешь - вычислять позицию всякий раз относительно текущего указателя стека?

об этом еще не думал
Старые добрые книжки по информатике 50 летней давности напоминают нам что
любое вычислительное устройство должно иметь порт (или API) ввода-вывода.

Грош цена твоим стековым операциям если на них невозможно взглянуть глазами или ввести туда что-то.

Не забуть про это.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39149653
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltДохтаРКак быть с бинарными опрациями ?
x=y+z

и опционально с классическими С-шныму словиями вида ?: ?

Не понятен вопрос. В приниципе все по-тому же принципу:

x=y+z

1. кладем на стек адрес переменной z (нужно придумать команду для этой операции)
2. выполняем RVALUE (она снимает адрес с вершины стека и кладет на его место содержимое переменной z)
3. кладем на стек адрес переменной y
4. выполняем RVALUE
5. вызываем ADD (снимаются последовательно значения x,y и кладется на вершину их сумма)
6. кладем на стек адрес переменной x
7. снимаем с вершины адрес x и сумму (x+y) и копируем ее по адресу x
8. стек пуст
Присоединяюсь к выводу:
ИзопропилPS диагноз - не взлетит

Стек тем и хорош для ВЫЧИСЛЕНИЙ ВЫРАЖЕНИЙ, что не нужно никаких переменных и их выделения. Все вычисления делаются на стеке, из стека берутся данные, на стеке вычисляются, в стеке возвращаются.

Для человека "обратная польская нотация" конечно не очень удобная форма записи. Но у компилятора она получается автоматом, просто при упорядоченном проходе по дереву выражения. AFAIK & IMHO (могу ошибаться) Т.ч. для компиляторов промежуточный код, напоминающий "стековые" и/или "обратную польской нотацию", крайне удобен для представления результатов компиляции МАТЕМАТИЧЕСКИХ ВЫРАЖЕНИЙ.

Пытаться на стеке строить работу с памятью, условные выражения, а тем более циклы - изощренный садизм.

Если стоит задача придумать байт-код для своего компилятора/интерпретатора - то тогда проще отталкиваться от синтаксиса и существующего кода.Т.к. скорее-всего исходный язык совсем "не для стековой машины", то стека в этом байт-коде, должно быть минимальное кол-во. Т.е. будет не столько "наличие стека", сколько "отсутствие регистров" для арифметики и все.

Тот же байт-код JVM, насколько я представляю, НЕ совсем стековый, достаточно НЕ минимальный и, в принципе, явно затачивался под язык.

IMHO & AFAIK
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39149707
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonГрош цена твоим стековым операциям если на них невозможно взглянуть глазами или ввести туда что-то.
Не забуть про это.

Сделать команды чтения со-стека в память, и в память со-стека дело 5 минут, об этом можно не беспокоится даже.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39149793
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltСделать команды чтения со-стека в память, и в память со-стека дело 5 минут, об этом можно не беспокоится даже.
Одна мелочь: у стековой машины нет памяти. А на дисплее автоматически светится число в голове стека.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39149953
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovEoltСделать команды чтения со-стека в память, и в память со-стека дело 5 минут, об этом можно не беспокоится даже.
Одна мелочь: у стековой машины нет памяти. А на дисплее автоматически светится число в голове стека.
У стековой машины есть память и есть команды доступа к ней.
Еще раз напоминаем о существовании JVM & Forth.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150002
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тут остается открытый вопрос "что есть такое стековая машина"?

Ткните в нее пальцем, тогда будет видно - есть / нет.

А пока, что: стековая машина, это то, где "создатели" вначале написали "работаем на стеке". В этом смысле и Pascal, и C - тоже стековые машины. Параметры в процедуры/функции через стек передаются )))

А если вспомнить, что Java вообще задумывался (рекламировался) как язык, где "НЕ будет прямой работы с памятью и указателями" - то слова "У стековой машины есть память и есть команды доступа к ней" звучать прямо кощунственно ))).

IMHO & AFAIK.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150010
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще термин из микроэлектронники. В начале 80-х было 3-и основных веяния:

солидные машины с нормальным набором регистров - двух/трех операндные инструкции
недо-машины/микропроцессоры - где регистры "не поместились" поэтому сделали обрезок в виде регистра-аккумулятора.
стековые машины - где от регистров и проблем с их выделение предлагали вообще отказаться, все на стеке
====
В реальной жизни, понятно, все сильно смешано. Да и говорим мы не про "микропроцессоры", а про программные "поделки".

И программировать "только на стеке" сложно (хотя и можно), поэтому возникает потребность в переменных (особенно для циклов). Только, насколько помню, в печатной книжке (нач.90) про FORTH, переменные это было где-то к концу книги. А сначала учили выражения (слова, функции) составлять так, что бы на стеке выполнялись )))
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150073
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevДля человека "обратная польская нотация" конечно не очень удобная форма записи.

Пытаться на стеке строить работу с памятью, условные выражения, а тем более циклы - изощренный садизм.


Не соглашусь. Так уж получилось, что первое мое знакомство с ЭВМ произошло именно со стековой машиной и обратной польской записью выражений. И с моей точки зрения (как и любого ребенка в такой ситуации) нет ничего более логичного, удобного и понятного. Плюс стек+ОБЗ+косвенная адресация позволяет творить невероятные вещи в плане написания сверхоптимизированного программного кода. При емкости памяти в 105 шагов программы существовали шахматные и шашечные программы!
Если сейчас рассказать студенту о шахматной программе размером в 100 байт, он только повертит пальцем у виска, типо такого быть не может в принципе.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150078
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

давай определение своей стековой машины, а то больно она на калькулятор смахивает
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150086
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevТут остается открытый вопрос "что есть такое стековая машина"?

Ткните в нее пальцем, тогда будет видно - есть / нет.


На картинке машина с аппаратным стеком. Игрушка для гиков. Но рабочая.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150144
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltLeonid KudryavtsevТут остается открытый вопрос "что есть такое стековая машина"?

Ткните в нее пальцем, тогда будет видно - есть / нет.


На картинке машина с аппаратным стеком. Игрушка для гиков. Но рабочая.

Вы ее хотите эмулировать ?
Так нет проблем.
множетсов инструкций любого современного процессора с лихвой порывают
множестов инструкций программируемого калькулятора.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150148
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МК-52/60 показывают на дисплее вершину стека.

Но разве это то что нужно автору? Он создаёт калькулятор?
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150152
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonОн создаёт калькулятор?
похоже на то. Про параметры, локальные переменные, типы данных, свёртку стека - тишина...
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150187
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevТут остается открытый вопрос "что есть такое стековая машина"?По существу, на свете есть только три типа вычислительных устройств: регистровые, стековые и автоматы (TM, DFA, NFA, etc). Все существующие на сегодня машины относятся к одному из этих трех типов. У первых двух есть память, у автоматов памяти нет.

Leonid KudryavtsevА пока, что: стековая машина, это то, где "создатели" вначале написали "работаем на стеке". В этом смысле и Pascal, и C - тоже стековые машины. Параметры в процедуры/функции через стек передаются )))

А если вспомнить, что Java вообще задумывался (рекламировался) как язык, где "НЕ будет прямой работы с памятью и указателями" - то слова "У стековой машины есть память и есть команды доступа к ней" звучать прямо кощунственно ))).Ты путаешь язык и его реализацию.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150329
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owlсвете есть только три типа вычислительных устройств: регистровые, стековые и автоматы (TM, DFA, NFA, etc). Все существующие на сегодня машины относятся к одному из этих трех типов. У первых двух есть память, у автоматов памяти нет.

Не знал. Наверное так
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150492
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаРВы ее хотите эмулировать ?


я хочу эмулировать стековую машину, без каклй либо связи с существующими аналогами реализованными в железе
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150519
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltДохтаРВы ее хотите эмулировать ?


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

В дополнение к чисто стековым машинам. Я не уверен что JVM является чисто-стековой. Она лишена РОН-ов
но тем не менее использует адресуемую память в пределах текущего потока (или стекфрейма я не помню точно).
В данном примере который я скопипастил из JVM8 spec видно что аргумент цикла инкременируется через iinc 1 1.
Буквально это int переменная номер 1 увеличивает значение на 1.

Код: java
1.
2.
3.
4.
int i;
for (i = 0; i < 100; i++) {
  ; // Loop body is empty
}


A compiler might compile spin to:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
0 iconst_0 // Push int constant 0
1 istore_1 // Store into local variable 1 (i=0)
2 goto 8 // First time through don't increment
5 iinc 1 1 // Increment local variable 1 by 1 (i++)
8 iload_1 // Push local variable 1 (i)
9 bipush 100 // Push int constant 100
11 if_icmplt 5 // Compare and loop if less than (i < 100)
14 return // Return void when done




Вобщем... нечего тебе тут больше искать птичьего молока. Бери и юзай.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150520
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилПро параметры, локальные переменные, типы данных, свёртку стека - тишина...
Примерные параметры:

. Число виртуальных вычислительных ядер - 1
. Разрядность стека ВМ - 128 бит
. Управление глубиной стека - автоматическое
. Разрядность внешних шин данных и адреса - 32 бит
. Объём виртуальной адресуемой памяти - 4 Гбайт
. Объём физической адресуемой памяти - 4 Гбайт
. примитивные типы данных (любые которые укладываются в диапазон от 8 до 128 бит)
. сборщик мусора - отсуствует
. JIT - отсуствует
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150539
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonВобщем... нечего тебе тут больше искать птичьего молока. Бери и юзай.

Я от туда и беру сейчас, сравниваю с синтаксисом команд MSIL, Форта и пытаюсь выбрать наиболее удобную реализацию.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150550
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То-есть хочется для себя спроектировать что-то железячно-подобное?

Тогда еще наводящие вопросы:

1. Будут ли прерывания (если железячно-подобное и/или будут требоваться много thread выполнение)
2. Сколько стеков?
В Forth принято 2-а стека: стек данных, стек адресов возвратов (only, но возможно ручное использования не по назначению /доступ к данным в первом стеке методом "Ханнойская башня" ))) / )
В JVM, как я понимаю (НЕ ЗНАЮ, предполагаю), то же два, но совсем другие: cтек данных (данные инструкций JVM), стек потока (адреса возвратов + локальные переменные + что-то еще)
3. Стек/стеки будут выделенные и/или размещаться в основной "физической адресуемой памяти".

4. Желательная размерность инструкций. Максимальная длина инструкции (инструкция+операнды). Будет ли требоваться выравнивание инструкций.
5. Будет ли оптимизация OpCodes с точки зрения "плотности" кода

6. Будет ли требоваться какая либо защита стека/стеков при входе в ф-цию/программный модуль ?
7. Будет ли требоваться какая либо защита остальной памяти (страничная организация?) ?

etc...
Eolt. Разрядность стека ВМ - 128 бит
...
. Объём виртуальной адресуемой памяти - 4 Гбайт
. Объём физической адресуемой памяти - 4 Гбайт
...

В наше время это выглядит аналогично "640 Kb должно хватит всем" ( C )
Почему 4 Gb, а не 2^128 байт?
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150555
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0. Где будут храниться/браться инструкции ?
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150574
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВ наше время это выглядит аналогично "640 Kb должно хватит всем" ( C )
Почему 4 Gb, а не 2^128 байт?

я хочу использовать 32-битный компилятор, а 32-битный процесс не может выделить памяти более 4 Гб,
на практике около 3.5 гб на 64-битной Windows. Так что 4 гига более чем достаточно, дальше физический предел
для 32-битного кода
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150581
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev3. Стек/стеки будут выделенные и/или размещаться в основной "физической адресуемой памяти".


Функции стека можно реализовать с использованием массива переменной длинны, или буфера памяти выделяемого через VirtualAlloc
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150587
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если свой "ассемблер", то адресуемая память!=физически установленной. А закладывать жесткий лимит в OpCodes, уже плохо.

Вроде так и не сказано, "зачем это надо?".
1) Просто для себя некий свой виртуальный проц.
2) Некий для себя удобный ЯЗЫК программирования a la Forth
3) Среда выполнения для чего-то конкретного. Например:
3.1. интеграция с какой либо системой.
3.2. промежуточный язык описания/хранения для компилятора (пи-код)
3.3. что-то еще
4) Абстрактная сферическая среда выполнения для сферических коней и с нужным кол-вом вакуума, что бы все возможные сферические кони могли в данный вакуум сферично поместиться.

От этого и нужно отталкиваться. IMHO & AFAIK
...
Рейтинг: 0 / 0
25 сообщений из 98, страница 3 из 4
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Виртуальный ассемблер для виртуальной стековой машины.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]