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

Applications development, KoOS API questions
  • Теперь можно добавлять функции, пример реализации 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
    Attachments
    Безымянный.PNG
    Безымянный.PNG (6.84 KiB)
    Viewed 10098 times
    Технологии меняют мир, а я - меняю технологии.
  • В процессе 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
    
    почти полностью написан парсер матвыражений.
    Технологии меняют мир, а я - меняю технологии.
  • Новая ф-ция 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 байта без сжатия и оптимизации.
    Теперь за счет поддержки вложенной функции стало кодить еще комфортнее и улучшать байтовый код.
    Технологии меняют мир, а я - меняю технологии.
  • Как хорошо, когда все идет отлично!

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

    Пример:

    Code: Select all

    function sum(a,b)
    {
    	return a+b;
    }
    a=sum('Hello ','World!!!');
    print(a);
    Результат:

    Code: Select all

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

    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 байт (без сжатия и оптимизации)
    Технологии меняют мир, а я - меняю технологии.
  • Добавил стек функцию для команды 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");
    }
    Attachments
    123.PNG
    123.PNG (7.59 KiB)
    Viewed 10005 times
    Технологии меняют мир, а я - меняю технологии.
  • pavelyakov
    А парсер языка на чём написан ?
  • (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
    Технологии меняют мир, а я - меняю технологии.
  • Serge wrote:pavelyakov
    А парсер языка на чём написан ?
    На php, все самописно, говорят что php медленно работает, но если лексемы переводить в массив и склеивать через implode, то скорость будет очень быстрая. Специально писал на php, чтобы можно было потом на бесплатный хостинг поставить :lol:
    Как доделаю основы, скину на хост, чтобы могли пописать hello world :)
    Без сложности его можно написать хоть на этом языке, ну или с некоторыми сложностями на Си, тогда разработка будет возможно с самой системы kolibri.
    Технологии меняют мир, а я - меняю технологии.
  • Во время работы с виртуальной машиной, появилось идея, как можно ускорить скорость работы, а так же отделить от виртуальной машины приложение. Это простой компилятор, который компилирует приложение по структуре с виртуальной машиной, но в то же время, добавлять только те ф-ции, которые будет использовать разрабатываемое приложение. Скорость работы значительно возрастет, ведь не приейдется в цикле считывать байт код, а так же приложение будет не зависимо от ВМ.
    Технологии меняют мир, а я - меняю технологии.
  • Сделал поддержу объектной части
    Пока что не полностью

    Code: Select all

    a=object(window); // определить объект как окно
    a.left = 0;
    a.top = 0;
    a.width = 300;
    a.height = 400;
    create(a); // создать окно
    
    Технологии меняют мир, а я - меняю технологии.
  • Добавил удобный редактор объектов

    Code: Select all

    <window name='obj' onmousedown=func1 onmouseup=func2></window>
    
    function func1()
    {
      print('down');
    }
    
    function func2()
    {
      print('up');
    }
    Технологии меняют мир, а я - меняю технологии.
  • omg
  • Да... Мне бы часть его энергии и энтузиазма...
  • Who is online

    Users browsing this forum: No registered users and 3 guests