有没有办法将用 TASM 汇编语言编写的应用程序与 Windows 窗体应用程序或任何类型的图形用户界面链接起来?
谢谢
有没有办法将用 TASM 汇编语言编写的应用程序与 Windows 窗体应用程序或任何类型的图形用户界面链接起来?
谢谢
您可以为Windows、Linux或任何其他具有图形用户界面的操作系统创建GUI应用程序。
即使使用TASM,也可以创建它们,尽管我不确定该如何实现。请注意,您需要支持32位/64位保护模式指令的TASM版本,以及能够将TASM生成的目标文件链接到PE可执行文件(Windows的可执行文件格式)的链接器。
因此,如果您不受TASM的限制,则有更简单的替代方案。自2000年代初以来,有人积极地为Windows和其他32位平台编写汇编代码。选择的汇编器是FASM,NASM和MASM32。
首选的第一个-FASM-是我的最爱,因为:
它可以直接编译成可执行文件。使用链接器是可选的,只有在真正需要时才需要使用。
FASM的语法受到TASM IDEAL模式语法的影响。
即使是庞大的项目 - 500K loc源代码也可以在2..3秒内编译。
具有非常强大的宏预处理器,使复杂项目变得容易。
支持为多个操作系统编程。
它是用FASM编写的,是自编译和自给自足的。因此,FASM非常易于在新平台上移植,是操作系统开发人员的首选编译器。例如KolibriOS完全用汇编语言编写,使用FASM作为汇编器。
FASM拥有非常活跃和友好的社区。它正在积极开发中,每发现一个错误就会在几小时内消失。
用汇编语言编写的GUI应用程序往往非常小巧,界面反应迅速,快速且资源友好。
作为这种应用的例子,我可以向您介绍我的项目Fresh IDE - 这是一个高级的视觉RAD IDE,用于FASM编程。它非常功能丰富,但可执行文件的大小仅为250kB。Very simple "Hello world" example using advanced FASM macro system:
include 'win32ax.inc'
.code
start:
invoke MessageBox,HWND_DESKTOP,"Hellow world!", "Hello!", MB_OK
invoke ExitProcess,0
.end start
More complex template application with main window:
; Template for program using standard Win32 headers
format PE GUI 4.0
entry start
include 'win32w.inc'
section '.text' code readable executable
start:
invoke GetModuleHandle,0
mov [wc.hInstance],eax
invoke LoadIcon,0,IDI_APPLICATION
mov [wc.hIcon],eax
invoke LoadCursor,0,IDC_ARROW
mov [wc.hCursor],eax
invoke RegisterClass,wc
test eax,eax
jz error
invoke CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_DLGFRAME+WS_SYSMENU,128,128,256,192,NULL,NULL,[wc.hInstance],NULL
test eax,eax
jz error
msg_loop:
invoke GetMessage,msg,NULL,0,0
cmp eax,1
jb end_loop
jne msg_loop
invoke TranslateMessage,msg
invoke DispatchMessage,msg
jmp msg_loop
error:
invoke MessageBox,NULL,_error,NULL,MB_ICONERROR+MB_OK
end_loop:
invoke ExitProcess,[msg.wParam]
proc WindowProc uses ebx esi edi, hwnd,wmsg,wparam,lparam
cmp [wmsg],WM_DESTROY
je .wmdestroy
.defwndproc:
invoke DefWindowProc,[hwnd],[wmsg],[wparam],[lparam]
jmp .finish
.wmdestroy:
invoke PostQuitMessage,0
xor eax,eax
.finish:
ret
endp
section '.data' data readable writeable
_class TCHAR 'FASMWIN32',0
_title TCHAR 'Win32 program template',0
_error TCHAR 'Startup failed.',0
wc WNDCLASS 0,WindowProc,0,0,NULL,NULL,NULL,COLOR_BTNFACE+1,NULL,_class
msg MSG
section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'
include 'api\kernel32.inc'
include 'api\user32.inc'