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

Примерный список:

- Арифметические команды (тут все понятно, ADD, SUB, DIV, etc)
- Управление стеком (малопонятно, LOAD, STORE, PUSH, POP, DUP.... что еще?)
- Условные переходы (...)
- Обработка ошибок (...)

Т.е. чтобы не изобретать велосипед, а взять готовые семантику и описание команд.
MSIL и всякие "assembly language for JVM bytecode programming" не подходят, по-причинами монструозности, избыточности и приколоченности гвоздями к среде. Нужно что-то простое и понятное.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148327
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltНужен минимально необходимый список команд
Ну тогда
Eolt- Управление стеком (малопонятно, LOAD, STORE, PUSH, POP, DUP.... что еще?)
Достаточно PUSH и POP, всё остальное избыточно.
А остальные пункты никак не соотносятся со СТЕКОВОЙ машиной и в общем идентичны для всех... что же до минимизации - просто выброси лишнее (например, зачем SUB, если есть ADD?)...
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148337
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaДостаточно PUSH и POP, всё остальное избыточно.


POP - это просто выталкивание данных из стека в пустоту?
Тогда и STORE нужна, чтобы совместить выталкивание с записью данных по-определенному адресу.
Не все так просто там.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148343
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltPOP - это просто выталкивание данных из стека в пустоту?
В указанный регистр http://www.kolasc.net.ru/cdo/programmes/assembler/pop.html
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148346
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВ указанный регистр http://www.kolasc.net.ru/cdo/programmes/assembler/pop.html

У виртуальной стековой машины нет регистров
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148364
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltDima TВ указанный регистр http://www.kolasc.net.ru/cdo/programmes/assembler/pop.html

У виртуальной стековой машины нет регистров

ИМХО Такого быть не может.

Если есть стек, то должен быть как минимум акумулятор
и стековый регистр.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148367
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаРИМХО Такого быть не может.

Если есть стек, то должен быть как минимум акумулятор
и стековый регистр.

Может. С точки зрения программиста, у стековой машины есть только стек.
И доступ только к вершине стека. Никаких команд доступа к каким-то регистрам там нет.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148368
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО
Сколько переменных вам нужно,
что бы реализовать рекурсию ( количество параметров
рекурсивной функции) для решения задачи ,
столько должно быть виртуальных регистров
в виртуальной стековой машине.

В противном случае вы создадите для себя и других лишнюю работу
сэкономив на спичках.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148371
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltДохтаРИМХО Такого быть не может.

Если есть стек, то должен быть как минимум акумулятор
и стековый регистр.

Может. С точки зрения программиста, у стековой машины есть только стек.
И доступ только к вершине стека. Никаких команд доступа к каким-то регистрам там нет.

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

Код: c#
1.
2.
3.
4.
IF (A==19) 
{
  ....
}



На стеке оно будет выполнено так, как я представляю себе

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
--- стек пуст ---
1. PUSH XXX:   << записываем в стек АДРЕС ПЕРЕХОДА если условие не выполнится
2. PUSH A       << записываем пременную A в стек
3. PUSH 19      << записываем константу 19 в стек
4. SUB           << вычитаем A-19
5. IF(==0)      << если равно нулю то ничего не делаем, если не равно то переходим по АДРЕСУ ПЕРЕХОДА на вершине стека  
--- стек пуст ---



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

Если исполнитель уже есть (например JVM), то нужно брать его команды.
Если исполнителя нет, то взять какую нибудь примитивную реализацию того же Forth'а.

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

даже не знаю. Их можно использовать из FASM`а?
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148393
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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).
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148394
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltPOP - это просто выталкивание данных из стека в пустоту?
В аккумулятор.

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

Нафиг аккамулятор?

Обычно аккумулятор == верх стека. AFAIK
Иногда дают прямой доступ к N-элементам стека под видом регистров. Например 8087 со-процессоры AFAIK
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148399
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНе понятно для чего это нужно.

Если исполнитель уже есть (например JVM), то нужно брать его команды.
Если исполнителя нет, то взять какую нибудь примитивную реализацию того же Forth'а.

Слово "ассемблер в вакууме", мне не понятно.

Чтобы исполнять код не в виде машинных инструкций, а на программной реализации стековой машины.
Исполнителя нет. Брать команды из JVM не имеет смысла, потому как там непонятно как обрабатываются исключения например.
Нужен исходник какой-нибудь несложной, но в тоже время законченной VM на Си. И описание байткода(ассемблера) к ней
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148404
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt...
Нужен исходник какой-нибудь несложной, но в тоже время законченной VM на Си. И описание байткода(ассемблера) к ней

Посмотреть реализацию какой нибудь Forth машины.

Только простые реализации не на C, а на ASM. Т.к. Forth кроме как исполнитель, еще и компилятор. Делать его на C достаточно бессмысленно.

Как я понимаю, у стековых машин главная проблема - типы данных. Т.к. тип данных определяется типом данных на стеке. JVM в этом смысле достаточно хитрая система, т.к. поддерживает объекты.

Я реализация какой нибудь стековой машины из 80-х годов умеющий только 16-битный int - сейчас нафиг ни кому не сдалась.

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


Чего то совсем не ясно. Что даже два числа не можем сложить? Можем ведь. И никаких инструкций касающхся аккумулятора нет.

Код: plaintext
1.
2.
3.
4.
PUSH 1 ; кладем 1 на вершину стека
PUSH 2 ; кладем 2  на вершину стека
ADD ; команда снимает две константы со стека и кладе результ на стек
POP ; снимает результат со стека. Стек чист
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148408
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt...
POP ; снимает результат со стека. Стек чист

Куда снимаем? Тогда уж лучше слово DROP

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

В данном случае никуда. Это просто очистка стека. В jvm есть инструкция load которая снимает значение с вершины стека и записывает его по-определенному адресу. Проще говоря присваивает какой-то переменной значение лежащее на вершине стека.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148413
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще непонятно, как на стековой машине реализуются процедуры/функции, со своими локальными переменными.
Есть какие-то специальные опкоды, которые разграничивают байт-код на функции?
У каждой процедуры свой стек или общий?
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148423
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltЕще непонятно, как на стековой машине реализуются процедуры/функции, со своими локальными переменными.
Есть какие-то специальные опкоды, которые разграничивают байт-код на функции?
У каждой процедуры свой стек или общий?
AFAIK Общий

AFAIK локальных переменных как таковых нет. Зачем они. Все же на стеке. Просто функция должна после себя корректный стек оставлять. Поэтому важны методы более-менее удобного доступа к N-верхним элементам стека.

А то получается не программирование, а задача о ханойской башне ))) AFAIK

Тут самое сложное циклы. Т.к. хранить счетчик и/или условия выхода из цикла на стеке - это совсем через одно место. С арифметикой (без циклов) проблем быть не должно.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148429
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторAFAIK локальных переменных как таковых нет. Зачем они. Все же на стеке

Кстати да, попробовал перевести такой вот псевдокод:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
function Test(int y)
{
  int x=y+1;
  return x; 
}

function Main()
{  
   Test(int x=2);
}



Получается вот такой код для стековой машины:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 PUSH 2
 PUSH ADDR(x)
 DUP 
 STORE 
 PUSH  ADDR(y)
 STORE 
 PUSH 1
 PUSH @Y
 ADD
 PUSH  ADDR(X)
 DUP
 STORE  
 



видимо действительно не нужно как-то разделять процедуры и локальные переменные
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148445
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltДохтаРЧем вас не устраивает стандартные API
стековых контейнеров из БУСТ или СТЛ ?

даже не знаю. Их можно использовать из FASM`а?

Разделяемую библиотеку можно использовать откуда угодно,
если знать адрес входа и сигратуры вызовов....
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148451
mikron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,
мне тоже сразу на память пришла реализация ФОРТА. Ты пока этот совет упорно игнорируеш. Посмотри на язык - очень интересная и мощная штука. Говорять есть даже реализации на уровне железа.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148454
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mikronEolt,
мне тоже сразу на память пришла реализация ФОРТА. Ты пока этот совет упорно игнорируеш. Посмотри на язык - очень интересная и мощная штука. Говорять есть даже реализации на уровне железа.

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

Код: plaintext
1.
2.
3.
4.
PUSH 1 ; кладем 1 на вершину стека
PUSH 2 ; кладем 2  на вершину стека
ADD ; команда снимает две константы со стека и кладе результ на стек
POP ; снимает результат со стека. Стек чист


Ты что, не понял, что ты в команде ADD выполнил доступ ко ВТОРОМУ значению стека на момент исполнения команды? Хотя я говорил - доступ имеется только к вершине.
Если есть доступ к элементу НЕ на вершине - это ни хрена не стек.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148571
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaТы что, не понял, что ты в команде ADD выполнил доступ ко ВТОРОМУ значению стека на момент исполнения команды?

С какого бодуна это я получил доступ ко второму элемента стека?
Команда ADD это по сути макрос из 2 команд POP и команды PUSH
На псевдоязыке выгляди так:

