|
|
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Где бы найти подробное описание такого ассемблера? Нужен минимально необходимый список команд, чтобы организовать выполнение байт-кода на стеке. Примерный список: - Арифметические команды (тут все понятно, ADD, SUB, DIV, etc) - Управление стеком (малопонятно, LOAD, STORE, PUSH, POP, DUP.... что еще?) - Условные переходы (...) - Обработка ошибок (...) Т.е. чтобы не изобретать велосипед, а взять готовые семантику и описание команд. MSIL и всякие "assembly language for JVM bytecode programming" не подходят, по-причинами монструозности, избыточности и приколоченности гвоздями к среде. Нужно что-то простое и понятное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 15:44 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltНужен минимально необходимый список команд Ну тогда Eolt- Управление стеком (малопонятно, LOAD, STORE, PUSH, POP, DUP.... что еще?) Достаточно PUSH и POP, всё остальное избыточно. А остальные пункты никак не соотносятся со СТЕКОВОЙ машиной и в общем идентичны для всех... что же до минимизации - просто выброси лишнее (например, зачем SUB, если есть ADD?)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 15:51 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
AkinaДостаточно PUSH и POP, всё остальное избыточно. POP - это просто выталкивание данных из стека в пустоту? Тогда и STORE нужна, чтобы совместить выталкивание с записью данных по-определенному адресу. Не все так просто там. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 15:59 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltPOP - это просто выталкивание данных из стека в пустоту? В указанный регистр http://www.kolasc.net.ru/cdo/programmes/assembler/pop.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 16:02 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Dima TВ указанный регистр http://www.kolasc.net.ru/cdo/programmes/assembler/pop.html У виртуальной стековой машины нет регистров ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 16:04 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltDima TВ указанный регистр http://www.kolasc.net.ru/cdo/programmes/assembler/pop.html У виртуальной стековой машины нет регистров ИМХО Такого быть не может. Если есть стек, то должен быть как минимум акумулятор и стековый регистр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 16:16 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
ДохтаРИМХО Такого быть не может. Если есть стек, то должен быть как минимум акумулятор и стековый регистр. Может. С точки зрения программиста, у стековой машины есть только стек. И доступ только к вершине стека. Никаких команд доступа к каким-то регистрам там нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 16:19 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
ИМХО Сколько переменных вам нужно, что бы реализовать рекурсию ( количество параметров рекурсивной функции) для решения задачи , столько должно быть виртуальных регистров в виртуальной стековой машине. В противном случае вы создадите для себя и других лишнюю работу сэкономив на спичках. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 16:22 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltДохтаРИМХО Такого быть не может. Если есть стек, то должен быть как минимум акумулятор и стековый регистр. Может. С точки зрения программиста, у стековой машины есть только стек. И доступ только к вершине стека. Никаких команд доступа к каким-то регистрам там нет. Чем вас не устраивает стандартные API стековых контейнеров из БУСТ или СТЛ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 16:24 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Насчет условных переходов, допустим вот такое условие Код: c# 1. 2. 3. 4. На стеке оно будет выполнено так, как я представляю себе Код: plaintext 1. 2. 3. 4. 5. 6. 7. по сути все условные проверки можно свести к проверке равно 0 или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 16:37 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Не понятно для чего это нужно. Если исполнитель уже есть (например JVM), то нужно брать его команды. Если исполнителя нет, то взять какую нибудь примитивную реализацию того же Forth'а. Слово "ассемблер в вакууме", мне не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 17:02 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
ДохтаРЧем вас не устраивает стандартные API стековых контейнеров из БУСТ или СТЛ ? даже не знаю. Их можно использовать из FASM`а? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 17:20 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Eolt- Управление стеком (малопонятно, LOAD, STORE, PUSH, POP, DUP.... что еще?) Ну народ упоминает: LIT - Положить на стек данных непосредственные данные, следующие за командой LIT @ - Разыменовать - взять данные из памяти по адресу из стека данных и поместить их на стек вместо этого адреса ! - присвоить - по адресу, лежашему на вершине стека данных, записать в память данные, лежащие в стеке под вершиной. DUP продублировать вершину стека DROP Удалить верхний элемент стека OVER продублировать элемент стека, лежащий под вершиной SWAP поменять местами два верхних элемента стека ROT ??? Eolt- Условные переходы (...) NOP BRANCH - безусловный переход по непосредственному адресу ?BRANCH - условный переход по непосредственному адресу CALL - вызов подпрограммы по непосредственному адресу RET - возврат из подпрограммы >R переместить верхний элемент стека данных на стек возвратов R> переместить верхний элемент стека возвратов на стек данных RDROP удалить верхний элемент стека возвратов R@ копировать верхний элемент стека возвратов на стека данных Eolt- Обработка ошибок (...) В ассемблере? Тогда уж скорее речь может идти об обработки прерываний IMHO (для процессоров) или не локальные goto (как в C). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 17:22 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltPOP - это просто выталкивание данных из стека в пустоту? В аккумулятор. EoltС точки зрения программиста, у стековой машины есть только стек. С точки зрения программиста у него есть доступ только к вершине стека. В отсутствие аккумулятора у него нет никакой возможности выполнить какую-либо двухоперандовую операцию. Аккумулятор есть ВСЕГДА. А что он представляет из себя - регистр, указатель или что-то иное,- это незначащие мелочи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 17:22 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
AkinaEoltPOP - это просто выталкивание данных из стека в пустоту? В аккумулятор. Нафиг аккамулятор? Обычно аккумулятор == верх стека. AFAIK Иногда дают прямой доступ к N-элементам стека под видом регистров. Например 8087 со-процессоры AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 17:25 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevНе понятно для чего это нужно. Если исполнитель уже есть (например JVM), то нужно брать его команды. Если исполнителя нет, то взять какую нибудь примитивную реализацию того же Forth'а. Слово "ассемблер в вакууме", мне не понятно. Чтобы исполнять код не в виде машинных инструкций, а на программной реализации стековой машины. Исполнителя нет. Брать команды из JVM не имеет смысла, потому как там непонятно как обрабатываются исключения например. Нужен исходник какой-нибудь несложной, но в тоже время законченной VM на Си. И описание байткода(ассемблера) к ней ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 17:27 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Eolt... Нужен исходник какой-нибудь несложной, но в тоже время законченной VM на Си. И описание байткода(ассемблера) к ней Посмотреть реализацию какой нибудь Forth машины. Только простые реализации не на C, а на ASM. Т.к. Forth кроме как исполнитель, еще и компилятор. Делать его на C достаточно бессмысленно. Как я понимаю, у стековых машин главная проблема - типы данных. Т.к. тип данных определяется типом данных на стеке. JVM в этом смысле достаточно хитрая система, т.к. поддерживает объекты. Я реализация какой нибудь стековой машины из 80-х годов умеющий только 16-битный int - сейчас нафиг ни кому не сдалась. В общем, слова "несложная, но законченная" так же не сильно понятны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 17:34 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Akina В отсутствие аккумулятора у него нет никакой возможности выполнить какую-либо двухоперандовую операцию. Чего то совсем не ясно. Что даже два числа не можем сложить? Можем ведь. И никаких инструкций касающхся аккумулятора нет. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 17:35 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Eolt... POP ; снимает результат со стека. Стек чист Куда снимаем? Тогда уж лучше слово DROP IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 17:42 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevКуда снимаем? Тогда уж лучше слово DROP IMHO В данном случае никуда. Это просто очистка стека. В jvm есть инструкция load которая снимает значение с вершины стека и записывает его по-определенному адресу. Проще говоря присваивает какой-то переменной значение лежащее на вершине стека. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 17:49 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Еще непонятно, как на стековой машине реализуются процедуры/функции, со своими локальными переменными. Есть какие-то специальные опкоды, которые разграничивают байт-код на функции? У каждой процедуры свой стек или общий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 17:52 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltЕще непонятно, как на стековой машине реализуются процедуры/функции, со своими локальными переменными. Есть какие-то специальные опкоды, которые разграничивают байт-код на функции? У каждой процедуры свой стек или общий? AFAIK Общий AFAIK локальных переменных как таковых нет. Зачем они. Все же на стеке. Просто функция должна после себя корректный стек оставлять. Поэтому важны методы более-менее удобного доступа к N-верхним элементам стека. А то получается не программирование, а задача о ханойской башне ))) AFAIK Тут самое сложное циклы. Т.к. хранить счетчик и/или условия выхода из цикла на стеке - это совсем через одно место. С арифметикой (без циклов) проблем быть не должно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 18:03 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
авторAFAIK локальных переменных как таковых нет. Зачем они. Все же на стеке Кстати да, попробовал перевести такой вот псевдокод: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Получается вот такой код для стековой машины: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. видимо действительно не нужно как-то разделять процедуры и локальные переменные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 18:10 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltДохтаРЧем вас не устраивает стандартные API стековых контейнеров из БУСТ или СТЛ ? даже не знаю. Их можно использовать из FASM`а? Разделяемую библиотеку можно использовать откуда угодно, если знать адрес входа и сигратуры вызовов.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 18:33 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Eolt, мне тоже сразу на память пришла реализация ФОРТА. Ты пока этот совет упорно игнорируеш. Посмотри на язык - очень интересная и мощная штука. Говорять есть даже реализации на уровне железа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2016, 18:39 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltФункции стека можно реализовать с использованием массива переменной длинны, или буфера памяти выделяемого через VirtualAlloc Будет ли стек виден как "другая память" внутри нашего процессора. То есть, на уровне инструкций этого псевдо-процессора стек будет просто отдельным "закрытым" устройством или он будет объединен с "другая памятью" и просто предоставлять к ней доступ (как стек в классических процессорах, просто доступ в память по указателю SP/BP) Ну и другой ключевой вопрос: Откуда будет поступать инструкции Как они будут идентифицироваться В принципе, исполнительное устройство тоже команды может брать из другого (очередного) стека ))) Т.е. будет 3-х/4-х стековая машина: стек инструкций стек данных стек возврата (сохраненное состояние, которое нужно восстановить при возврате из подпрограмм/прерываний) дополнительный стек для временных данных - х.з. зачем, но подозреваю, что ряд алгоритмов заточенных под стековые машины без него будет тяжело переносить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 13:58 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
[quot Leonid Kudryavtsev Вроде так и не сказано, "зачем это надо?". [/quot] Например я хочу засекретить работу какого-нибудь участка кода программы. Если его скомпилировать в нативное приложение, хакер используя дизассемблер и отладчик легко поймет логику работы и взломает программу. Но если его скомпилировать в код виртуальной машины, просто взлом уже не возможен, нужен как минимум сложный анализ работы ВМ, что сильно удорожает взлом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 14:02 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Eolt[ Например я хочу засекретить работу какого-нибудь участка кода программы. Если его скомпилировать в нативное приложение, хакер используя дизассемблер и отладчик легко поймет логику работы и взломает программу. Но если его скомпилировать в код виртуальной машины, просто взлом уже не возможен, нужен как минимум сложный анализ работы ВМ, что сильно удорожает взлом. Мне кажется что хакеру не нужно реверс-инжинерить весь алгоритм. Возможно я не знаю специфики их работы но основное направление хакерства - это ломание процедуры проверки регистрации. Для этого не нужно реверсить всё. И сильно сомневаюсь что хакер глубоко копает идеи. Он - практик. Если вы хотите спасать вашу идею или ноу-хау от кражи - то тут мне кажется лучше защищаться как-то по другому. Продавать не приложение а сервис там... Продавать физическое устройство без которого ваше ПО не работает. USB-брелок. Не уверен что это на 100% удобно. Надо курить форумы железячников. Но вобщем как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 14:35 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
авторпримитивные типы данных (любые которые укладываются в диапазон от 8 до 128 бит) int 8,16,32,64,128? float 16,32,64,128 ? битовые наборы, короткие строки? SSE/AVX что-то напоминает Eolt. JIT - отсуствует а как же скорость обеспечить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 16:17 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Изопропила как же скорость обеспечить? написать полноценный компилятор из байткода в нативный код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 17:12 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltИзопропила как же скорость обеспечить? написать полноценный компилятор из байткода в нативный код На написание хорошего компиллятора уходят годы. А с учётом того что ты спрашиваешь самые общие вопросы по стеку - можно предположить что на вхождение в саму теорию еще годик-два накинуть. Вобщем сфера эта узкая. Специфичная. И мало кто ей хочет заниматься. Я где-то читал что Касперыч использует подобную вирт-машину. И вроде-бы она от версии к версии меняет свой микро-код. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 17:15 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
maytonНа написание хорошего компиллятора уходят годы. Тут не C++ надо компилировать, а код типа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Это даже не компилятор, а транслятор из одного низкоуровневого языка в другой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 17:20 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltЭто даже не компилятор, а транслятор из одного низкоуровневого языка в другой В какой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 17:25 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
maytonEoltЭто даже не компилятор, а транслятор из одного низкоуровневого языка в другой В какой? Байткод в ассемблер x86 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 17:30 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Eoltmaytonпропущено... В какой? Байткод в ассемблер x86 Бро. Тут есть какие-то взаимоисключающие параграфы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 17:35 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Скомпилировал и выполнил первый рабочий код Выражение: 1+2+3-7 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. в бинарном виде код занял 88 байт, потому как добавлены поля для отладочной информации. В режиме Release размер будет меньше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 18:00 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Eoltmaytonпропущено... В какой? Байткод в ассемблер x86 ИМХУ Антивирусы поубивают такую нездоровую активность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 18:41 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevНу и другой ключевой вопрос: Откуда будет поступать инструкции Поскольку ВМ написана на языке высокого уровня, то можно использовать любой удобный вариант: - Массив инструкций - какая-нибудь сложная конструкция из вложенных массивов и структур авторКак они будут идентифицироваться Можно сделать тупой вариант. Один большой switch и куча case`ов. Но это слишком примитивно. Я хочу сделать адресный интерпретатор и прямой шитый код По скорости работы практически ничем не отличается от нативного кода ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 19:58 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltСкомпилировал и выполнил первый рабочий код Выражение: 1+2+3-7 оптимизатор должен сделать push 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 23:22 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Изопропилоптимизатор должен сделать push 0 у тебя с математикой туго видимо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 23:24 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Изопропилоптимизатор должен сделать push 0 push -1 , конечно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 23:24 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Прикольное видео прямо по-теме байткода и виртуальным машинам: [youtube= ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 23:26 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltПо скорости работы практически ничем не отличается от нативного кода блажен кто верует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2016, 23:32 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Изопропилблажен кто верует я не верю, я знаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2016, 01:38 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltИзопропилблажен кто верует я не верю, я знаю У меня возникли сомнения в твоей компетенции. Ты так легко жонглируешь словами и бравируешь своей уверенностью что я должен задать вопрос. У тебя есть опыт разработки компилляторов? P.S. Положа руку на сердце я сам не специалист именно в области компилляции. Но слушая тебя - берёт оторопь! Кто ты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.01.2016, 01:07 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
Все играюсь с виртуальной машиной. Идея безусловно работает. Можно даже программки писать в байт-коде. Только это трудно. Нужно визуализировать в голове работу стека. Этакий тренажер для мозгов :) Появилась мысль написать транслятор какого-то скриптового языка в байт-код ВМ. Это намного интереснее, чем просто реализовывать команды ВМ по-списку, точно не зная понадобятся они или нет. Пока думаю над языками: JavaScript, VBScript, OberonScript. Для первых двух есть готовые реализации синтаксических анализаторов. Oberon - довольно симпатичный язык с красивым паскалевским синтаксисом. Но практически мёртвый, как и все детища Вирта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2016, 21:37 |
|
||
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#18+
EoltНужно визуализировать в голове работу стека. Этакий тренажер для мозгов :) этим должен заниматься компилятор «человек должен думать, а машины должны работать». ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2016, 00:06 |
|
||
|
|

start [/forum/topic.php?all=1&fid=16&tid=1340805]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
149ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
72ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 468ms |

| 0 / 0 |
