powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Виртуальный ассемблер для виртуальной стековой машины.
25 сообщений из 98, страница 1 из 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
25 сообщений из 98, страница 1 из 4
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Виртуальный ассемблер для виртуальной стековой машины.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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