实验5(1)求助答案分析,真是想不出来了,停了很久了。
(1)将下面的程序编译连接,用Debug加载、跟踪,然后回答问题。assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:
push ds:
pop ds:
pop ds:
mov ax,4c00h
int 21h
code ends
end start
①CPU执行程序,程序返回前,data段中的数据 不变 。
②CPU执行程序,程序返回前,CS= 0C88H ,SS= 0C87H ,DS= 0C86H 。
③设程序加载后,CODE段的段地址为X,则DATA段的段地址为 X-2 ,STACK段的段地址为 X-1 。
以下是答案:
C:\DOCUME~1\ADMINI~1>debug sy5-1.exe
-r
AX=0000BX=0000CX=0042DX=0000SP=0000BP=0000SI=0000DI=0000
DS=0C76ES=0C76SS=0C86CS=0C88IP=0000 NV UP EI PL NZ NA PO NC
这里为什么ss等于0c86ds等于0c76呢?
0C88:0000 B8870C MOV AX,0C87
-d 0c86:0 f
0C86:000023 01 56 04 89 07 BC 0A-EF 0D ED 0F BA 0C 87 09 #.V.............
-u
0C88:0000 B8870C MOV AX,0C87这里为什么stack=0c87呢?
:dizzy:
视频教程里面不是有讲实验5么
没看懂社么意思
每台机器都不一样的 鬼№精し灵 发表于 2013-2-26 12:55 static/image/common/back.gif
视频教程里面不是有讲实验5么
没看懂社么意思
每台机器都不一样的
初始化确实参数可以不一样,但是在参数定下来后,为什么程序最开始当中的stack=0c87了呢? 应该每台机器都不一样吧,ds,ss,cs段的值是cpu按照一定规律分配,可能每次都不一样!!但是这3个段又有一定的联系
这个题目的主要目的:让学习者能够进一步熟悉debug的操作
关键在第三问 ③设程序加载后,CODE段的段地址为X,则DATA段的段地址为 X-2 ,STACK段的段地址为 X-1 。这里是想让你知道每个段的最大长度是 64K,计算方法:64KB = 65536 B = 10000H B(前面两个是十进制的数,最后一个是16进制的)
于是,段地址加1,就是移动了64K( 例子:段地址为 0000:0000和段地址 0001:0000,相差了多少个字节?10000H个)
所以有了第三问的答案 , x-2 和 x- 1
建议楼主继续学习下去,不通过知识点也可以向下学习,有时候,突然间,你就明白了原来不懂了,采取一种迂回向上的方法学习!!另外在敲程序的时候,错的越多越好!!千万别灰心,最重要的是耐心弄懂哪里出错了,以后遇到同样的问题的时候,你就不会出错了,还懂得改正别人程序的错误
关于那个ss与ds的关系个人感觉可以从书上92也得到答案擦得1个字节是PSP的存储的
L]V static/image/common/back.gif
应该每台机器都不一样吧,ds,ss,cs段的值是cpu按照一定规律分配,可能每次都不一样!!但是这3个段又有一 ...
感谢你的回答。
另外在你的回答里面我有个问题:
你举了个列子说段地址0001:0000 与段地址0000:0000相差10000H个字节。
不过按书上说的,0001:0000等于00010, 0000:0000等于00000. 那么在段地址上面的差距可以用偏移地址上面的数来表示,那么也就可以写成段地址0000:0010与0000:0000的差别。显然只是偏移地址相差了10H,那就只相差了10h个字节了? S-Jerry 发表于 2013-3-9 15:40 static/image/common/back.gif
感谢你的回答。
另外在你的回答里面我有个问题:
你举了个列子说段地址0001:0000 与段地址0000:0000相差 ...
谢谢你的提醒。我的回答的确错了, 0000:0000和 0001:0000是相差了10h个字节。
回到题目那里,那个程序,刚开始的时候定义了 8个 字型数据,为数据段,占16个字节;
然后又定义了8个字型数据,为栈段,占16个字节
最后就到了代码段。
于是,数据段和栈段之间的差距,就是16个字节,即10h个。
同理,栈段和代码段的差距也是 16个字节。于是就有了第三问的答案了。
谢谢楼主的提醒,我也是刚学的,所以犯了这种错误。 L]V static/image/common/back.gif
谢谢你的提醒。我的回答的确错了, 0000:0000和 0001:0000是相差了10h个字节。
回到题目那里,那个程序 ...
呵呵,不谢,我也是看了你说的段的关系才有点懂的。
大家一起学习嘛
页:
[1]