1

这是我的代码(我使用 TASM)

CODE SEGMENT                  
ASSUME CS:CODE, DS:CODE, SS:CODE

org 256     
;------start-------
STARTPROC       PROC
        mov ax, CODE
        ret
STARTPROC       ENDP    

CODE ENDS
        end STARTPROC

“mov ax, CODE”行导致 TLINK 中的错误 - “无法生成 COM 文件:存在段可重定位项目”。我不明白为什么它不好?我只使用一个片段。

4

1 回答 1

2

.com 可执行文件是一种非常简单的文件格式,它不能有任何段。它启动时将所有段寄存器设置为唯一段,其值是不可预测的。

尝试像您那样引用一个片段会使链接器心脏病发作,您要求它预测不可预测的情况。这只能在可重定位的可执行文件 .exe 中工作。这是一种可执行文件格式,其中还包含代码中需要针对段的加载地址进行调整的位置列表。.exe 文件的编写就像每个段在 0000:0000 加载一样。操作系统加载器确定每个段在运行时实际加载的位置。并遍历该表,修补代码以添加段加载地址。然后启动程序。这不能在 .com 文件中工作,它没有那个表。

于 2012-11-26T18:20:02.480 回答