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/ |