ADD{
int var1=Stack.Pop;
int var2=Stack.Pop;
Stack.Push (p1 + p2);
}
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148572
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На гитхабе нашел пару виртуальных ассемблеров:

https://github.com/nkottary/vm
https://github.com/niccaluim/tinyvm

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

Код: plaintext
1.
2.
3.
4.
5.
ADD{
   int var1=Stack.Pop; 
   int var2=Stack.Pop;
   Stack.Push (var1+ var2);
}
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148595
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltЯ уже посмотрел форт. Язык очень похож на MSIL и байткод JVM. Но я не нашел реализации в исходниках на Си, а если ее нет.
То встроить в свой проект форт не получится.
На C нормальные люди Forth не делают. Т.к. это по сути среда выполнения совмешенная с компилятором. Слова (процедуры) низкого уровня реализуют на Asm и уже через них, реализуют все остальные слова языка. Фактически определяют на Asm слово : и ; и базовые Asm'инструкции. После чего, все остальные элементы языка уже реализуют на Forth.

Делать Forth компилятор на C банально НЕ удобно.

Можно посмотреть любую реализацию на Asm и подумать, как добавить интеграцию со своим проектом. В первую очередь - обеспечить безопасную среду исполнения.

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

Высокая скорость работы байт-кода. При правильной реализации всего на 15-20% медленнее чем машинный x86-64 код.
А если архитектура процессора поддерживает аппаратные стеки, то и на уровне машинного.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148638
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНо не очень понятно, желание иметь стеково-подобный язык. Проще, найти библиотеку более-менее нормального скриптового языка. IMHO
Насколько я понимаю, интерес автора чисто академический. И возможности он заказывает
минимальные.

Как другая крайность - 8 элеметарных команд и лента символов. Тьюринг-полная машина.

Или Кнут-овский гипотетический процессор со своим ассемблером.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148640
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltAkinaТы что, не понял, что ты в команде ADD выполнил доступ ко ВТОРОМУ значению стека на момент исполнения команды?

С какого бодуна это я получил доступ ко второму элемента стека?
Команда ADD это по сути макрос из 2 команд POP и команды PUSH
На псевдоязыке выгляди так:

ADD{
int var1=Stack.Pop;
int var2=Stack.Pop;
Stack.Push (p1 + p2);
}

Зачем усложнять ?

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

Высокая скорость работы байт-кода. При правильной реализации всего на 15-20% медленнее чем машинный x86-64 код.
А если архитектура процессора поддерживает аппаратные стеки, то и на уровне машинного.

По сравнению с чем ?

ИМХО
Как только вы начнете работать с мутексами
многопоточностью и сетевыми сокетами
у вас все выровняется с кодом на С/С++ Java, erlаng...
разница будет на уровне статистической
погрешности.


зы Кстате может вы в сторону erlаng посмотирте ....
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148680
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
почему бы просто LLVM не задействовать?
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148739
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltКоманда ADD это по сути макрос из 2 команд POP и команды PUSH
Кто-то просил нижний уровень... значит, эта команда НЕ НУЖНА. Вообще. Потому что она реализуется последовательностью команд нижнего уровня.
EoltНа псевдоязыке выгляди так:

ADD{
int var1=Stack.Pop;
int var2=Stack.Pop;
Stack.Push (var1 + var2);
}
У тебя целых два аккумулятора - var1 и var2. А ты говорил - ни одного.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148770
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДохтаРЗачем усложнять ?


Я наоборот упрощаю.

Изопропилпочему бы просто LLVM не задействовать?

это что-то большое, сложное и требующее много времени на изучение

AkinaКто-то просил нижний уровень...

Просил нижний уровень виртуальной машины. С точки зрения ее логики это самая низкоуровневая команда, ниже ее она ничего не знает.

авторзначит, эта команда НЕ НУЖНА. Вообще. Потому что она реализуется последовательностью команд нижнего уровня.


Разумеется нужна. Иначе как ВМ будет складывать числа в стеке.

EoltУ тебя целых два аккумулятора - var1 и var2. А ты говорил - ни одного.

