2012-06-20 34 views
-4

我已經看到很多時候,遠指針用於TSR。爲什麼這些TSR程序需要更多的指示,以及爲什麼這些被認爲對一般機器有害。爲什麼我們在爲TSR工作時需要遠程指針?

+3

你能解釋一下什麼是TSR? – zxcdw

+0

什麼是TSR?存儲說明符有多遠?什麼是通用機器?你的意思是PC架構而不是嵌入式? – RedX

+4

http://en.wikipedia.org/wiki/Terminate_and_Stay_Resident&也 http://en.wikipedia.org/wiki/Far_pointer – James

回答

1

由於TSR程序必須共享不保證留在單個段中的地址空間,因此需要一個遠地址(即包含segmant:地址)座標來標識指針。這是有點歷史,因爲據我所知在DOS下才有意義。

0

誰說他們有害?他們只需要比別人更多的空間,因此在過去受到挫折。此外,段寄存器必須改變使用它們。

如果你詳細說明它們在TSR中的使用位置,我可能會告訴更多。

2

遠指針由兩部分組成,一個段選擇器和一個偏移量。

分段尋址的一般問題(只適用於16位真實模式,與DOS後計算機使用的32位保護模式不同)是物理存儲器中的單個位置可以從多個「遠」指針。 (這就是爲什麼它在正常的16位編碼中不受歡迎)

維基百科給出的例子是有效的。

char far *p =(char far *)0x55550005; 
char far *q =(char far *)0x53332225; 

兩者都指向地址0x55555。 來源: http://en.wikipedia.org/wiki/Far_pointer

當程序正在執行時,它並不總是需要指定一個段偏移(它可以使用近指針),這是因爲它使用的存儲器段已經被選中。

對於TSR程序,當控制必須轉回到原始程序時,將執行一個完全不同的程序。原始程序無法知道當前選定的段是什麼,因此必須提供包含段和偏移量的完整「遠指針」。 http://en.wikipedia.org/wiki/Terminate_and_Stay_Resident

還要注意 http://en.wikipedia.org/wiki/X86_memory_segmentation

相關問題