Page 1 of 1

Tasm32 пример

Posted: Fri Jul 07, 2017 9:26 pm
by 0CodErr
Пример на Turbo Assembler.

Необходимые инструменты:

Code: Select all

tasm32   — Turbo Assembler
link     — линкер от Microsoft
ld       — GNU линкер
objcopy  — утилита для преобразования объектных файлов
Исходный код(аналогичный коду для JWasm/HJWasm/UASM http://board.kolibrios.org/viewtopic.php?p=55776#p55776):
Spoiler:

Code: Select all

COMMENT * ----------------------------------+
|                                           |
|  Example for KolibriOS on Turbo Assembler |
|                                           |
+------------------------------------------ *

P586
MODEL Flat, StdCall
OPTION CaseMap: none

PUBLIC @Main

; Event Constants
REDRAW_EVENT        = 1
KEY_EVENT           = 2
BUTTON_EVENT        = 3
MOUSE_EVENT         = 6

; Window Style Constants
WS_SKINNED_FIXED    = 4000000H
WS_SKINNED_SIZABLE  = 3000000H
WS_FIXED            = 0000000H
WS_SIZABLE          = 2000000H
WS_FILL_TRANSPARENT = 40000000H
WS_FILL_GRADIENT    = 80000000H
WS_COORD_CLIENT     = 20000000H
WS_CAPTION          = 10000000H

; Caption Style Constants
CS_MOVABLE          = 00000000H
CS_IMMOVABLE        = 01000000H

; Event Mask Constants
EM_REDRAW           = 01H
EM_KEY              = 02H
EM_BUTTON           = 04H
EM_MOUSE            = 020H

.DATA

szHello:
        db     "Hello from Turbo Assembler!",0


.CODE

@Main:
        call   SetEventMask, EM_REDRAW + EM_BUTTON
        .REPEAT
          call DrawWindow, 200, 150, 300, 250, WS_SKINNED_FIXED + WS_COORD_CLIENT + WS_CAPTION + WS_FILL_GRADIENT, 07777FFH, OFFSET szHello, CS_MOVABLE
          call WaitEvent
        .UNTIL eax != REDRAW_EVENT
        call   ThreadTerminate

; *********************************************************************************** ;
WaitEvent PROC
        mov    eax, 10
        int    64
        ret
ENDP
; *********************************************************************************** ;
SetEventMask PROC EventMask:Dword
USES ebx
        mov    eax, 40
        mov    ebx, EventMask
        int    64
        ret
ENDP
; *********************************************************************************** ;
DrawWindow PROC L:Dword, T:Dword, W:Dword, H:Dword, Style:Dword, BackColor:Dword, Caption:Ptr, CapStyle:Dword
USES ebx, esi, edi
; BeginDraw
        mov    eax, 12
        mov    ebx, 1
        int    64
; DrawWindow
        xor    eax, eax
        mov    ebx, L
        shl    ebx, 16
        add    ebx, W
        mov    ecx, T
        shl    ecx, 16
        add    ecx, H
        mov    edx, Style
        or     edx, BackColor
        mov    edi, Caption
        mov    esi, CapStyle
        int    64
; EndDraw
        mov    eax, 12
        mov    ebx, 2
        int    64
        ret
ENDP
; *********************************************************************************** ;
ThreadTerminate PROC
        mov    eax, -1
        int    64
ENDP
; *********************************************************************************** ;

END
Линкер-скрипт для ld(аналогичный тому, что используется для Delphi http://board.kolibrios.org/viewtopic.php?f=33&t=3469):
Spoiler:

Code: Select all

PATH_SIZE   = 1024;
PARAMS_SIZE =  256;
STACK_SIZE  = 1024;

SECTIONS
{
  .all : {
    LONG(0x554e454D);
    LONG(0x31305445);
    LONG(1);
    LONG("@Main");
    LONG(END);
    LONG($END + PATH_SIZE + PARAMS_SIZE + STACK_SIZE);
    LONG($END + PATH_SIZE + PARAMS_SIZE + STACK_SIZE);
    LONG($END + PATH_SIZE);
    LONG($END);
    . = ALIGN(16);
    *(.text)
    . = ALIGN(16);
    *(.data)
END = .;
    . = ALIGN(16);
    *(.bss)
    . = ALIGN(16);
$END = .;
  }
}
make.bat:
Spoiler:

Code: Select all

Set NAME=test

tasm32 %NAME%.asm
link -edit %NAME%.obj
LD -T LScript.x %NAME%.obj -o %NAME%.kex
objcopy -O binary -j .all %NAME%.kex

Del %NAME%.obj

Pause
Скриншот окна полученного приложения:
Spoiler:
hello from tasm32.PNG
hello from tasm32.PNG (4.02 KiB)
Viewed 5934 times
Downloaded 452 times

TASM+KolibriOS.lib

Posted: Sun Aug 13, 2017 9:28 pm
by 0CodErr
Пример использования TASM и KolibriOS.lib.
Просто окно и обработка событий.
Этот пример похож на предыдущий, но с использованием KolibriOS.lib.
Скриншот
Spoiler:
1.png
1.png (3.57 KiB)
Viewed 5857 times
Для сборки нужны те же самые инструменты(tasm32, link, ld, objcopy) и сама KolibriOS.lib, которую можно взять из темы Delphi7 examples http://board.kolibrios.org/viewtopic.php?f=33&t=3469
Downloaded 381 times