汇编网首页登录博客注册
masmaster的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
文章收藏

[2010-07-22 09:51] 关于PSP的一点知识

在dos下执行某个程序, 则它的各个段以及指针寄存器寻址的位置以及内存的组织如下图:
偏移                   段
-----------------------
|                     |
|                     |
|程序和所有的程序段   |
|                     |
|                     |
|                     |
|                     |
|---------------------|0000:00FFH CS和SS             
|                     |
|       PSP           |
|                     |
|                     |
----------------------|0000:0000H DS和ES
# 装入程序将程序和它的段放在内存中PSP后面,
SP=0000,而且IP是在END指令后形成的地址。

其中,CS和SS都指向紧跟PSP后的代码段其实地址,这是由于连接时确定的, 这是假定程序中没有指定栈段。否则栈段应该位于PSP和代码段之间的位置。
PSP中包含有命令行引入的信息, 从偏移地址82H开始,段地址用的是ES段,偏移地址80H包含的是包含的是命令行的长度,81H是一个空格,82H开始就是命令行参数的具体信息。

【程序段前缀内容表】
-------------------------------------------------------
81H        命令行(空格开始)
80H        命令行长度
6CH        FCB2
5CH        FCB1
52H        保留
50H        DOS调用
2EH        保留
2CH        环境地址(段)
16H        保留
14H        严重错误地址(段)
12H        严重错误地址(偏移)
10H        control-break地址(段)
0EH        control-break地址(偏移)
0CH        结束地址(段)
0AH        结束地址(偏移)
06H        段内字节数
05H        操作代码
04H        保留
02H        内存顶
00H        int 20 h
-------------------------------------------------------
评论次数(4)  |  浏览次数(1516)  |  类型(汇编语言笔记) |  收藏此文  | 

[  游客   发表于  2010-07-28 10:04  ]

其中,CS和SS都指向紧跟PSP后的代码段其实地址,这是由于连接时确定的, 这是假定程序中没有指定栈段。否则栈段应该位于PSP和代码段之间的位置。 
---------
各个段的位置,得看程序中是怎么排布的。这个第六章实验例子证明了。

比如在tc默认模式中,PSP后是代码段,然后是数据段,栈段。

[  masmaster   发表于  2010-07-28 10:58  ]

哦~~

[  游客   发表于  2010-07-28 13:06  ]

一楼的游客又在胡说八道 误人子弟 不懂就不要装

[  masmaster   发表于  2010-07-28 17:14  ]

呵呵·~~~

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码