Board.KolibriOS.org
https://board.kolibrios.org/

Высокоуровневый ассемблер
https://board.kolibrios.org/viewtopic.php?f=2&t=3130
Page 4 of 5

Author:  paulcodeman [ Sun Sep 27, 2015 2:38 am ]
Post subject:  Re: Высокоуровневый ассемблер

Добавлены события окна

Code:
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

Author:  paulcodeman [ Sun Sep 27, 2015 3:16 am ]
Post subject:  Re: Высокоуровневый ассемблер

Теперь можно добавлять функции, пример реализации input, через getch

Code:
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


Attachments:
Безымянный.PNG
Безымянный.PNG [ 6.84 KiB | Viewed 4543 times ]

Author:  paulcodeman [ Mon Sep 28, 2015 7:33 pm ]
Post subject:  Re: Высокоуровневый ассемблер

В процессе 2 транслятор.
Что уже умеет делать?

Переводит такой код:
Code:
a=1;
text = 'this ';
if(a==1)
{
 text=text+'work';
}
print(text);


В такой:
Code:
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


почти полностью написан парсер матвыражений.

Author:  paulcodeman [ Mon Sep 28, 2015 8:36 pm ]
Post subject:  Re: Высокоуровневый ассемблер

Новая ф-ция loop,char,getch
Code:
loop
{
  print(char(getch()));
}


преобразует в

Code:
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 байта без сжатия и оптимизации.
Теперь за счет поддержки вложенной функции стало кодить еще комфортнее и улучшать байтовый код.

Author:  paulcodeman [ Tue Sep 29, 2015 1:23 am ]
Post subject:  Re: Высокоуровневый ассемблер

Как хорошо, когда все идет отлично!

Теперь сделал поддержку функций!!!

Пример:
Code:
function sum(a,b)
{
   return a+b;
}
a=sum('Hello ','World!!!');
print(a);


Результат:
Code:
Hello World!!!


Пока что рассчитано для ф-ции 20 аргументов, как локальных, в будущем может сделаю больше.

Author:  paulcodeman [ Tue Sep 29, 2015 1:54 am ]
Post subject:  Re: Высокоуровневый ассемблер

Еще пример:
Code:
function input()
{
  ret = '';
  loop
  {
    code = getch();
    if(code==13)
    {
      return ret;
    }
    s=char(code);
    print(code+'->'+s+',');
    ret = ret+s;
  }
}
print("\ntext:"+input());


транслирует в:
Code:
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 байт (без сжатия и оптимизации)

Author:  paulcodeman [ Tue Sep 29, 2015 2:10 pm ]
Post subject:  Re: Высокоуровневый ассемблер

Добавил стек функцию для команды ret, теперь нет бага "зависания" при выходе из функции.
Так же сделал маленькую оптимизацию против дублирования кода.

Теперь такая конструкция работает на ура :).

Code:
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");
}


Attachments:
123.PNG
123.PNG [ 7.59 KiB | Viewed 4450 times ]

Author:  Serge [ Tue Sep 29, 2015 2:48 pm ]
Post subject:  Re: Высокоуровневый ассемблер

pavelyakov
А парсер языка на чём написан ?

Author:  paulcodeman [ Tue Sep 29, 2015 3:28 pm ]
Post subject:  Re: Высокоуровневый ассемблер

(1)Сделал поддержку загрузки obj библиотек
(2)Исправил маленькие баги.
(3)Вызов функции по адресу в формате stdcall


Code:
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:
This integer:->123

Author:  paulcodeman [ Tue Sep 29, 2015 3:31 pm ]
Post subject:  Re: Высокоуровневый ассемблер

Serge wrote:
pavelyakov
А парсер языка на чём написан ?

На php, все самописно, говорят что php медленно работает, но если лексемы переводить в массив и склеивать через implode, то скорость будет очень быстрая. Специально писал на php, чтобы можно было потом на бесплатный хостинг поставить :lol:
Как доделаю основы, скину на хост, чтобы могли пописать hello world :)
Без сложности его можно написать хоть на этом языке, ну или с некоторыми сложностями на Си, тогда разработка будет возможно с самой системы kolibri.

Author:  paulcodeman [ Thu Oct 01, 2015 2:45 pm ]
Post subject:  Re: Высокоуровневый ассемблер

Во время работы с виртуальной машиной, появилось идея, как можно ускорить скорость работы, а так же отделить от виртуальной машины приложение. Это простой компилятор, который компилирует приложение по структуре с виртуальной машиной, но в то же время, добавлять только те ф-ции, которые будет использовать разрабатываемое приложение. Скорость работы значительно возрастет, ведь не приейдется в цикле считывать байт код, а так же приложение будет не зависимо от ВМ.

Author:  paulcodeman [ Thu Oct 01, 2015 3:27 pm ]
Post subject:  Re: Высокоуровневый ассемблер

Сделал поддержу объектной части
Пока что не полностью
Code:
a=object(window); // определить объект как окно
a.left = 0;
a.top = 0;
a.width = 300;
a.height = 400;
create(a); // создать окно

Author:  paulcodeman [ Thu Oct 01, 2015 5:58 pm ]
Post subject:  Re: Высокоуровневый ассемблер

Добавил удобный редактор объектов
Code:
<window name='obj' onmousedown=func1 onmouseup=func2></window>

function func1()
{
  print('down');
}

function func2()
{
  print('up');
}

Author:  Ray [ Fri Oct 02, 2015 9:52 pm ]
Post subject:  Re: Высокоуровневый ассемблер

omg

Author:  Pathoswithin [ Sat Oct 03, 2015 3:10 am ]
Post subject:  Re: Высокоуровневый ассемблер

Да... Мне бы часть его энергии и энтузиазма...

Page 4 of 5 All times are UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/