为什么这个汇编程序是从地址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
这个程序的功能是把八个数字相加。笔者在
DOS中编译了这个程序,并使用DEBUG来看看这个程序是如何被加载的。
作者使用R命令得到了
DS = 0B2DH ES = 0B2D SS = 0B3D CS = 0B3D IP = 0000
然后作者说这个程序是从地址0B3D:0000加载的。
我很困惑为什么这个程序是从地址 0B3D:0000 加载的?
这是因为程序段前缀(PSP)的存在吗?
如果答案是PSP的存在,那么PSP里有什么?
I have seen a assembly program written from a book about assemble:
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
This program's function is to add eight numbers. The author compiled this program in the
DOS and use the DEBUG to see how this program be loaded.
The author use the R command and got that
DS = 0B2DH ES = 0B2D SS = 0B3D CS = 0B3D IP = 0000
And then the author said that this program is loaded from the address 0B3D:0000.
I'm a confused that why this program is loaded from the address 0B3D:0000?
Is this because the existence of the Program Segment Prefix(PSP)?
If the answer is the existence of the PSP, what is in the PSP?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
事实上,DOS 为每个程序创建一个所谓的程序段前缀,并且当程序启动时,DS 和 ES 段寄存器会加载其 PSP 的段地址。
在 PSP 中,有许多对 DOS 本身以及潜在的应用程序有用的东西。最有用的是程序的命令行。我从未使用过任何其他 PSP 字段,只使用过命令行。
您可以此处查看 PSP 内部的内容,此处,此处,此处 以及许多其他地方。
Indeed, for every program DOS creates a so-called
Program Segment Prefix
and when a program starts, the DS and ES segment registers are loaded with the segment address of its PSP.In the PSP there are a number of things useful to DOS itself and potentially to the application. The most useful one is the program's command line. I've never used any other PSP fields, just the command line.
You can see what's inside the PSP here, here, here, here and in many other places.