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

loop
{
  print(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);
Результат:

Code: Select all

Hello World!!!
Пока что рассчитано для ф-ции 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);
Результат:

Code: Select all

This integer:->123

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

Posted: Tue Sep 29, 2015 3:31 pm
by paulcodeman
Serge wrote:pavelyakov
А парсер языка на чём написан ?
На php, все самописно, говорят что php медленно работает, но если лексемы переводить в массив и склеивать через implode, то скорость будет очень быстрая. Специально писал на php, чтобы можно было потом на бесплатный хостинг поставить :lol:
Как доделаю основы, скину на хост, чтобы могли пописать 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
Да... Мне бы часть его энергии и энтузиазма...