汇编程序中Fatal:No Program entry point错误的解决办法

本文介绍了使用Tasm编译器时遇到的“Fatal:NoProgram入口点”错误,并提供了具体的解决方案。通过对示例程序进行简单修改,即添加程序入口标签,解决了链接过程中的这一致命错误。

    不得不说,我觉得一本真正可以称得上是好的教材都应该像王爽老师写的《汇编语言》那样,不追求书有多厚,也不追求书的内容有多高深莫测,更不追求书有多么晦涩难懂,看起来有多么的高大上,而应该是用极其耐心的解释以及合理的逻辑结构为读者解惑。相比于现在很多所谓的入门级教材而言,这本书思路清晰,解释到位,因而绝对可以称得上是良心之作。

    今天在阅读到《汇编语言》这本书的第四章时,遇到了一个小小的问题,在此做一个简单记录。

    从本书的第四章开始,正式由散碎的单条指令转入整体化的汇编程序。按照我们学校的要求,我使用的编译器是Tasm,可能是因为王爽老师在编写这本书时使用的是Masm,因而在使用过程中出现了一点偏差,这也是产生这次我所描述的错误的根源。但是这个根源在程序里面是可以进行修改的。

    该例如下:编程运算2^3

assume cs:abc
abc segment
     mov ax,2
     mov ax,ax
     mov ax,ax
abc ends
end

    代码的具体解释在此不做过多解释,这里着重解释一下出现的错误

    首先,打开虚拟盒,进行一波编译链接前的常规操作:


在使用tasm.exe进行编译的时候没有发生问题,但是在使用tlink.exe进行链接的时候却歇菜了,报出的错误正是标题中的Fatal:No Program entry point。它的意思是没有程序入口,这个错误在Masm5中不会出现,但是Tasm却对此有严格要求,因此在不改变编译器的情况下,我们通过修改程序可以实现,只要给出程序入口就可以了。


我们对代码做如下修改,增加start和end start:

assume cs:abc
abc segment
start: mov ax,2
       mov ax,ax
       mov ax,ax
abc ends
end start
end
这样修改之后,问题就迎刃而解啦,出现warning:No stack表示链接成功


"D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x64\cl.exe" /Foc:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT\.\CustomPattern.obj /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Gw /Gs99999 /Ic:\edk2-udk2018\KtiBttPkg\KtiBtt /Ic:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG /Ic:\edk2-udk2018\MdePkg /Ic:\edk2-udk2018\MdePkg\Include /Ic:\edk2-udk2018\MdePkg\Include\X64 /Ic:\edk2-udk2018\KtiBttPkg /Ic:\edk2-udk2018\KtiBttPkg\Include c:\edk2-udk2018\KtiBttPkg\KtiBtt\CustomPattern.c cl: 命令行 warning D9025 :正在重写“/Gs32768”(用“/Gs99999”) CustomPattern.c "D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x64\cl.exe" /Foc:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT\.\KtiTest.obj /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Gw /Gs99999 /Ic:\edk2-udk2018\KtiBttPkg\KtiBtt /Ic:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG /Ic:\edk2-udk2018\MdePkg /Ic:\edk2-udk2018\MdePkg\Include /Ic:\edk2-udk2018\MdePkg\Include\X64 /Ic:\edk2-udk2018\KtiBttPkg /Ic:\edk2-udk2018\KtiBttPkg\Include c:\edk2-udk2018\KtiBttPkg\KtiBtt\KtiTest.c cl: 命令行 warning D9025 :正在重写“/Gs32768”(用“/Gs99999”) KtiTest.c "D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x64\cl.exe" /Foc:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT\.\AutoGen.obj /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Gw /Gs99999 /Ic:\edk2-udk2018\KtiBttPkg\KtiBtt /Ic:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG /Ic:\edk2-udk2018\MdePkg /Ic:\edk2-udk2018\MdePkg\Include /Ic:\edk2-udk2018\MdePkg\Include\X64 /Ic:\edk2-udk2018\KtiBttPkg /Ic:\edk2-udk2018\KtiBttPkg\Include c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\AutoGen.c cl: 命令行 warning D9025 :正在重写“/Gs32768”(用“/Gs99999”) AutoGen.c "D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x64\lib.exe" /NOLOGO /LTCG /OUT:c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT\KtiTest.lib @c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT\object_files.lst "D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x64\link.exe" /OUT:c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\KtiTest.dll /NOLOGO /NODEFAULTLIB /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:_ModuleEntryPoint /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data /WHOLEARCHIVE @c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT\static_library_files.lst 正在生成代码 已完成代码的生成 LINK : warning LNK4281:x64 映像的基址 0x0 不适当;将基址设为 4 GB 以上以实现最佳 ASLR 优化 "D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\Hostx86\x64\link.exe" /OUT:c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\KtiTest.dll /NOLOGO /NODEFAULTLIB /IGNORE:4001 /IGNORE:4254 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:_ModuleEntryPoint /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /MERGE:.rdata=.data @c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT\static_library_files.lst 正在生成代码 已完成代码的生成 LINK : warning LNK4281:x64 映像的基址 0x0 不适当;将基址设为 4 GB 以上以实现最佳 ASLR 优化 "GenFw" -e UEFI_APPLICATION -o c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\KtiTest.efi c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\KtiTest.dll copy /y c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\KtiTest.efi c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT 已复制 1 个文件。 copy /y c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\KtiTest.efi c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiTest.efi 已复制 1 个文件。 copy /y c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\*.map c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\KtiTest.map 已复制 1 个文件。 copy /y c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\*.pdb c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\OUTPUT c:\edk2-udk2018\Build\KtiBttPkg\RELEASE_VS2017\X64\KtiBttPkg\KtiBtt\KtiTest\DEBUG\*.pdb 弦低痴也坏街付ǖ奈募? 迅粗? 0 个文件。 Traceback (most recent call last): Traceback (most recent call last): File "C:\Python27\lib\logging\__init__.py", line 882, in emit File "C:\Python27\lib\logging\__init__.py", line 882, in emit IOError: [Errno 0] Error IOError: [Errno 0] Error Logged from file build.py, line 248 Logged from file build.py, line 248 - Done - Build end time: 11:58:12, Aug.15 2025 Build total time: 00:00:02现在还有什么问题
最新发布
08-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值