Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Виртуальный ассемблер для виртуальной стековой машины. / 25 сообщений из 98, страница 1 из 4
15.01.2016, 15:44
    #39148323
Eolt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виртуальный ассемблер для виртуальной стековой машины.
Где бы найти подробное описание такого ассемблера? Нужен минимально необходимый список команд, чтобы организовать выполнение байт-кода на стеке.

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

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

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


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

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

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

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

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

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

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

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

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

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

Чем вас не устраивает стандартные API
стековых контейнеров из БУСТ или СТЛ ?
...
Рейтинг: 0 / 0
15.01.2016, 16:37
    #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
15.01.2016, 17:02
    #39148380
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виртуальный ассемблер для виртуальной стековой машины.
Не понятно для чего это нужно.

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

Тут самое сложное циклы. Т.к. хранить счетчик и/или условия выхода из цикла на стеке - это совсем через одно место. С арифметикой (без циклов) проблем быть не должно.
...
Рейтинг: 0 / 0
15.01.2016, 18:10
    #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
15.01.2016, 18:33
    #39148445
ДохтаР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виртуальный ассемблер для виртуальной стековой машины.
EoltДохтаРЧем вас не устраивает стандартные API
стековых контейнеров из БУСТ или СТЛ ?

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

Разделяемую библиотеку можно использовать откуда угодно,
если знать адрес входа и сигратуры вызовов....
...
Рейтинг: 0 / 0
15.01.2016, 18:39
    #39148451
mikron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Виртуальный ассемблер для виртуальной стековой машины.
Eolt,
мне тоже сразу на память пришла реализация ФОРТА. Ты пока этот совет упорно игнорируеш. Посмотри на язык - очень интересная и мощная штука. Говорять есть даже реализации на уровне железа.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Виртуальный ассемблер для виртуальной стековой машины. / 25 сообщений из 98, страница 1 из 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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