精华解读:https://zhidao.baidu.com/question/195901151.html
段地址SA,默认在DS中!
查看PSP命令:
-d ds:0
一般来说,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
自己的人话版解读:
王爽老师汇编语言书里面的截图:
SA的介绍:
无论是书本,还是搞这个的老哥们。都意思如下:
只需要知道第一步,程序地址=SA * 16 + 256,即可。
PSP是什么呢?
书上也说啦。就是取出段内存区的前面256个字节。用来与被加载程序通信。
虽然是废话,但是在此作为一个烂笔头的存在好啦~
关于程序物理地址: SA+10H:0
出现过程:
首先PSP的物理地址:SA*16+0;再补上预留给PSP的256个字节(即是:100H)。
故而: (SA*16+0)+256
=(SA+16)*16+0
化为16进制=(SA+10H):0