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 (автоматически преобразуются данные по типу)
Зачем это нужно? Скоро узнаете 8)

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 компиляцию, в принципе легче, когда имеешь байт код, который уже есть компилировать. Главное понять принцип как это реализовано.