8086汇编中,ds+10H=CS,为何?psp里面没内容??

追风筝的孩子 2011-03-16 04:58:52
学的是王爽的8086,所以不知道32位的情况

首先,书上说ds后面的10h单元是psp,之后就是程序的执行的开始,至于psp是游戏机还是啥,他说不用知道,这叫只是屏蔽,那么我想,PSP占了内存,那里面有东西吗??
于是debug了一下一段小代码

assume cs:code,ss:stack,ds:data

data segment

dw 0123h,0456h

data ends


stack segment

dw 0,0

stack ends

code segment

start: mov ax,stack
mov ss,ax
mov sp,16

mov ax,data
mov ds,ax

push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov bx,888h
mov ds:[0],bx

mov ax,4c00h
int 21h

code ends
end start


当debug到第五行指令的时候查看



发现data的那一段占了10h单元,这个我理解,但为何stack那一段不是也占10h单元的

还有CS-DS=20h,psp似乎并没有存在??表示不解
...全文
586 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shzhfu 2011-03-16
  • 打赏
  • 举报
回复 1
执行到第5行时,ds指向的是你的data段的地址,已非PSP的地址了。
shzhfu 2011-03-16
  • 打赏
  • 举报
回复 2
PSP叫做程序段前缀,它占用100H个字节,存放程序装入内存后的一些信息。刚装入程序时,ds指向PSP的段地址,所以程序中开始一般都有把数据段段地址送ds的操作。刚学汇编时,可以不去关心PSP内部的信息。

后面的内容在内存中是这样分配情况,只需画一个简图(一串连续的单元格,每个格标一个地址)就可以理解了。

你的程序ES没变,所以看到的es是psp的地址,它与第一个段ds相差10H,而data和stack段都不够16(10H)个字节,所以ss比ds多1H,cs比ss多1H.
追风筝的孩子 2011-03-16
  • 打赏
  • 举报
回复
。。。。。。。。。好吧,没人告诉我理解的对不对
追风筝的孩子 2011-03-16
  • 打赏
  • 举报
回复
是不是可以这样说

在debug下,程序运行但还没按-t执行指令时,psp的内容就是以ds为段地址,偏移量为100h的内存单元里面的内容
但是程序执行后,里面的内容将会被数据段里面的数据覆盖????
追风筝的孩子 2011-03-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 masmaster 的回复:]
PSP里当然有东西,下面的短文也许对你有点帮助
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=32262&kindLevel=1&kindId=46532&postId=48240&readSg=1
[/Quote]仍然一头雾水...主要是我学到第九章做检测题不知道是否要考虑PSP的存在
znxllyuan 2011-03-16
  • 打赏
  • 举报
回复

我看的书没有详细讲PSP的 你知道有那么个东西就完了 百度一下 你就知道!
masmaster 2011-03-16
  • 打赏
  • 举报
回复
StillMiss 2011-03-16
  • 打赏
  • 举报
回复
这段是第四章末尾的那个吧。我也不懂PSP 那个 没深入。。。跟LZ一起等待。。
追风筝的孩子 2011-03-16
  • 打赏
  • 举报
回复
哥的结帖率百分之一百= =。

21,494

社区成员

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

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