Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Ср дек 13, 2017 5:58 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 61 сообщение ]  На страницу Пред. 1 2 3 4 5 След.
Автор Сообщение
 Заголовок сообщения: Re: Высокоуровневый ассемблер
СообщениеДобавлено: Вс сен 27, 2015 2:38 am 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 156
Добавлены события окна

Код:
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: Высокоуровневый ассемблер
СообщениеДобавлено: Вс сен 27, 2015 3:16 am 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 156
Теперь можно добавлять функции, пример реализации input, через getch

Код:
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


Вложения:
Безымянный.PNG
Безымянный.PNG [ 6.84 КБ | 1395 просмотров ]
Вернуться к началу
 Заголовок сообщения: Re: Высокоуровневый ассемблер
СообщениеДобавлено: Пн сен 28, 2015 7:33 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 156
В процессе 2 транслятор.
Что уже умеет делать?

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


В такой:
Код:
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: Высокоуровневый ассемблер
СообщениеДобавлено: Пн сен 28, 2015 8:36 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 156
Новая ф-ция loop,char,getch
Код:
loop
{
  print(char(getch()));
}


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

Код:
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: Высокоуровневый ассемблер
СообщениеДобавлено: Вт сен 29, 2015 1:23 am 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 156
Как хорошо, когда все идет отлично!

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

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


Результат:
Код:
Hello World!!!


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


Вернуться к началу
 Заголовок сообщения: Re: Высокоуровневый ассемблер
СообщениеДобавлено: Вт сен 29, 2015 1:54 am 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 156
Еще пример:
Код:
function input()
{
  ret = '';
  loop
  {
    code = getch();
    if(code==13)
    {
      return ret;
    }
    s=char(code);
    print(code+'->'+s+',');
    ret = ret+s;
  }
}
print("\ntext:"+input());


транслирует в:
Код:
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: Высокоуровневый ассемблер
СообщениеДобавлено: Вт сен 29, 2015 2:10 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 156
Добавил стек функцию для команды ret, теперь нет бага "зависания" при выходе из функции.
Так же сделал маленькую оптимизацию против дублирования кода.

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

Код:
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");
}


Вложения:
123.PNG
123.PNG [ 7.59 КБ | 1302 просмотра ]
Вернуться к началу
 Заголовок сообщения: Re: Высокоуровневый ассемблер
СообщениеДобавлено: Вт сен 29, 2015 2:48 pm 
Не в сети
Kernel Developer

Зарегистрирован: Ср мар 08, 2006 6:25 pm
Сообщения: 3929
pavelyakov
А парсер языка на чём написан ?


Вернуться к началу
 Заголовок сообщения: Re: Высокоуровневый ассемблер
СообщениеДобавлено: Вт сен 29, 2015 3:28 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 156
(1)Сделал поддержку загрузки obj библиотек
(2)Исправил маленькие баги.
(3)Вызов функции по адресу в формате stdcall


Код:
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);


Результат:
Код:
This integer:->123


Вернуться к началу
 Заголовок сообщения: Re: Высокоуровневый ассемблер
СообщениеДобавлено: Вт сен 29, 2015 3:31 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 156
Serge писал(а):
pavelyakov
А парсер языка на чём написан ?

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


Вернуться к началу
 Заголовок сообщения: Re: Высокоуровневый ассемблер
СообщениеДобавлено: Чт окт 01, 2015 2:45 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 156
Во время работы с виртуальной машиной, появилось идея, как можно ускорить скорость работы, а так же отделить от виртуальной машины приложение. Это простой компилятор, который компилирует приложение по структуре с виртуальной машиной, но в то же время, добавлять только те ф-ции, которые будет использовать разрабатываемое приложение. Скорость работы значительно возрастет, ведь не приейдется в цикле считывать байт код, а так же приложение будет не зависимо от ВМ.


Вернуться к началу
 Заголовок сообщения: Re: Высокоуровневый ассемблер
СообщениеДобавлено: Чт окт 01, 2015 3:27 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 156
Сделал поддержу объектной части
Пока что не полностью
Код:
a=object(window); // определить объект как окно
a.left = 0;
a.top = 0;
a.width = 300;
a.height = 400;
create(a); // создать окно


Вернуться к началу
 Заголовок сообщения: Re: Высокоуровневый ассемблер
СообщениеДобавлено: Чт окт 01, 2015 5:58 pm 
Не в сети
Аватара пользователя

Зарегистрирован: Ср апр 15, 2015 11:13 pm
Сообщения: 156
Добавил удобный редактор объектов
Код:
<window name='obj' onmousedown=func1 onmouseup=func2></window>

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

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


Вернуться к началу
 Заголовок сообщения: Re: Высокоуровневый ассемблер
СообщениеДобавлено: Пт окт 02, 2015 9:52 pm 
Не в сети

Зарегистрирован: Вс авг 09, 2015 3:41 pm
Сообщения: 82
omg


Вернуться к началу
 Заголовок сообщения: Re: Высокоуровневый ассемблер
СообщениеДобавлено: Сб окт 03, 2015 3:10 am 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1195
Да... Мне бы часть его энергии и энтузиазма...


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 61 сообщение ]  На страницу Пред. 1 2 3 4 5 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB