www.open-tager.ru
https://open-tager.ru/forum/

Виртуальная стековая байт-машина
https://open-tager.ru/forum/viewtopic.php?f=5&t=5260
Страница 1 из 1

Автор:  Pingvin [ 28 авг 2017, 16:28 ]
Заголовок сообщения:  Виртуальная стековая байт-машина

Хочу реализовать, буду собирать материал.
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, 16:38 ]
Заголовок сообщения:  Re: Виртуальная стековая байт-машина

пример реализации цикла

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

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/