. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  程序6.4编译执行,发现的一个问题,想请教一下,谢谢  [待解决] 回复[ 2次 ]   点击[ 306次 ]  
longphui
[帖 主]   [ 发表时间:2012-10-02 00:44 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-08-31 19:01
程序6.4,我自己练习编译连接后debug,然后-r查看得:
-r
AX=0000  BX=0000  CX=005C  DX=0000  SP=0000  BP=0000  SI=0000  DI=0000
DS=0B8E  ES=0B8E  SS=0B9E  CS=0BA1  IP=0000  NV UP EI PL NZ NA PO NC
0BA1:0000  B89F0B     MOV   AX,0B9F
发现DS和SS的值相差10h
而按书上4.9《程序执行过程的追踪》上所讲应该是DS和CS相差10h
longphui
[第1楼]   [ 回复时间:2012-10-02 00:48 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-08-31 19:01
我再看了一下4.9,上面最后是CS:IP指向程序的入口。这样可以解释了DS和CS为什么不是相差10h了。
但为什么DS和SS总是相差10h呢,而且查看自己所有的debug截图记录,发现,debug后DS和ES总是相同的,CS和SS大部分相同(有入口的时候可能不同)而且总是相差10h,这是为什么呢?
fpamc
[第2楼]   [ 回复时间:2012-10-02 09:06 ]   [引用]   [回复]   [ top ] 
荣誉值:30
信誉值:4
注册日期:2012-01-01 16:36
ds是程序的入口地址。也就是程序段前缀(PSP)。由于PSP的大小是100h(放入段寄存器就是10h)。
ss是定义的数据的起始地址。所以与ds相差10H。
cs就是程序将要运行的第一条指令的地址。也就是开始标号指向的指令的地址。
es嘛,忘了。
自己debug哈,多多观察,多多实验就会明白了。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved