【问题标题】:why this assembly program is loaded from the address 0B3D:0000?为什么这个汇编程序是从地址 0B3D:0000 加载的?
【发布时间】:2011-11-24 07:55:01
【问题描述】:

我看过一本关于汇编的书写的汇编程序:

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里面有什么?

【问题讨论】:

    标签: assembly dos


    【解决方案1】:

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

    在 PSP 中有许多对 DOS 本身有用的东西,也可能对应用程序有用。最有用的是程序的命令行。我从未使用过任何其他 PSP 字段,仅使用命令行。

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

    【讨论】:

    • 对不起,我没有准确描述问题,让您误解了我的问题。现在我修改了我的问题。无论如何感谢您的回答!!!!
    猜你喜欢
    • 2010-10-30
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 2014-01-10
    相关资源
    最近更新 更多