Page 1 of 5

Высокоуровневый ассемблер

Posted: Mon Sep 21, 2015 1:35 am
by paulcodeman
Начал над разработкой высокоуровневого ассемблера.
Смысл заключается в написании виртуальной машины, которая считывает опкоды и интерпретирует их.
Типизация динамическая.
Вместо регистров eax,...
используется ячейки от 0 до 0xFFFFFFFF.
Они могут содержать (строки/данные, числа) пока что.
Ф-ции файловой системы и многие фичи.
Что уже есть/работает:
Компилятор, пример синтаксиса:

mov %1,0; // положить в ячейку 1, число 0
add %1,1; // суммировать значение в ячейке 1 на 1
console 0,%1; // класс консоль, первый параметр ф-ция, в данном случае 0 => вывести число/строку
console 1; // ждать нажатия кнопки

add %1,'test'; // присоединить к числу/значению в ячейке 1, сроку test
console 0,%1; // вывести число/строку
console 1; // ждать нажатия кнопки

Это все уже компилируется и работает в kolibriOS.
Если есть пожелания / идеи чего добавить, пишите.

Re: Высокоуровневый ассемблер

Posted: Mon Sep 21, 2015 12:00 pm
by Pathoswithin
А какая конечная цель? Смесь java с ассемблером? Так там тоже есть байткод.

Re: Высокоуровневый ассемблер

Posted: Mon Sep 21, 2015 12:12 pm
by paulcodeman
Pathoswithin wrote:А какая конечная цель? Смесь java с ассемблером? Так там тоже есть байткод.
Сделать транслятор к этому ассемблеру, синтаксис будет на подобии JavaScript. Программы получаются несколько байт, но запускаются через интерпретатор. Большая поддержка ф-ций, упрощённая разработка.

Posted: Mon Sep 21, 2015 12:26 pm
by punk_joker
А не лучше написать набор макросов для fasm?

Re: Высокоуровневый ассемблер

Posted: Mon Sep 21, 2015 12:34 pm
by Pathoswithin
То-есть ты хочешь неслабо пожертвовать скоростью, чтобы уменьшить и без того маленький размер? Мне кажеться, размер то как раз уже всем пофиг, рядом с размерами видео...
Ты уверен, что у тебя хватит энтузиазма и времени сделать большую поддержку ф-ций?

Re: Высокоуровневый ассемблер

Posted: Mon Sep 21, 2015 12:47 pm
by paulcodeman
Pathoswithin wrote:То-есть ты хочешь неслабо пожертвовать скоростью, чтобы уменьшить и без того маленький размер? Мне кажеться, размер то как раз уже всем пофиг, рядом с размерами видео...
Ты уверен, что у тебя хватит энтузиазма и времени сделать большую поддержку ф-ций?
Уже есть библеотеки на cmm, которые писал пол года где-то. Также и canvas, который позволяет рисовать без мерцаний, свои gui элементы, правда не все, хочу доделать с поддержкой font редактор. Скорость особо не теряется, попробовать если ручками писать суммирование строк с числами и т.д. больше времени уйдет и больше багов поймать можно.

Re:

Posted: Mon Sep 21, 2015 12:48 pm
by paulcodeman
punk_joker wrote:А не лучше написать набор макросов для fasm?
Я хочу сделать быстроту разработки, макросы не решат все проблемы.

Re: Высокоуровневый ассемблер

Posted: Mon Sep 21, 2015 2:13 pm
by Pathoswithin
А, то-есть уже много наработок. Тогда главный вопрос — почему виртуальная машина, а не компилятор?

Re: Высокоуровневый ассемблер

Posted: Mon Sep 21, 2015 2:57 pm
by paulcodeman
Pathoswithin wrote:А, то-есть уже много наработок. Тогда главный вопрос — почему виртуальная машина, а не компилятор?
Хочу чтобы приложения работали не только в Колибри.
Если писать компилятор с динамической типизацией, то приложения будут занимать порядка ~ 40 кб. в обычном hello world. А в серьезных проектах боюсь представить.
Я уже писал транслятор (для динамической типизации) для компилятора Си ktcc. Все бы хорошо, но размер приложений не радовал, так же хотелось чтобы приложения работали не только в Колибри, но и в Windows к примеру или в JavaScript браузере для быстрой отладки.

Re: Высокоуровневый ассемблер

Posted: Mon Sep 21, 2015 3:00 pm
by paulcodeman
Добавил:
1) поддержку меток
2) cmp (сравнение строк, чисел, переменных/ячеек по значению "строгое сравнение" т.е. если тип отличается то false
3) прыжки jmp, je

Пример

Code: Select all

cmp 'test','test';
je okey;
jmp end;
okey:
console 0,'okey!!';
end:
Выведет

Code: Select all

okey!!

Re: Высокоуровневый ассемблер

Posted: Mon Sep 21, 2015 3:51 pm
by paulcodeman
Пример кода

Code: Select all

mov %1,0
loop:
console 0,%1
sleep 50
add %1,1
cmp %1,10
je end
jmp loop
end:
Вывод чисел от 0 до 9 с задержкой 50 сотых секунд.

Re: Высокоуровневый ассемблер

Posted: Tue Sep 22, 2015 12:30 pm
by paulcodeman
Добавлены константы
Теперь можно еще лучше упрощать код
Пример

Code: Select all

#define print, 'console 0,'
#define getch, 'console 1'
print 'Test:'
getch
print 'Work!!!'
или пример приведенный выше

Code: Select all

#define var1,'%1'

mov var1,0
loop:
console print,var1
sleep 50
add var1,1
cmp var1,10
je end
jmp loop
end:
По умолчанию уже за ранее определены названия:
print, getch, write,.. и т.д.

Re: Высокоуровневый ассемблер

Posted: Tue Sep 22, 2015 5:39 pm
by Artyom
И надо снова изобретать велосипед. Существует JAVA (не JavaScript) со своим ByteCode, так и портируйте её, -
всем хороша, работает хоть в Windows, хоть Ёща.

Re: Высокоуровневый ассемблер

Posted: Tue Sep 22, 2015 5:56 pm
by Artyom
Драйвер PS/2 клавиатуры написанный под абстрактный язык программирования для
виртуальной машины на её языке, которая будет виртуально исполнять то, что должно
выполнять реальное железо, раз в *-нацать быстрее :lol:

Re: Высокоуровневый ассемблер

Posted: Tue Sep 22, 2015 6:01 pm
by paulcodeman
Artyom wrote:И надо снова изобретать велосипед. Существует JAVA (не JavaScript) со своим ByteCode, так и портируйте её, -
всем хороша, работает хоть в Windows, хоть Ёща.
Портировать Java? Вы хоть представляете какой объем работы это занимает? Легче велосипед изобрести, чем портировать java.