Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Пн дек 11, 2017 7:52 pm

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




Начать новую тему  Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: GoAsm + KolibriOS.Lib
СообщениеДобавлено: Вс авг 06, 2017 12:46 am 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 1082
GoAsm не такой распрстранённый ассемблер, но, например, XBLite(клон XBasic) транслирует именно в GoAsm.

Специфичность этого ассемблера, например, в том, что
  • порядок вычислений слева направо без учёта приоритетов, как в С--
    2 + 3 * 4 будет вычислено как (2 + 3) * 4, результат 20;
  • не нужно объявлять внешние символы как extern, например, успешно скомпилируется
    mov eax, [X]
    даже если X нигде не объявлено, это только линкер потом скажет что-то типа "undefined reference"
    Поэтому можно спокойно написать нигде не объявляя процедуру DrawWindow
    Код:
    Invoke DrawWindow, [Window.Left], [Window.Top], [Window.Right], [Window.Bottom], Offset szHello, WINDOW_COLOR, WS_SKINNED_FIXED | WS_COORD_CLIENT | WS_CAPTION, CS_MOVABLE
    из плюсов: меньше писать кода
    из минусов: нет контроля передаваемых параметров
  • так как ассемблер разработан специально для Windows, то считается, что все процедуры StdCall(а для 64 bit FastCall).
  • для улучшения читаемости кода используются так называемые индикаторы направления, используемые совместно с jump-инструкциями
    Код:
    JZ >forward_label
    JMP <backward_label
  • безымянная метка это просто двоеточие, также используется индикатор направления
    Код:
    CMP EAX,EDX
    JZ >
    CALL PROCESS
    :
    RET

Для сборки нужно GoAsm, LD, OBJCOPY, KolibriOS.Lib.
GoAsm можно скачать тут http://www.godevtool.com
KolibriOS.Lib можно взять из темы Delphi7 examples viewtopic.php?f=33&t=3469

Только почему-то линкер выдаёт warnings:
Цитата:
LD: Warning: type of symbol `GetSkinHeight' changed from 8192 to 32
LD: Warning: type of symbol `WaitEvent' changed from 8192 to 32
LD: Warning: type of symbol `BeginDraw' changed from 8192 to 32
LD: Warning: type of symbol `DrawText' changed from 8192 to 32
LD: Warning: type of symbol `GetButton' changed from 8192 to 32
Скриншот тестового приложения:
Спойлер: Показать
Вложение:
GoAsm1.PNG
GoAsm1.PNG [ 3.3 КБ | 247 просмотров ]
Вложение:
test(GoAsm+KolibriOS.Lib).7z [1.46 КБ]
17 скачиваний


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 1 сообщение ] 

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


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

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


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

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