我已經看到很多時候,遠指針用於TSR。爲什麼這些TSR程序需要更多的指示,以及爲什麼這些被認爲對一般機器有害。爲什麼我們在爲TSR工作時需要遠程指針?
-4
A
回答
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
相關問題
- 1. 我必須爲NULL指針的malloc?我什麼時候需要爲malloc指針?
- 2. 爲什麼我們需要指針的不同數據類型?
- 3. 爲什麼我需要將此指針作爲屬性?
- 4. 爲什麼我們要傳遞指針的指針cudaMalloc
- 5. 爲什麼我們需要多個工作流程?
- 6. 爲什麼我們需要在調用函數時遞減堆棧指針
- 7. 爲什麼我們需要時代?
- 8. 我們需要指針嗎?
- 9. 爲什麼我們需要在JavaScript
- 10. 爲什麼需要工作流程/ BPM?
- 11. 爲什麼有人需要一個指向指針的指針?
- 12. 指南針:爲什麼我需要做一個雙重導入工作?
- 13. 爲什麼我們需要公鑰簽名時需要HMAC?
- 14. 爲什麼我會永遠需要cancelAnimationFrame()
- 15. 當我們有點子時,爲什麼我們需要Anaconda?
- 16. 爲什麼我們需要在Apache Kafka中指定Serializer?
- 17. 爲什麼我們需要在Spring中指定HttpMessageConverter?
- 18. 爲什麼NSError需要雙重間接? (指針指針)
- 19. 爲什麼我們需要simple_one_for_one?
- 20. 爲什麼我們需要TensorFlow tf.Graph?
- 21. 爲什麼我們需要使用prompt.start()?
- 22. 爲什麼我們需要scalaz.stream迭代?
- 23. 爲什麼我們需要WCF
- 24. 爲什麼我們需要Anaconda 2.7?
- 25. 爲什麼我們需要編寫log.isDebugEnabled?
- 26. 爲什麼我們需要ng-click?
- 27. 爲什麼我們需要Control.Lens.Reified?
- 28. 我們爲什麼需要纖維
- 29. 爲什麼我們需要org.junit.ComparisonFailure?
- 30. 爲什麼我們需要addRequestHeader方法?
你能解釋一下什麼是TSR? – zxcdw
什麼是TSR?存儲說明符有多遠?什麼是通用機器?你的意思是PC架構而不是嵌入式? – RedX
http://en.wikipedia.org/wiki/Terminate_and_Stay_Resident&也 http://en.wikipedia.org/wiki/Far_pointer – James