汇编语言PSP段前缀一个异常现象

烟雨国度 2018-04-24 11:18:25


,PSP是256个字节,当程度生成了可执行文件以后,在执行的时候,先将程序调入内存,这个时候DS中存入程序在内存中的段地址,紧接着是程序的一些说明,比如说程序占用多大空间等等,这就是PSP,一般PSP占256个字节,然后才是真正的程序地址,将CS指向这里,IP设为0000,为什么一般CS要比DS大10H,就是因为这个原因,简单说:DS存放的是程序段地址,由于PSP的存在,真正要执行的地址是DS再加上256个字节,真正的地址是DS*16+256化简一下:DS*16+0+16*16=16*(DS+16)真正的地址又可以写成:cs*16+0
所以CS相当于DS+16,化成十六制是DS+10
总的来说一开始的DS不想让人动
...全文
1099 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2018-04-24
  • 打赏
  • 举报
回复
异常,哪里异常了?
程序段前缀PSP(Program Segment Prefix) 和段前缀(Segment override prefixes)没什么直接关系。PSP 的 segment 是区域区块的意思,不是 cpu 里的段寄存器;直接地址要加上 ds: 之类的前缀如 mov bl, ds:[0] 只是 masm 汇编软件的个历史 bug 吧。
另外,也不能认为 PSP 后就是 CS 代码段部分,因为也有程序把数据和堆栈放在前面的,再后面才是代码,这样 CS 就不是比 PSP 大 10H 了,还得再加上之前的数据和堆栈等段的大小。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