PSP(程式段前綴)究竟是什么?
我在 Google 中搜索,但找不到任何清晰直接的答案來幫助我完全理解它。
它有什么作用以及它的用途是什么?
uj5u.com熱心網友回復:
當您想在 DOS 中運行程式時,它的命令處理器會從剩余的空閑記憶體中保留一個塊,并在該塊的開頭command.com填充一個稱為PSP的 256 位元組長的結構。可執行程式的映像從磁盤加載到 PSP 后面的記憶體中。PSP 的段地址被加載到段暫存器中DS并ES啟動程式。
如果是 COM 程式,CS=DS=ES=SS并且指令指標IP設定在 PSP 之后,即IP=256.
當程式是 MZ 可執行時,CS:IP并SS:SP從 MZ 標頭中的相應欄位設定。
程式段前綴在許多方面對程式很有用:
80h啟動的程式可以檢查位于PSP中偏移量的命令列引數。- 帶有環境變數的字串塊的段地址可以在
PSP:2Ch. - 程式可能會鉤住并更改默認系統對 Ctrl-Break 的
PSP:0Eh反應或對嚴重錯誤的反應PSP:12h。 - 它可以獲取其父行程的 PSP 地址,以
PSP:16h了解它是從其他可執行程式啟動command.com還是從其他可執行程式生成的。 INT 20h最后但并非最不重要的一點是,在 COM 程式中PSP:0可以使用return 指令通過一條指令來終止自身RET。
更詳細的 PSP 描述可以在Wikipedia中找到。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/459725.html
下一篇:BMP標頭應該是什么樣子?