Нет здесь аккумуляторов. А есть виртуальный микрокод команды ADD. На х86 процах он будет один, на КР580 другой, а на каком-нибудь стековом FORTH_SHIP вообще заменится вызовом аппаратной команды процессора.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148774
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eoltэто что-то большое, сложное и требующее много времени на изучение
на коленке ваять стековую машину - быстро не выйдет.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148778
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После чтения документации по-стековым машинам и форту, удалось сформировать
вот такой минимальный список команд работы со стеком:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
PUSH   - поместить значение в стек
POP     - удалить значение с вершины стека
DUP     -  сделать копию верхнего элемента стека
SWAP    - обмен местами 2 верхних параметров в стеке
ROT     - циклически переставляет 3 верхних элемента в стеке по-часовой стрелке
OVER    - продублировать на вершину второй элемент стека
PICK    - дублирует n-ый элемент стека на вершину
ROLL    - циклически переставляет n-верхних элементов в стеке по-часовой стрелке
RVALUE - поместить в стек содержимое объекта, адрес которой лежит на вершине стека
LVALUE - поместить в стек адрес в памяти, по которому расположен объект лежащий на вершине стека
LET    - rvalue-значение на вершине стека размещено по адресу предоставленному lvalue- значением, следующим за ним в стеке



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

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
PUSH   - поместить значение в стек
POP     - удалить значение с вершины стека
DUP     -  сделать копию верхнего элемента стека
SWAP    - обмен местами 2 верхних параметров в стеке
ROT     - циклически переставляет 3 верхних элемента в стеке по-часовой стрелке
OVER    - продублировать на вершину второй элемент стека
PICK    - дублирует n-ый элемент стека на вершину
ROLL    - циклически переставляет n-верхних элементов в стеке по-часовой стрелке
RVALUE - поместить в стек содержимое объекта, адрес которой лежит на вершине стека
LVALUE - поместить в стек адрес в памяти, по которому расположен объект лежащий на вершине стека
LET    - rvalue-значение на вершине стека размещено по адресу предоставленному lvalue- значением, следующим за ним в стеке



Этого более чем достаточно, чтобы реализовать все мыслимые операции со стеком.
Еще кину 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)
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148870
ДохтаР
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltНет здесь аккумуляторов. А есть виртуальный микрокод команды ADD.
На х86 процах он будет один, на КР580 другой, а
на каком-нибудь стековом FORTH_SHIP вообще заменится вызовом аппаратной команды
процессора.

Хочется внести фнудаментальную терминологическую ясность
и отделить мух от колет..

С унарными операторами все ясно.

Как быть с бинарными опрациями ?
x=y+z

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

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

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


В классическом случае стек памятью никак не управляет,
кроме указателя на вершину, которая лежит в специальном стековом регистре,
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148929
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
pop
pop



он ее заменяет на

Код: plaintext
1.
pop2
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148937
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. стек пуст
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39148939
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилEoltуправление памятью
подробнее с этого места

PS диагноз - не взлетит

Нужны команды запроса памяти у ОС - MEM_ALLOC
освобождение памяти - MEM_FREE
ну и копирования, со стека в память и с памяти в стек.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39149011
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eolt,

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

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

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

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

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

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

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

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

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

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

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

x=y+z

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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


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

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

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

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

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

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


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


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

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

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


A compiler might compile spin to:

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




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

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

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

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

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

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

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

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

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

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


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

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

От этого и нужно отталкиваться. IMHO & AFAIK
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150609
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltФункции стека можно реализовать с использованием массива переменной длинны, или буфера памяти выделяемого через VirtualAlloc
Будет ли стек виден как "другая память" внутри нашего процессора. То есть, на уровне инструкций этого псевдо-процессора стек будет просто отдельным "закрытым" устройством или он будет объединен с "другая памятью" и просто предоставлять к ней доступ (как стек в классических процессорах, просто доступ в память по указателю SP/BP)

Ну и другой ключевой вопрос:
Откуда будет поступать инструкции
Как они будут идентифицироваться

В принципе, исполнительное устройство тоже команды может брать из другого (очередного) стека ))) Т.е. будет 3-х/4-х стековая машина:

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

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

Мне кажется что хакеру не нужно реверс-инжинерить весь алгоритм. Возможно я не знаю специфики
их работы но основное направление хакерства - это ломание процедуры проверки регистрации. Для этого не нужно
реверсить всё. И сильно сомневаюсь что хакер глубоко копает идеи. Он - практик.

Если вы хотите спасать вашу идею или ноу-хау от кражи - то тут мне кажется лучше защищаться
как-то по другому. Продавать не приложение а сервис там... Продавать физическое устройство
без которого ваше ПО не работает. USB-брелок. Не уверен что это на 100% удобно. Надо
курить форумы железячников. Но вобщем как-то так.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150778
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторпримитивные типы данных (любые которые укладываются в диапазон от 8 до 128 бит)
int 8,16,32,64,128?
float 16,32,64,128 ?
битовые наборы, короткие строки?

SSE/AVX что-то напоминает

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

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

написать полноценный компилятор из байткода в нативный код
На написание хорошего компиллятора уходят годы. А с учётом того что
ты спрашиваешь самые общие вопросы по стеку - можно предположить
что на вхождение в саму теорию еще годик-два накинуть. Вобщем
сфера эта узкая. Специфичная. И мало кто ей хочет заниматься.

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

Тут не C++ надо компилировать, а код типа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
0  dconst_0	// Записать в стек 0.0 с типом double
1  dstore_1	// Загрузить в локальные переменные с именами 1 и 2
2  goto 9	// При первом проходе не увеличивать счётчик
5  dload_1	// Записать в стек локальные переменные 1 и 2
6  dconst_1	// Записать в стек 1.0 с типом double
7  dadd		// Сложить; инструкции dinc нет
8  dstore_1	// Загрузить в локальные переменные с именами 1 и 2
9  dload_1	// Записать в стек локальные переменные 1 и 2
10 ldc2_w #4	// Записать в стек 100.0 с типом double
13 dcmpg	// Инструкции if_dcmplt нет
14 iflt 5	// Сравнить и повторить цикл, если результат «меньше» (i < 100.0)
17 return	// Вернуть пустой тип после завершения



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

Байткод в ассемблер x86
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150843
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eoltmaytonпропущено...

В какой?

Байткод в ассемблер x86
Бро. Тут есть какие-то взаимоисключающие параграфы.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150868
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скомпилировал и выполнил первый рабочий код
Выражение: 1+2+3-7

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Nop
iPush 1
iPush 2
iPush 3
iAdd
iAdd
iPush 7
iSub
Peek 
End



в бинарном виде код занял 88 байт, потому как добавлены поля для отладочной информации.
В режиме Release размер будет меньше
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150911
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eoltmaytonпропущено...

В какой?

Байткод в ассемблер x86
ИМХУ Антивирусы поубивают такую нездоровую активность.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39150945
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevНу и другой ключевой вопрос:
Откуда будет поступать инструкции

Поскольку ВМ написана на языке высокого уровня, то можно использовать любой удобный вариант:

- Массив инструкций
- какая-нибудь сложная конструкция из вложенных массивов и структур

авторКак они будут идентифицироваться

Можно сделать тупой вариант. Один большой switch и куча case`ов.
Но это слишком примитивно. Я хочу сделать адресный интерпретатор и прямой шитый код
По скорости работы практически ничем не отличается от нативного кода
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39151010
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltСкомпилировал и выполнил первый рабочий код
Выражение: 1+2+3-7
оптимизатор должен сделать push 0
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39151011
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилоптимизатор должен сделать push 0

у тебя с математикой туго видимо
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39151012
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилоптимизатор должен сделать push 0
push -1 , конечно
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39151014
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикольное видео прямо по-теме байткода и виртуальным машинам: [youtube=
YouTube Video
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39151017
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltПо скорости работы практически ничем не отличается от нативного кода
блажен кто верует
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39151037
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилблажен кто верует

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

я не верю, я знаю
У меня возникли сомнения в твоей компетенции.

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

У тебя есть опыт разработки компилляторов?

P.S. Положа руку на сердце я сам не специалист именно
в области компилляции. Но слушая тебя - берёт оторопь!
Кто ты?
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39159601
Eolt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все играюсь с виртуальной машиной. Идея безусловно работает. Можно даже программки писать в байт-коде. Только это трудно.
Нужно визуализировать в голове работу стека. Этакий тренажер для мозгов :)

Появилась мысль написать транслятор какого-то скриптового языка в байт-код ВМ. Это намного интереснее, чем просто реализовывать команды ВМ по-списку, точно не зная понадобятся они или нет.
Пока думаю над языками: JavaScript, VBScript, OberonScript. Для первых двух есть готовые реализации синтаксических анализаторов.
Oberon - довольно симпатичный язык с красивым паскалевским синтаксисом. Но практически мёртвый, как и все детища Вирта.
...
Рейтинг: 0 / 0
Виртуальный ассемблер для виртуальной стековой машины.
    #39159670
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EoltНужно визуализировать в голове работу стека. Этакий тренажер для мозгов :)
этим должен заниматься компилятор

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

«человек должен думать, а машины должны работать».
Согласись, МК-61 развивал именно эту часть мозга и учил думать гибче.
...
Рейтинг: 0 / 0
98 сообщений из 98, показаны все 4 страниц
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Виртуальный ассемблер для виртуальной стековой машины.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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