【问题标题】:tlink error: <filename>.asm : bad object filetlink 错误:<文件名>.asm:错误的目标文件
【发布时间】:2020-08-18 04:54:09
【问题描述】:

我正在使用来自以下站点的 TASM 汇编器版本,它是为 64 位 Windows 创建的单独配置版本: https://techapple.net/2013/01/tasm-windows-7-windows-8-full-screen-64bit-version-single-installer/#comment-187611

以下代码(addbyte.asm) 只是简单地将两个数字相加。

我用它编译过

tasm addbyte.asm

它编译没有问题。

data segment
num1 db 05h
num2 db 05h
result db ?
data ends

code segment
assume ds:data, cs:code
start:
mov ax,data
mov ds,ax
mov al,num1
mov bl,num2
add al,bl
mov result,ah
mov ah,4ch
int 21
code ends
end start
end

但是当我尝试将其链接为...时

tlink addbyte.asm

tlink addbyte.obj

上面写着:

addbyte.asm : 错误的目标文件

更新:我尝试了tlink addbyte.obj,得到以下结果:

在此之前我从来没有写过一行汇编代码,我只是跟着我的导师,她建议使用这个汇编器来编译 x86 汇编代码。我不确定这里发生了什么。我只是被困在这里。任何帮助将不胜感激。

【问题讨论】:

  • 您首先必须与tasm addbyte.asm 组装以获取obj(目标文件),然后与应创建addbyte.exetlink addbyte.obj 链接
  • @MichaelPetch 很抱歉在链接之前没有明确说明我已经编译了它。
  • Diksha,该 TD 窗口看起来就像您刚刚使用 td 单独调用它一样。你试过运行td addbytes吗?

标签: assembly x86 linker tasm


【解决方案1】:

tlink 程序是一个链接器,它能够获取已已经被组装或编译的二进制文件,并从中生成可执行文件。您需要通过汇编器运行您的源代码以获得二进制汇编文件,即tasm 程序。

流程基本是:

asmSource -> TASM -> objFile -> TLINK -> exeFile

(尽管tlink 有可能采用多个目标文件或编译器采用高级语言将其转换为目标文件):

asmSource -> TASM -----> objFile
                                \
                                 >-> TLINK -> exeFile
                                /
hllSource -> COMPILER -> objFile

事实上,您发布的链接实际上包含以下信息(意译):

  • 用于编译,tasm filename.asm
  • 用于链接,tlink filename.obj
  • 对于调试器,tdtd filename
  • 对于执行,filename.exe

在您的特定情况下,您可能会发现此序列有效(减去右侧的 cmets):

tasm addbyte.asm    # to assemble.
tlink addbyte.obj   # to link.
addbyte.exe         # to run.
td addbyte.exe      # to debug.

举例来说,这是一个正确组装、链接和运行示例add2 程序的快照,该示例程序与该软件包一起分发(但是,如果意图是添加两个数字,则它不是一个很好的 程序):


而且,顺便说一句,我不确定实际使用 tasm 是否明智。我知道 DosBox 对任何用途都是免费的,但tasm 本身在很大程度上是一个商业产品,可能仍受版权限制。从记忆中,它从 Borland 到 Inprise 再到 Codegear,然后我认为它以 Embarcadero 告终,尽管他们在他们的网站上没有提到它,所以我不能确定。实际上,我拥有一份合法副本,因为我是那种从不扔任何东西的人,这让我妻子很不屑:-)

现在你可能没问题(顺便说一句,这不是法律建议),但你最好还是谨慎行事并为你的目的寻找另一个汇编程序,比如Netwide Assembler,或者Yasm.

【讨论】:

  • 如果一个人没有使用 TASM 理想模式并且您想要一个 MASM 兼容的汇编器,那么 JWASM 就可以很好地工作。它非常兼容(除了 cmd 行选项)并且在开源许可证 (Sybase/Watcom) 下可用。 japheth.de/JWasm.html。它适用于大多数操作系统(linux/MacOS/DOS/Windows),并且可能与 Linux 发行版包管理器一起使用。有一个 JWLINK 链接器,尽管汇编器可以在没有链接器的情况下直接输出 DOS MZ 或 COM 程序。可以使用jwasm -mz addbyte.asm 生成 DOS MZ 程序,该程序会生成 addbyte.exe
  • 嘿,谢谢你的回答,实际上我发现它也适用于“tlink addbyte”和“td addbyte”。谢谢你们也推荐组装工:)
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 2010-12-29
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多