2011-11-24 28 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:我已经更新了答案。 –