2011-11-24 65 views
0

我已經看到了一本書,寫了關於組建一個彙編程序:爲什麼這個彙編程序從地址0B3D:0000加載?

assume cs:code 
    code segment 
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h 
    mov bx,0 
    mov ax,0 

    mov cx,8 
s: add ax,cs:[bx] 
    add bx,2 
    loop s 

    mov ax,4c00h 
    int 21h 
code ends 
end 

這個程序的功能是增加8號。筆者在

DOS編譯該程序,並使用DEBUG看到這個程序的加載方式。

筆者使用[R命令,並得到了

DS = 0B2DH ES = 0B2D SS = 0B3D CS = 0B3D IP = 0000

然後撰文稱,這個方案從地址0B3D:0000加載。

我很困惑,爲什麼這個程序是從地址加載0B3D:0000

這是因爲存在程序段前綴(PSP)?

如果答案是存在PSP,請問PSP是什麼?

回答

2

實際上,對於每一個程序,DOS都會創建一個所謂的Program Segment Prefix,並且程序啓動時,DS和ES段寄存器會加載其PSP的段地址。

在PSP中有許多對DOS本身和應用程序有用的東西。最有用的是程序的命令行。我從來沒有使用任何其他PSP領域,只是命令行。

您可以看到PSP herehereherehere以及許多其他地方的內容。

+0

對不起,我沒有準確地描述這個問題,並讓你誤解我的問題。現在我修改了我的問題。無論如何感謝你的答案!!!! – viperchaos

+0

@viperchaos:我已經更新了答案。 –