. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  希望对你有帮助!关于实验5第一大题。第三小题解理思路!  [待解决] 回复[ 9次 ]   点击[ 816次 ]  
573085020
[帖 主]   [ 发表时间:2009-07-07 22:00 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-04-02 15:26
关于实验5第一大题。第三小题:设程序加载后,code段的段地址为X,则data段的段地址为(   )   ,
stack段的段地址为(    )
关于,此题有人问到低是debug xxx.exe之后查看各寄存器的值呢,还是执行到程序返回前,再查看各寄存器的值,
于是有人对程序加载就产生了凝问,到低程序加载是指debug xxx.exe之后(没执行程序之前).还是执行到程序返回之前。
我想说的是此题和程序加载没太大的关系!不过在这里我还是想帮大家把程序加载的概念弄清楚。然后再解决上面的问题!
我觉得程序加载是还没执行程序前,原因有两点。
1。请看第四章第一个程序:图4.20 EXE文件中程序的加载过程。command(指DOS加载程序)设置CS:IP指向程序的入口就结束了。
2.再看汇编程序从写出到执行的过程(在书中84页)。编程-1.asm-编译-1.obj-连接-1.exe-加载-内存中
的程序-运行.书中把加载和运行分开了的。
至于这道题为什么和程序加载没太大关系!因这这道题是要你根据这个大题的第二个小题得到的数据做一个推算!而第二小题明确指出执行程序到程序返回前,所能你只要把程序执行到程序返回前,data段的段地址为x-2,stack段的段地址为x-1就是对的。
那x-2和X-1分别着隐藏着什么呢?
我们知道此处的X是code段的段地址。所以我们现在讨论的问题实际上是段地址减一个整数(比如减一和减二)到低是表示什么?
我们假设有个物理地址为10000(1000:0+0)的起始内存单元,我们给段地址加上一,算出来的起始地址为10010,物理地址也为10010.由此我们可知,
段地址加1,其实就是物理地址加上10H,如果把10H换算成十进制就是16.其实x-1,就是减掉了16个字节,同理x-2就是减到32个字节,
因为data段和stack定义的数据都为16个字节。如果你定义的一个段,字节不足16个字节,比如15个字节,也按16个字节算,如果你定义的为17
个字节,就安32字节算,(因为段地址*16+偏移地址=物理地址,所以一个段的起始地址,必须为16的倍数)并且在第17个字节后面补上15个零.好象,还有点什么没写样,不过又记不起了,唉太忙了!记起了一定补上!
希望,对你们有帮助!
mess
[第1楼]   [ 回复时间:2009-07-09 12:31 ]   [引用]   [回复]   [ top ] 
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48
楼主真热心,是我们的榜样,学习了^_^
hdming88
[第2楼]   [ 回复时间:2009-10-02 22:21 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:8
注册日期:2009-09-30 22:35
感谢楼主了
402306834
[第3楼]   [ 回复时间:2009-10-05 12:31 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-09-25 17:09
谢谢楼主了 !!!
float
[第4楼]   [ 回复时间:2010-01-01 23:50 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-12-30 11:45
辛苦楼主了~~~~~
regex
[第5楼]   [ 回复时间:2010-01-09 01:06 ]   [引用]   [回复]   [ top ] 
荣誉值:61
信誉值:0
注册日期:2009-12-19 01:51
感谢楼主~~~~
xouou_53320
[第6楼]   [ 回复时间:2010-02-04 22:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-01-13 15:12
感谢楼主 明白了
lamapig
[第7楼]   [ 回复时间:2010-03-10 12:48 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2010-03-10 12:02
我正好这里不明白,谢谢了!!!
lyjoe
[第8楼]   [ 回复时间:2010-05-23 23:58 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-05-08 12:47
顶楼主,谢谢楼主精彩分享,顶!
girl_lulu
[第9楼]   [ 回复时间:2010-08-10 00:07 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2010-04-12 21:25
疑问:如你所说,当在代码段中定义数据时,数据的起始位置为cs:0;但存在数据段时,依实验5(1)(2)(3)debug结果数据段的段地址当然是X-2(栈段的段地址是X-1),关于这一点,我想知道为什么??另:教材p92页,psp区(紧接后面的是程序区)不是数据区吗,既然如此,我想问的是数据段的段地址为何不是ds(或sa),而偏偏是X-2?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved