www.open-tager.ru

открытый лазертаг форум
Текущее время: 23 ноя 2024, 20:26

Часовой пояс: UTC + 3 часа [ Летнее время ]


Реклама

Правила форума


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



Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Виртуальная стековая байт-машина
СообщениеДобавлено: 28 авг 2017, 16:28 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Хочу реализовать, буду собирать материал.
https://habrahabr.ru/post/223887/
https://habrahabr.ru/post/133780/

Думаю - первым делом нужно определиться с набором псевдокоманд нашей стековой машины, нашёл вот такой наборчик:
Цитата:
PUSH - поместить значение в стек
POP - удалить значение с вершины стека
DUP - сделать копию верхнего элемента стека
SWAP - обмен местами 2 верхних параметров в стеке
ROT - циклически переставляет 3 верхних элемента в стеке по-часовой стрелке
OVER - продублировать на вершину второй элемент стека
PICK - дублирует n-ый элемент стека на вершину
ROLL - циклически переставляет n-верхних элементов в стеке по-часовой стрелке
RVALUE - поместить в стек содержимое объекта, адрес которой лежит на вершине стека
LVALUE - поместить в стек адрес в памяти, по которому расположен объект лежащий на вершине стека
LET - rvalue-значение на вершине стека размещено по адресу предоставленному lvalue- значением, следующим за ним в стеке


Ну и математические нужны так же и сравнения, условного и безусловного перехода.

Так же нужно определиться с разрядностью команд и данных - 8 бит, 16, 32?

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Последний раз редактировалось Pingvin 28 авг 2017, 17:57, всего редактировалось 1 раз.

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 28 авг 2017, 16:38 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
пример реализации цикла

int i;
for (i = 0; i < 100; i++) {
; // Loop body is empty
}


A compiler might compile spin to:

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

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB