User interface 装配->;桂?

User interface 装配->;桂?,user-interface,assembly,User Interface,Assembly,有没有办法将在TASM汇编中编程的应用程序链接到windows窗体应用程序或任何类型的GUI 谢谢您可以将汇编语言与C语言(可能还有其他语言)混合使用。 最通用的方法是在汇编中编写DLL,然后从GUI程序调用此DLL。 在C语言中,您还可以直接将程序与汇编程序生成的对象文件链接,只要遵循C约定即可 本教程很好地解释了C约定,但使用了NASM: 您应该注意到,TASM确实过时了,我怀疑除了教师之外,很少有人还在使用它。用汇编语言开发GUI应用程序是有价值的! 您可以在汇编中为Windows、Lin

有没有办法将在TASM汇编中编程的应用程序链接到windows窗体应用程序或任何类型的GUI


谢谢

您可以将汇编语言与C语言(可能还有其他语言)混合使用。 最通用的方法是在汇编中编写DLL,然后从GUI程序调用此DLL。 在C语言中,您还可以直接将程序与汇编程序生成的对象文件链接,只要遵循C约定即可

本教程很好地解释了C约定,但使用了NASM:

您应该注意到,TASM确实过时了,我怀疑除了教师之外,很少有人还在使用它。

用汇编语言开发GUI应用程序是有价值的! 您可以在汇编中为Windows、Linux或任何其他具有图形用户界面的操作系统创建GUI应用程序

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

因此,如果您不必使用TASM,那么还有更简单的选择。从2000年开始,人们就在积极地为Windows和其他32位平台进行汇编编程。选择的汇编程序是,和

第一个——FASM——是我的最爱,因为:

  • 它可以直接编译成可执行文件。使用链接器是可选的,仅当您确实需要它时

  • FASM的语法受TASM理想模式语法的影响

  • 编译速度非常快,即使是大型项目-500K loc源代码的编译时间为2..3秒

  • 有非常强大的宏预处理器,使复杂的项目变得容易

  • 支持多个操作系统的编程

  • 它是用FASM编写的,可以自我编译和自给自足。正因为如此,FASM非常容易在新平台上移植,是操作系统开发人员的首选编译器。例如,它完全用汇编语言编写,并使用FASM作为汇编程序

  • FASM拥有非常活跃和友好的社区。它正在积极开发中,发现的每一个bug都会消失数小时

  • 用汇编语言编写的GUI应用程序往往体积很小,具有响应速度快、资源友好的界面

    作为此类应用程序的一个示例,我可以向您介绍我的项目—它是一个用于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'                                                                                                                                                                                                                              
    

  • 使用标准WinAPI创建UI。所有Windows C++将提供有关如何创建Windows和处理消息泵的简单示例。如果您真的需要一个代码位的疯狂性能,并且相信您可以击败一个优化的C编译器,那么只在汇编中只写关键位就更合理了。我可以确认,你也可以用Delphi编译器/liker将汇编程序生成的[某些]对象文件链接到GUI中。“沃斯”是什么意思?它是否有效,即是否可行?当然是。这值得做吗?我不同意。@MattiVirkkunen这意味着用汇编语言一制作应用程序可以提供最好的软件产品质量(高速、低资源利用率),而比用其他语言制作应用程序所需的工作量要少。如果您愿意接受次优质量,是的,其他一些语言可以提供更便宜的开发。同样,您可以在其他语言中提供最好的质量,但这将比在汇编语言中更难。