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

GoAsm + KolibriOS.Lib
http://board.kolibrios.org/viewtopic.php?f=32&t=3579
Страница 1 из 1

Автор:  0CodErr [ Вс авг 06, 2017 12:46 am ]
Заголовок сообщения:  GoAsm + KolibriOS.Lib

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 КБ | 89 просмотров ]
Вложение:
test(GoAsm+KolibriOS.Lib).7z [1.46 КБ]
9 скачиваний

Страница 1 из 1 Часовой пояс: UTC+03:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/