|
|
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
mikronEolt, мне тоже сразу на память пришла реализация ФОРТА. Ты пока этот совет упорно игнорируеш. Посмотри на язык - очень интересная и мощная штука. Говорять есть даже реализации на уровне железа. Я уже посмотрел форт. Язык очень похож на MSIL и байткод JVM. Но я не нашел реализации в исходниках на Си, а если ее нет. То встроить в свой проект форт не получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 18:51 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltЧего то совсем не ясно. Что даже два числа не можем сложить? Можем ведь. И никаких инструкций касающхся аккумулятора нет. Код: plaintext 1. 2. 3. 4. Ты что, не понял, что ты в команде ADD выполнил доступ ко ВТОРОМУ значению стека на момент исполнения команды? Хотя я говорил - доступ имеется только к вершине. Если есть доступ к элементу НЕ на вершине - это ни хрена не стек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 22:38 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
AkinaТы что, не понял, что ты в команде ADD выполнил доступ ко ВТОРОМУ значению стека на момент исполнения команды? С какого бодуна это я получил доступ ко второму элемента стека? Команда ADD это по сути макрос из 2 команд POP и команды PUSH На псевдоязыке выгляди так: ADD{ int var1=Stack.Pop; int var2=Stack.Pop; Stack.Push (p1 + p2); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 22:59 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
На гитхабе нашел пару виртуальных ассемблеров: https://github.com/nkottary/vm https://github.com/niccaluim/tinyvm думаю на основе их вполне можно сделать что-то свое, так что видимо вопрос закрыт) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 23:02 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
C ошибкой написал пример, но думаю все равно понятно: Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 23:11 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltЯ уже посмотрел форт. Язык очень похож на MSIL и байткод JVM. Но я не нашел реализации в исходниках на Си, а если ее нет. То встроить в свой проект форт не получится. На C нормальные люди Forth не делают. Т.к. это по сути среда выполнения совмешенная с компилятором. Слова (процедуры) низкого уровня реализуют на Asm и уже через них, реализуют все остальные слова языка. Фактически определяют на Asm слово : и ; и базовые Asm'инструкции. После чего, все остальные элементы языка уже реализуют на Forth. Делать Forth компилятор на C банально НЕ удобно. Можно посмотреть любую реализацию на Asm и подумать, как добавить интеграцию со своим проектом. В первую очередь - обеспечить безопасную среду исполнения. Но не очень понятно, желание иметь стеково-подобный язык. Проще, найти библиотеку более-менее нормального скриптового языка. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 23:51 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevНо не очень понятно, желание иметь стеково-подобный язык. Высокая скорость работы байт-кода. При правильной реализации всего на 15-20% медленнее чем машинный x86-64 код. А если архитектура процессора поддерживает аппаратные стеки, то и на уровне машинного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 01:14 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevНо не очень понятно, желание иметь стеково-подобный язык. Проще, найти библиотеку более-менее нормального скриптового языка. IMHO Насколько я понимаю, интерес автора чисто академический. И возможности он заказывает минимальные. Как другая крайность - 8 элеметарных команд и лента символов. Тьюринг-полная машина. Или Кнут-овский гипотетический процессор со своим ассемблером. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 02:14 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltAkinaТы что, не понял, что ты в команде ADD выполнил доступ ко ВТОРОМУ значению стека на момент исполнения команды? С какого бодуна это я получил доступ ко второму элемента стека? Команда ADD это по сути макрос из 2 команд POP и команды PUSH На псевдоязыке выгляди так: ADD{ int var1=Stack.Pop; int var2=Stack.Pop; Stack.Push (p1 + p2); } Зачем усложнять ? Я вам выше уже пытался сказать , что с таким подходом вы будете создавать пролемы себе и тем кто это будет читать, отлаживать рефакторить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 02:38 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltLeonid KudryavtsevНо не очень понятно, желание иметь стеково-подобный язык. Высокая скорость работы байт-кода. При правильной реализации всего на 15-20% медленнее чем машинный x86-64 код. А если архитектура процессора поддерживает аппаратные стеки, то и на уровне машинного. По сравнению с чем ? ИМХО Как только вы начнете работать с мутексами многопоточностью и сетевыми сокетами у вас все выровняется с кодом на С/С++ Java, erlаng... разница будет на уровне статистической погрешности. зы Кстате может вы в сторону erlаng посмотирте .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 02:54 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
почему бы просто LLVM не задействовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 10:59 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltКоманда ADD это по сути макрос из 2 команд POP и команды PUSH Кто-то просил нижний уровень... значит, эта команда НЕ НУЖНА. Вообще. Потому что она реализуется последовательностью команд нижнего уровня. EoltНа псевдоязыке выгляди так: ADD{ int var1=Stack.Pop; int var2=Stack.Pop; Stack.Push (var1 + var2); } У тебя целых два аккумулятора - var1 и var2. А ты говорил - ни одного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 13:08 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
ДохтаРЗачем усложнять ? Я наоборот упрощаю. Изопропилпочему бы просто LLVM не задействовать? это что-то большое, сложное и требующее много времени на изучение AkinaКто-то просил нижний уровень... Просил нижний уровень виртуальной машины. С точки зрения ее логики это самая низкоуровневая команда, ниже ее она ничего не знает. авторзначит, эта команда НЕ НУЖНА. Вообще. Потому что она реализуется последовательностью команд нижнего уровня. Разумеется нужна. Иначе как ВМ будет складывать числа в стеке. EoltУ тебя целых два аккумулятора - var1 и var2. А ты говорил - ни одного. Нет здесь аккумуляторов. А есть виртуальный микрокод команды ADD. На х86 процах он будет один, на КР580 другой, а на каком-нибудь стековом FORTH_SHIP вообще заменится вызовом аппаратной команды процессора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 14:45 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Eoltэто что-то большое, сложное и требующее много времени на изучение на коленке ваять стековую машину - быстро не выйдет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 15:15 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
После чтения документации по-стековым машинам и форту, удалось сформировать вот такой минимальный список команд работы со стеком: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Этого более чем достаточно, чтобы реализовать все мыслимые операции со стеком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 15:41 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltЭтого более чем достаточно, чтобы реализовать все мыслимые операции со стеком. а что с типами данных? что за адреса ? как дела с очисткой стека при возврате и обработке исключений? через какую задницу параметры предполагается извлекать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 16:32 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Изопропил, нужны команды для арифметики в стеке, управление памятью, ветвления, вызовы нативных функций и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 18:15 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltПосле чтения документации по-стековым машинам и форту, удалось сформировать вот такой минимальный список команд работы со стеком: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Этого более чем достаточно, чтобы реализовать все мыслимые операции со стеком. Еще кину 5 копеек. JVM Spec определяет еще несколько экзотических 2.11.6 Operand Stack Management Instructions A number of instructions are provided for the direct manipulation of the operand stack: pop, pop2, dup, dup2, dup_x1, dup2_x1, dup_x2, dup2_x2 , swap. Например dup2_x2 : Стек: (4,3,2,1) После использования : (2,1,4,3,2,1) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 19:33 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltНет здесь аккумуляторов. А есть виртуальный микрокод команды ADD. На х86 процах он будет один, на КР580 другой, а на каком-нибудь стековом FORTH_SHIP вообще заменится вызовом аппаратной команды процессора. Хочется внести фнудаментальную терминологическую ясность и отделить мух от колет.. С унарными операторами все ясно. Как быть с бинарными опрациями ? x=y+z и опционально с классическими С-шныму словиями вида ?: ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 19:53 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Eoltуправление памятью подробнее с этого места PS диагноз - не взлетит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 19:55 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltИзопропил, нужны команды для арифметики в стеке, управление памятью, ветвления, вызовы нативных функций и т.д. В классическом случае стек памятью никак не управляет, кроме указателя на вершину, которая лежит в специальном стековом регистре, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 20:03 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
maytonJVM Spec определяет еще несколько экзотических 2.11.6 Operand Stack Management Instructions A number of instructions are provided for the direct manipulation of the operand stack: pop, pop2, dup, dup2, dup_x1, dup2_x1, dup_x2, dup2_x2 , swap. Например dup2_x2 : Стек: (4,3,2,1) После использования : (2,1,4,3,2,1) Ну это как я понимаю сделано для ускорения работы байткода. Чтобы компилятор мог выполнить простейшие оптимизации, когда попадается последовательность: Код: plaintext 1. 2. он ее заменяет на Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 22:30 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
ДохтаРКак быть с бинарными опрациями ? 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. стек пуст ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 22:44 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
ИзопропилEoltуправление памятью подробнее с этого места PS диагноз - не взлетит Нужны команды запроса памяти у ОС - MEM_ALLOC освобождение памяти - MEM_FREE ну и копирования, со стека в память и с памяти в стек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2016, 22:48 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Eolt, на стеке память выделять будешь? к параметрам и локальным переменным обращаться как будешь - вычислять позицию всякий раз относительно текущего указателя стека? возьми за основу JVM - она достаточно простая, убери что кажется лишним ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2016, 11:42 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=39148572&tid=1340805]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 199ms |
| total: | 366ms |

| 0 / 0 |
