Page 3 of 5
Re: Высокоуровневый ассемблер
Posted: Thu Sep 24, 2015 5:03 pm
by e-andrew
Pathoswithin wrote:Может коллизия? Хотя, всё равно не понял..
Опечатка. Суть в том, что все функции должны согласовывать номера регистров, чтобы не использовать одни и те же. Если проект чисто свой без сторонних кусков кода/либ, то тут ещё можно придумать систему (скажем, по тысяче регистров на файл (если в регистр можно засунуть массив)), иначе же будет каша.
Re: Высокоуровневый ассемблер
Posted: Thu Sep 24, 2015 5:46 pm
by paulcodeman
Исправил много баг. Свел утечку памяти к минимуму. Операции выполняются в 3 раза быстрее, чем в javascript. Добавил функции для получения длины текста, символ из кода ascii, думаю добавитэь разные кодировки, выход из программы с завершением всех созданных процессов.
Re: Высокоуровневый ассемблер
Posted: Thu Sep 24, 2015 7:23 pm
by Pathoswithin
А у тебя JIT-компиляция планируется? Без неё высокой скорости не добиться.
Re: Высокоуровневый ассемблер
Posted: Thu Sep 24, 2015 11:30 pm
by paulcodeman
Pathoswithin wrote:А у тебя JIT-компиляция планируется? Без неё высокой скорости не добиться.
Конечно, но это уже в конечной стадии скорее всего.
Я вот думаю на счет синтаксиса оттолкуться ли от асма?
Code: Select all
#define cls,'console cls'
main:
console print,'Shell v.1 h-help'
console getch,%10
if %10,KEY_ESC
= end
sym %10,%10
if %10,'h'
= help
!= nocmd
jmp main
help:
cls
console print,'Help text '
console getch,%10
cls
jmp main
nocmd:
cls
console print,'No cmd '
sleep 100
cls
jmp main
end:
exit
Re: Высокоуровневый ассемблер
Posted: Fri Sep 25, 2015 2:57 pm
by paulcodeman
Организовал вызов функции по адресу
Пример
Code: Select all
#define func1, '%1' // даем знать препроцессору, что func1, как %1
mov func1,1234567 // передаем адрес/число переменной %2, в данном случае адрес функции на который будет сделан вызов
func1 %2 // вызываем функцию func1 с адресом 1234567 и передаем один параметр переменную %2 (автоматически преобразуются данные по типу)
Зачем это нужно? Скоро узнаете
Re: Высокоуровневый ассемблер
Posted: Fri Sep 25, 2015 6:48 pm
by paulcodeman
Теперь возможна загрузка obj файлов.
Вот пример
Code: Select all
#define init_console, '%1'
#define print, '%2'
dll load,'/sys/lib/console.obj' // загрузить библиотеку
dll function,init_console,'con_init' // загрузить в переменную %1 адрес функции con_init
dll function,print,'con_write_asciiz' // загрузить в переменную %2 адрес функции con_write_asciiz
#define title,'%10'
mov title,'Test'
init_console title,-1,-1,-1,-1
mov %11,'Full path VM: '
add %11,PATH
add %11,'\n'
add %11,'File name VM: '
add %11,FILE
add %11,'\n'
add %11,'Dir name VM: '
add %11,DIR
add %11,'\n'
add %11,'File name apps: '
add %11,SFILE
add %11,'\n'
add %11,'Full path apps: '
add %11,SPATH
add %11,'\n'
print %11' // вызов функции
Замете, очень удобно, зная только название функции и что за аргументы передавать можно вызвать любую функцию, параметры передаются в формате не в stdcall, поэтому в обратном порядке, возможно потом поменяю.
Так же добавил
Специальные переменные, которые содержат путь где находиться виртуальная машина, название файла виртуальной машины, папка где находиться виртуальная машина ( пригодиться для загрузки и установки настроек ), путь/название/папка откуда запущен файл приложения для виртуалки.
P.S. все названия хэшируются, все номера переменных тоже, разрешение коллизий везде, поэтому думаю встроить массивы не составит труда.
Re: Высокоуровневый ассемблер
Posted: Sat Sep 26, 2015 2:25 am
by paulcodeman
Ура! Появилось возможность создавать первый объект - это окно.
Пример
Code: Select all
object window,%1 // определим переменную 1, как окно
property left,%1,100 // изменим свойство left на 100 для окна
create %1 // создадим окно
Re: Высокоуровневый ассемблер
Posted: Sat Sep 26, 2015 3:58 pm
by paulcodeman
Оптимизировал еще ВМ. Теперь инкремент команда, которая находиться в 10 000 000 интераций выполняется за 4 секунды, когда в то же время js выполняется тоже самое за 18 сек. на моей машине. 18/4 = 4.5 раза быстрее, когда раньше было 3. Прирост на 1.5 раза.
Re: Высокоуровневый ассемблер
Posted: Sat Sep 26, 2015 7:32 pm
by Pathoswithin
Что всё равно дофига медленней чем скомпилированный код.
... или я не понял. Ты хочешь на основе этого интерпретатора сделать поддержку javascript для браузера?
Re: Высокоуровневый ассемблер
Posted: Sat Sep 26, 2015 8:25 pm
by paulcodeman
Pathoswithin wrote:Что всё равно дофига медленней чем скомпилированный код.
... или я не понял. Ты хочешь на основе этого интерпретатора сделать поддержку javascript для браузера?
скомпилированный код с динамической типизацией?
Вроде не знаю таких, которые быстрее работать будут.
За все надо платить, за комфорт кодинга платишь скоростью.
P.S. можно прикрутить js, для этого нужно сделать транслятор js в коды для VM. 1 этап когда запускается скрипт транслируется в байт код для ВМ. 2 этап запуск самого байт кода.
Сделаю 2 этап он сложнее чем 1, а там я думаю трансляцию не составит труда написать.
Вот думаю может для ВМ браузер напишу, уж быстрее писаться будет, чем на Си, уж тем более чем на асм.
И при модернизации ВМ модернизируются все проги включающие в эту ВМ.
Re: Высокоуровневый ассемблер
Posted: Sat Sep 26, 2015 8:51 pm
by paulcodeman
Pathoswithin wrote:Что всё равно дофига медленней чем скомпилированный код.
... или я не понял. Ты хочешь на основе этого интерпретатора сделать поддержку javascript для браузера?
Если сравнить скорость работы скомпилированной на си программы, то она в 100 быстрее получается, но это не интерпретатор и со статической типизацией. Я думаю 100 раз это уже не так много. Правда нет возможно провести эксперемент с java.
Re: Высокоуровневый ассемблер
Posted: Sat Sep 26, 2015 11:55 pm
by Pathoswithin
Благодаря JIT-компиляции java работает почти с той же скоростью что и си, но жрёт феерическое количество памяти и довольно долго запускается. А вот без JIT интерпретируемый язык является жутко медленным безумием.
pavelyakov wrote:скомпилированный код с динамической типизацией?
Вроде не знаю таких, которые быстрее работать будут.
За все надо платить, за комфорт кодинга платишь скоростью.
Несколько лет пытаюсь понять, в чём заключается комфорт от типов данных? Пишу на ассемблере именно потому, что там их нет.
Re: Высокоуровневый ассемблер
Posted: Sat Sep 26, 2015 11:59 pm
by paulcodeman
Pathoswithin wrote:Благодаря JIT-компиляции java работает почти с той же скоростью что и си, но жрёт феерическое количество памяти и довольно долго запускается. А вот без JIT интерпретируемый язык является жутко медленным безумием.
pavelyakov wrote:скомпилированный код с динамической типизацией?
Вроде не знаю таких, которые быстрее работать будут.
За все надо платить, за комфорт кодинга платишь скоростью.
Несколько лет пытаюсь понять, в чём заключается комфорт от типов данных? Пишу на ассемблере именно потому, что там их нет.
Тем что меньше писать нужно и меньше тратить времени.
Re: Высокоуровневый ассемблер
Posted: Sun Sep 27, 2015 12:00 am
by paulcodeman
Pathoswithin wrote:Благодаря JIT-компиляции java работает почти с той же скоростью что и си, но жрёт феерическое количество памяти и довольно долго запускается. А вот без JIT интерпретируемый язык является жутко медленным безумием.
pavelyakov wrote:скомпилированный код с динамической типизацией?
Вроде не знаю таких, которые быстрее работать будут.
За все надо платить, за комфорт кодинга платишь скоростью.
Несколько лет пытаюсь понять, в чём заключается комфорт от типов данных? Пишу на ассемблере именно потому, что там их нет.
Вот и остается выбирать или быстродействие, или память.
Re: Высокоуровневый ассемблер
Posted: Sun Sep 27, 2015 12:23 am
by paulcodeman
Pathoswithin wrote:Благодаря JIT-компиляции java работает почти с той же скоростью что и си, но жрёт феерическое количество памяти и довольно долго запускается. А вот без JIT интерпретируемый язык является жутко медленным безумием.
Почитал более подробно про JIT компиляцию, в принципе легче, когда имеешь байт код, который уже есть компилировать. Главное понять принцип как это реализовано.