|
|
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
ИзопропилEolt, на стеке память выделять будешь? автоматически можно выделять, изначально задается некая глубина стека, которая проверяется внутри каждого PUSH, когда подходишь к границе, добавляешь еще памяти, или освобождаешь, если стек уменьшается авторк параметрам и локальным переменным обращаться как будешь - вычислять позицию всякий раз относительно текущего указателя стека? об этом еще не думал ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2016, 15:38 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Eoltавторк параметрам и локальным переменным обращаться как будешь - вычислять позицию всякий раз относительно текущего указателя стека? об этом еще не думал Старые добрые книжки по информатике 50 летней давности напоминают нам что любое вычислительное устройство должно иметь порт (или API) ввода-вывода. Грош цена твоим стековым операциям если на них невозможно взглянуть глазами или ввести туда что-то. Не забуть про это. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2016, 16:03 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2016, 14:19 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
maytonГрош цена твоим стековым операциям если на них невозможно взглянуть глазами или ввести туда что-то. Не забуть про это. Сделать команды чтения со-стека в память, и в память со-стека дело 5 минут, об этом можно не беспокоится даже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2016, 14:40 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltСделать команды чтения со-стека в память, и в память со-стека дело 5 минут, об этом можно не беспокоится даже. Одна мелочь: у стековой машины нет памяти. А на дисплее автоматически светится число в голове стека. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2016, 15:45 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovEoltСделать команды чтения со-стека в память, и в память со-стека дело 5 минут, об этом можно не беспокоится даже. Одна мелочь: у стековой машины нет памяти. А на дисплее автоматически светится число в голове стека. У стековой машины есть память и есть команды доступа к ней. Еще раз напоминаем о существовании JVM & Forth. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2016, 17:33 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Тут остается открытый вопрос "что есть такое стековая машина"? Ткните в нее пальцем, тогда будет видно - есть / нет. А пока, что: стековая машина, это то, где "создатели" вначале написали "работаем на стеке". В этом смысле и Pascal, и C - тоже стековые машины. Параметры в процедуры/функции через стек передаются ))) А если вспомнить, что Java вообще задумывался (рекламировался) как язык, где "НЕ будет прямой работы с памятью и указателями" - то слова "У стековой машины есть память и есть команды доступа к ней" звучать прямо кощунственно ))). IMHO & AFAIK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2016, 18:18 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
А вообще термин из микроэлектронники. В начале 80-х было 3-и основных веяния: солидные машины с нормальным набором регистров - двух/трех операндные инструкции недо-машины/микропроцессоры - где регистры "не поместились" поэтому сделали обрезок в виде регистра-аккумулятора. стековые машины - где от регистров и проблем с их выделение предлагали вообще отказаться, все на стеке ==== В реальной жизни, понятно, все сильно смешано. Да и говорим мы не про "микропроцессоры", а про программные "поделки". И программировать "только на стеке" сложно (хотя и можно), поэтому возникает потребность в переменных (особенно для циклов). Только, насколько помню, в печатной книжке (нач.90) про FORTH, переменные это было где-то к концу книги. А сначала учили выражения (слова, функции) составлять так, что бы на стеке выполнялись ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2016, 18:27 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevДля человека "обратная польская нотация" конечно не очень удобная форма записи. Пытаться на стеке строить работу с памятью, условные выражения, а тем более циклы - изощренный садизм. Не соглашусь. Так уж получилось, что первое мое знакомство с ЭВМ произошло именно со стековой машиной и обратной польской записью выражений. И с моей точки зрения (как и любого ребенка в такой ситуации) нет ничего более логичного, удобного и понятного. Плюс стек+ОБЗ+косвенная адресация позволяет творить невероятные вещи в плане написания сверхоптимизированного программного кода. При емкости памяти в 105 шагов программы существовали шахматные и шашечные программы! Если сейчас рассказать студенту о шахматной программе размером в 100 байт, он только повертит пальцем у виска, типо такого быть не может в принципе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2016, 19:55 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Eolt, давай определение своей стековой машины, а то больно она на калькулятор смахивает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2016, 20:02 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevТут остается открытый вопрос "что есть такое стековая машина"? Ткните в нее пальцем, тогда будет видно - есть / нет. На картинке машина с аппаратным стеком. Игрушка для гиков. Но рабочая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2016, 20:07 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltLeonid KudryavtsevТут остается открытый вопрос "что есть такое стековая машина"? Ткните в нее пальцем, тогда будет видно - есть / нет. На картинке машина с аппаратным стеком. Игрушка для гиков. Но рабочая. Вы ее хотите эмулировать ? Так нет проблем. множетсов инструкций любого современного процессора с лихвой порывают множестов инструкций программируемого калькулятора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2016, 22:05 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
МК-52/60 показывают на дисплее вершину стека. Но разве это то что нужно автору? Он создаёт калькулятор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2016, 22:29 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
maytonОн создаёт калькулятор? похоже на то. Про параметры, локальные переменные, типы данных, свёртку стека - тишина... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.01.2016, 22:33 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevТут остается открытый вопрос "что есть такое стековая машина"?По существу, на свете есть только три типа вычислительных устройств: регистровые, стековые и автоматы (TM, DFA, NFA, etc). Все существующие на сегодня машины относятся к одному из этих трех типов. У первых двух есть память, у автоматов памяти нет. Leonid KudryavtsevА пока, что: стековая машина, это то, где "создатели" вначале написали "работаем на стеке". В этом смысле и Pascal, и C - тоже стековые машины. Параметры в процедуры/функции через стек передаются ))) А если вспомнить, что Java вообще задумывался (рекламировался) как язык, где "НЕ будет прямой работы с памятью и указателями" - то слова "У стековой машины есть память и есть команды доступа к ней" звучать прямо кощунственно ))).Ты путаешь язык и его реализацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 00:24 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
White Owlсвете есть только три типа вычислительных устройств: регистровые, стековые и автоматы (TM, DFA, NFA, etc). Все существующие на сегодня машины относятся к одному из этих трех типов. У первых двух есть память, у автоматов памяти нет. Не знал. Наверное так ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 10:14 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
ДохтаРВы ее хотите эмулировать ? я хочу эмулировать стековую машину, без каклй либо связи с существующими аналогами реализованными в железе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 12:45 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltДохтаРВы ее хотите эмулировать ? я хочу эмулировать стековую машину, без каклй либо связи с существующими аналогами реализованными в железе Смотри чел. Ты можешь действительно взять байткод JVM и выбросить из него те опкоды которые тебе не нужны и использовать. В дополнение к чисто стековым машинам. Я не уверен что JVM является чисто-стековой. Она лишена РОН-ов но тем не менее использует адресуемую память в пределах текущего потока (или стекфрейма я не помню точно). В данном примере который я скопипастил из JVM8 spec видно что аргумент цикла инкременируется через iinc 1 1. Буквально это int переменная номер 1 увеличивает значение на 1. Код: java 1. 2. 3. 4. A compiler might compile spin to: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. Вобщем... нечего тебе тут больше искать птичьего молока. Бери и юзай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 13:05 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
ИзопропилПро параметры, локальные переменные, типы данных, свёртку стека - тишина... Примерные параметры: . Число виртуальных вычислительных ядер - 1 . Разрядность стека ВМ - 128 бит . Управление глубиной стека - автоматическое . Разрядность внешних шин данных и адреса - 32 бит . Объём виртуальной адресуемой памяти - 4 Гбайт . Объём физической адресуемой памяти - 4 Гбайт . примитивные типы данных (любые которые укладываются в диапазон от 8 до 128 бит) . сборщик мусора - отсуствует . JIT - отсуствует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 13:05 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
maytonВобщем... нечего тебе тут больше искать птичьего молока. Бери и юзай. Я от туда и беру сейчас, сравниваю с синтаксисом команд MSIL, Форта и пытаюсь выбрать наиболее удобную реализацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 13:16 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
То-есть хочется для себя спроектировать что-то железячно-подобное? Тогда еще наводящие вопросы: 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 байт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 13:21 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
0. Где будут храниться/браться инструкции ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 13:23 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevВ наше время это выглядит аналогично "640 Kb должно хватит всем" ( C ) Почему 4 Gb, а не 2^128 байт? я хочу использовать 32-битный компилятор, а 32-битный процесс не может выделить памяти более 4 Гб, на практике около 3.5 гб на 64-битной Windows. Так что 4 гига более чем достаточно, дальше физический предел для 32-битного кода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 13:33 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev3. Стек/стеки будут выделенные и/или размещаться в основной "физической адресуемой памяти". Функции стека можно реализовать с использованием массива переменной длинны, или буфера памяти выделяемого через VirtualAlloc ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 13:40 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Ну если свой "ассемблер", то адресуемая память!=физически установленной. А закладывать жесткий лимит в OpCodes, уже плохо. Вроде так и не сказано, "зачем это надо?". 1) Просто для себя некий свой виртуальный проц. 2) Некий для себя удобный ЯЗЫК программирования a la Forth 3) Среда выполнения для чего-то конкретного. Например: 3.1. интеграция с какой либо системой. 3.2. промежуточный язык описания/хранения для компилятора (пи-код) 3.3. что-то еще 4) Абстрактная сферическая среда выполнения для сферических коней и с нужным кол-вом вакуума, что бы все возможные сферические кони могли в данный вакуум сферично поместиться. От этого и нужно отталкиваться. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 13:45 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39149094&tid=1340805]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
111ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 378ms |

| 0 / 0 |
