|
|
|
Виртуальный ассемблер для виртуальной стековой машины.
|
|||
|---|---|---|---|
|
#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 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=31&tid=1340805]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
40ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
| others: | 216ms |
| total: | 361ms |

| 0 / 0 |
