在COM文件中使用“mov ax,code”

时间:2012-11-26 17:44:44

标签: assembly

这是我的代码(我使用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文件:存在段可重定位项”。 我不明白为什么这么糟糕?我只使用一个段。

1 个答案:

答案 0 :(得分:2)

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

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