gpt4 book ai didi

user-interface - 汇编->桂?

转载 作者:行者123 更新时间:2023-12-04 03:35:02 25 4
gpt4 key购买 nike

有什么方法可以将用TASM ASSEMBLY编程的应用程序链接到Windows窗体应用程序或任何类型的GUI?

谢谢

最佳答案

用汇编语言开发GUI应用程序值得!

您可以在Windows,Linux或任何其他具有图形用户界面的OS的程序集中创建GUI应用程序。

您甚至可以使用TASM来创建它们,尽管我不确定这样做到底有多精确。请注意,您将需要支持32位/64位保护模式指令的TASM版本,以及一个可以将TASM生成的目标文件链接到PE可执行文件(Windows的可执行格式)的链接器。

因此,如果您不受TASM的束缚,那么还有很多更容易的选择。从2000年开始,人们就开始积极地为Windows和其他32位平台进行汇编编程。选择的汇编器是FASMNASMMASM32

我最喜欢第一个-FASM,因为:

  • 它可以直接编译为可执行文件。仅在确实需要链接器时,才使用链接器。
  • FASM的语法受TASM IDEAL模式的语法影响。
  • 可以非常快速地编译甚至是大型项目-500K loc源的编译时间为2..3秒。
  • 具有非常强大的宏预处理器,可简化复杂项目的工作。
  • 支持对多个OS进行编程。
  • 它是用FASM编写的,具有可自编译性和自足性。因此,FASM非常易于在新平台上移植,是OS开发人员的首选编译器。例如,KolibriOS完全用汇编语言编写,并使用FASM作为汇编程序。
  • FASM具有非常活跃和友好的社区。它正在积极开发中,发现的每个错误都会消失数小时。

  • 用汇编语言编写的GUI应用程序通常尺寸很小,具有非常敏感的界面,快速且资源友好。

    作为此类应用程序的示例,我可以将您指向我的项目 Fresh IDE-它是用于FASM编程的高级Visual RAD IDE。它的功能非常丰富,但是可执行文件的大小仅为250kB。

    最后有两个代码示例:
  • 使用高级FASM宏系统的非常简单的“Hello world”示例:
    include 'win32ax.inc' 

    .code
    start:
    invoke MessageBox,HWND_DESKTOP,"Hellow world!", "Hello!", MB_OK
    invoke ExitProcess,0

    .end start
  • 具有主窗口的更复杂的模板应用程序:
    ; 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'
  • 关于user-interface - 汇编->桂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2637436/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com