为什么这个汇编程序是从地址0B3D:0000加载的?

时间:2011-11-24 07:55:02

标签: assembly dos

我见过一本关于汇编的书中的汇编程序:

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

该程序的功能是添加八个数字。作者在

中编译了这个程序

DOS 并使用 DEBUG 查看如何加载此程序。

作者使用 R 命令并获得

  

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

然后作者说该程序是从地址 0B3D:0000 加载的。

我很困惑为什么这个程序是从地址 0B3D:0000 加载的?

这是因为程序段前缀(PSP)的存在吗?

如果答案是 PSP 的存在, PSP 中的内容是什么?

1 个答案:

答案 0 :(得分:2)

实际上,对于每个程序,DOS都会创建一个所谓的Program Segment Prefix,当程序启动时,DS和ES段寄存器会加载其PSP的段地址。

在PSP中,有许多对DOS本身以及可能对应用程序有用的东西。最有用的是程序的命令行。我从来没有使用任何其他PSP字段,只是命令行。

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