2012-11-26 20 views
1

這裏使用 「MOV AX,代碼」 是我的代碼(我用TASM)在COM文件

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文件:段無法擺放的物品「。 我不明白爲什麼它不好?我只使用一個細分。

+2

'mov ax,CODE'沒有任何意義。你想要做什麼? – nrz

+0

@nrz我知道。我想了解爲什麼它會導致錯誤 –

回答

2

一個.com可執行文件是一個非常簡單的文件格式,它不能有任何段。它啓動時將所有段寄存器設置爲唯一的段,該值是不可預知的。

嘗試引用像你一樣的段給鏈接器一個心臟病發作,你問它預測不可預知的。這隻能在可重定位的可執行文件中運行,即.exe。這是一種可執行文件格式,其中還包含代碼中需要根據段的加載地址進行調整的位置列表。 .exe文件被寫入,就像每個段在0000:0000加載一樣。操作系統加載器確定每個段在運行時實際加載的位置。然後在該表中修補代碼以添加段加載地址。然後啓動程序。這不能在.com文件中工作,它沒有該表。

+0

沒錯。 'mov ax,cs'應該做你想做的事情,而不需要任何重定位。 –