Page 4 of 5
Re: Высокоуровневый ассемблер
Posted: Sun Sep 27, 2015 2:38 am
by paulcodeman
Добавлены события окна
Code: Select all
object window,%1
property mousedown,%1,down
property mouseup,%1,up
create %1
down:
console print,'mouse down\n'
ret
up:
console print,'mouse up\n'
ret
Re: Высокоуровневый ассемблер
Posted: Sun Sep 27, 2015 3:16 am
by paulcodeman
Теперь можно добавлять функции, пример реализации input, через getch
Code: Select all
goto main
input:
console print,'input text: '
mov %0,''
loop:
console getch,%1
if %1,KEY_ENTER
= end_func
sym %1,%1
add %0,%1
console print,%1
goto loop
end_func:
console print,'\n'
ret
main:
call input
console print,'Text: '
console print,%0
Re: Высокоуровневый ассемблер
Posted: Mon Sep 28, 2015 7:33 pm
by paulcodeman
В процессе 2 транслятор.
Что уже умеет делать?
Переводит такой код:
Code: Select all
a=1;
text = 'this ';
if(a==1)
{
text=text+'work';
}
print(text);
В такой:
Code: Select all
goto main
PRINT:
console print,%10
mov %0,0
ret
main:
mov %51,1
mov %52,'this '
cmp %51,1
!= IF_BLOK_0
mov %52,%52
add %52,'work'
IF_BLOK_0:
mov %10,%52
call PRINT
почти полностью написан парсер матвыражений.
Re: Высокоуровневый ассемблер
Posted: Mon Sep 28, 2015 8:36 pm
by paulcodeman
Новая ф-ция loop,char,getch
преобразует в
Code: Select all
goto main
GETCH:
console getch,%0
ret
CHAR:
sym %0,%10
ret
PRINT:
console print,%10
ret
main:
LOOP_BLOK_1:
call GETCH
mov %10,%0
call CHAR
mov %10,%0
call PRINT
goto LOOP_BLOK_1
Размер бинарного файла 64 байта без сжатия и оптимизации.
Теперь за счет поддержки вложенной функции стало кодить еще комфортнее и улучшать байтовый код.
Re: Высокоуровневый ассемблер
Posted: Tue Sep 29, 2015 1:23 am
by paulcodeman
Как хорошо, когда все идет отлично!
Теперь сделал поддержку функций!!!
Пример:
Code: Select all
function sum(a,b)
{
return a+b;
}
a=sum('Hello ','World!!!');
print(a);
Результат:
Пока что рассчитано для ф-ции 20 аргументов, как локальных, в будущем может сделаю больше.
Re: Высокоуровневый ассемблер
Posted: Tue Sep 29, 2015 1:54 am
by paulcodeman
Еще пример:
Code: Select all
function input()
{
ret = '';
loop
{
code = getch();
if(code==13)
{
return ret;
}
s=char(code);
print(code+'->'+s+',');
ret = ret+s;
}
}
print("\ntext:"+input());
транслирует в:
Code: Select all
goto main
FUNCTION_GETCH:
console getch,%0
ret
FUNCTION_CHAR:
sym %0,%10
ret
FUNCTION_PRINT:
console print,%10
ret
FUNCTION_INPUT:
mov %51,''
LOOP_BLOK_1:
call FUNCTION_GETCH
mov %52,%0
cmp %52,13
!= IF_BLOK_2
mov %0,%51
ret
IF_BLOK_2:
mov %10,%52
call FUNCTION_CHAR
mov %53,%0
mov %10,%52
add %10,'->'
add %10,%53
add %10,','
call FUNCTION_PRINT
mov %51,%51
add %51,%53
goto LOOP_BLOK_1
ret
main:
call FUNCTION_INPUT
mov %10,"\ntext:"
add %10,%0
call FUNCTION_PRINT
на выходе файл 168 байт (без сжатия и оптимизации)
Re: Высокоуровневый ассемблер
Posted: Tue Sep 29, 2015 2:10 pm
by paulcodeman
Добавил стек функцию для команды ret, теперь нет бага "зависания" при выходе из функции.
Так же сделал маленькую оптимизацию против дублирования кода.
Теперь такая конструкция работает на ура .
Code: Select all
function input()
{
ret='';
print('Input: ');
loop
{
s=getch();
if(s==13)
{
return ret;
}
s=char(s);
print(s);
ret=ret+s;
}
}
loop
{
print("\n"+input()+"\n");
}
Re: Высокоуровневый ассемблер
Posted: Tue Sep 29, 2015 2:48 pm
by Serge
pavelyakov
А парсер языка на чём написан ?
Re: Высокоуровневый ассемблер
Posted: Tue Sep 29, 2015 3:28 pm
by paulcodeman
(1)Сделал поддержку загрузки obj библиотек
(2)Исправил маленькие баги.
(3)Вызов функции по адресу в формате stdcall
Code: Select all
dll_load("/sys/lib/console.obj");
c_init = dll_import('con_init');
c_printf = dll_import('con_printf');
c_init(-1,-1,-1,-1,'test');
c_printf('%s->%d','This integer:',123);
Результат:
Re: Высокоуровневый ассемблер
Posted: Tue Sep 29, 2015 3:31 pm
by paulcodeman
Serge wrote:pavelyakov
А парсер языка на чём написан ?
На php, все самописно, говорят что php медленно работает, но если лексемы переводить в массив и склеивать через implode, то скорость будет очень быстрая. Специально писал на php, чтобы можно было потом на бесплатный хостинг поставить
Как доделаю основы, скину на хост, чтобы могли пописать hello world
Без сложности его можно написать хоть на этом языке, ну или с некоторыми сложностями на Си, тогда разработка будет возможно с самой системы kolibri.
Re: Высокоуровневый ассемблер
Posted: Thu Oct 01, 2015 2:45 pm
by paulcodeman
Во время работы с виртуальной машиной, появилось идея, как можно ускорить скорость работы, а так же отделить от виртуальной машины приложение. Это простой компилятор, который компилирует приложение по структуре с виртуальной машиной, но в то же время, добавлять только те ф-ции, которые будет использовать разрабатываемое приложение. Скорость работы значительно возрастет, ведь не приейдется в цикле считывать байт код, а так же приложение будет не зависимо от ВМ.
Re: Высокоуровневый ассемблер
Posted: Thu Oct 01, 2015 3:27 pm
by paulcodeman
Сделал поддержу объектной части
Пока что не полностью
Code: Select all
a=object(window); // определить объект как окно
a.left = 0;
a.top = 0;
a.width = 300;
a.height = 400;
create(a); // создать окно
Re: Высокоуровневый ассемблер
Posted: Thu Oct 01, 2015 5:58 pm
by paulcodeman
Добавил удобный редактор объектов
Code: Select all
<window name='obj' onmousedown=func1 onmouseup=func2></window>
function func1()
{
print('down');
}
function func2()
{
print('up');
}
Re: Высокоуровневый ассемблер
Posted: Fri Oct 02, 2015 9:52 pm
by Ray
omg
Re: Высокоуровневый ассемблер
Posted: Sat Oct 03, 2015 3:10 am
by Pathoswithin
Да... Мне бы часть его энергии и энтузиазма...