Board.KolibriOS.org

Official KolibriOS board
It is currently Tue Sep 24, 2019 12:11 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 1 post ] 
Author Message
 Post subject: GoAsm + KolibriOS.Lib
PostPosted: Sun Aug 06, 2017 12:46 am 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
GoAsm не такой распрстранённый ассемблер, но, например, XBLite(клон XBasic) транслирует именно в GoAsm.

Специфичность этого ассемблера, например, в том, что
  • порядок вычислений слева направо без учёта приоритетов, как в С--
    2 + 3 * 4 будет вычислено как (2 + 3) * 4, результат 20;
  • не нужно объявлять внешние символы как extern, например, успешно скомпилируется
    mov eax, [X]
    даже если X нигде не объявлено, это только линкер потом скажет что-то типа "undefined reference"
    Поэтому можно спокойно написать нигде не объявляя процедуру DrawWindow
    Code:
    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-инструкциями
    Code:
    JZ >forward_label
    JMP <backward_label
  • безымянная метка это просто двоеточие, также используется индикатор направления
    Code:
    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:
Quote:
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
Скриншот тестового приложения:
Spoiler: Show
Attachment:
GoAsm1.PNG
GoAsm1.PNG [ 3.3 KiB | Viewed 3736 times ]
Attachment:
test(GoAsm+KolibriOS.Lib).7z [1.46 KiB]
Downloaded 143 times


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 1 post ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited