. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->包含多个段的程序
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  第六章检测题分析,欢迎指点  [待解决] 回复[ 32次 ]   点击[ 2255次 ]  
debugkkk
[帖 主]   [ 发表时间:2008-04-13 11:21 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:16
注册日期:2008-03-17 20:21
一、在Intel8086环境下,下列说法合理的是_____。 3
 1、 汇编语言程序载入内存后处于64K空间以外的数据和指令将无法使用和执行。 
 2、 一个数据段命名为data,此标号代表这个数据段在内存中的起始地址。 
 3、 如果载入的程序没有返回语句,那么当程序代码执行完毕,将继续读取后续内存空间 
    存储的指令到CPU内部作为指令执行下去,直到遇到返回指令为止。 
 4、 用DW和DD定义进行的数据,只能够以字为单位访问。 
注解:1、不清楚,欢迎指点
      2、见课本P121最下面,一个数据段命名为data,仅在源程序中存在,CPU并不知道,只有在code段中使用指令mov ax,data,mov ds,ax后CPU才把data段中的内容当数据来使用。
      3、一个程序结束后,将CPU的控制权交还给使它得以运行的程序,我们称这个过程为程序返回。程序返回依靠两句汇编指令“mov ax,4c00H,int 21H”。如果没有返回指令,程序就不把CPU的控制权交还给使它得以运行的程序,而是继续运行下去,直到遇到返回指令为止。
      4、对数据的操作,应该只和指令有关,和数据的单位无关。【个人理解】

二、在某程序中,定义了262B的数据段data,那么程序载入内存,该段实际占用的内存空间是____B。 3
 1、 256 
 2、 262 
 3、 272 
 4、 512 
注解:262=16*16+6,段最小16K,且是16的倍数,系统为多余的6个字节申请16个字节的空间,所以实际占用空间为256+16=272B
   
三、 assume cs:code  
    code segment  
    start: mov ax,3 
    jmp s1 
    s: mov bx,0 
    mov ax,bx 
    s1: mov cx,3 
    s2: add ax,2 
    loop s2 
    s3: mov ax,4c00h 
    int 21h 
    code ends 
    end s  
    上面代码执行s3处的指令之前,ax的值是_____。 2
 1、 9 
 2、 6 
 3、 5 
 4、 2 
注解:本题只需注意最后一句“end s”,即入口点是s,而不是start。

四、assume cs:codesg 
    codesg segment 
    dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h 
    start:mov ax,0 
    mov ds,ax 
    mov bx,0 
    mov cx,8 
    s:________ 
    add bx,2 
    loop s 
    mov ax,4c00h 
    int 21h 
    codesg ends 
    end start 
    要实现一次用内存0:0--0:15单元中的数据改写程序中定义的数据,添加到空白处的指令序列不能是____。 1 
 1、 mov cs:[bx],ds:[bx] 
 2、 mov dx,[bx] 
    mov cs:[bx],dx 
 3、 push [bx] 
    pop cs:[bx] 
 4、 mov ax,[bx] 
    mov cs:[bx],ax 
注解:1、mov指令不支持两个操作数都是内存单元的操作。
      2、3、4都是正确的。可能有人会疑惑为什么程序没有设置栈段,其实程序在载入时就有个默认的栈段了,debug下载入程序时默认的SS和SP,就分别是这个栈段的段地址和偏移地址。

五、某程序有数据段、栈段和代码段三部分,如果加载后代码段的段地址为X,那么下列说法正确的是___。 4
 1、 可以断定数据段的段地址是X-2。 
 2、 可以断定栈段的段地址是X-1。 
 3、 可以断定程序PSP区的段地址是X-10。 
 4、 确定数据段和栈段的段地址与X的关系,要视其大小和在其在源程序中定义的位置关系。 
注解:完成P123页的试验5的(1)(2)(3)后就会明白这点。程序加载后,数据段、栈段和代码段的段地址有数值上的加减关系,主要与数据段、栈段和代码段的位置有关系。
duckgaga
[第1楼]   [ 回复时间:2008-04-13 11:55 ]   [引用]   [回复]   [ top ] 
荣誉值:44
信誉值:0
注册日期:2008-04-11 13:33
分析得很好,受教了!谢谢楼主。第一题的第1个选项我觉得应该正确表述是这样的:如果只设了代码段而你的源程序长度超过64K,那么汇编语言程序载入内存后处于64K空间以外的数据和指令将无法使用和执行。  好像关于.com与.exe文件的区别里有说到的,我也不记得是不是这样了……呵呵……
duckgaga
[第2楼]   [ 回复时间:2008-04-13 13:32 ]   [引用]   [回复]   [ top ] 
荣誉值:44
信誉值:0
注册日期:2008-04-11 13:33
我找到了相关的内容:
 
存储器分段管理机制:由于8086/8088CPU有20根地址线,故可寻址的地址空间为2^20,即1MB,而CPU内部寄存器均为16位,故可寻址的地址空间为2^16即64KB。为了解决这个问题,8086/8088CPU采用了存储器分段管理的方法,即将整个1MB的物理存储空间分成若干个逻辑段,每个逻辑段的最大长度为64KB。这样,对于一个具体的存储单元,即由此单元所在段的起始地址和段内偏移地址来确定。采用存储器分段管理后,存储器地址就有物理地址和逻辑地址之分了。


另外,如果有必要,一个段的值是可以大于64K的,只要动态修改段寄存器的值(程序运行时进行修改)。也就是说可以有多个代码段(大于64K时可分为2个或多个代码段)。


综上,第1个选项是不合理的。
duckgaga
[第3楼]   [ 回复时间:2008-04-13 13:40 ]   [引用]   [回复]   [ top ] 
荣誉值:44
信誉值:0
注册日期:2008-04-11 13:33
对了,第二题的注释里有点疑问:

注解:262=16*16+6,段最小16K,且是16的倍数,系统为多余的6个字节申请16个字节的空间,所以实际占用空间为256+16=272B

--------------------------------------------------
段最小是16K吗?不是16B?
debugkkk
[第4楼]   [ 回复时间:2008-04-13 18:22 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:16
注册日期:2008-03-17 20:21
To:duckgaga

笔误,呵呵。你很细心,谢谢。
y2j2c1
[第5楼]   [ 回复时间:2008-05-28 20:41 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-04-30 22:14
第三题,真没注意到 end s,太粗心了
sbx2000_0
[第6楼]   [ 回复时间:2008-07-24 23:54 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2008-07-06 17:24
楼主分析的很透彻,受教了!
ramboran
[第7楼]   [ 回复时间:2008-07-25 18:43 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-05-12 21:56
注解:262=16*16+6,段最小16,且是16的倍数,系统为多余的6个字节申请16个字节的空间,所以实际占用空间为256+16=272B 

为什么段最小要占16字节?
bigyu7
[第8楼]   [ 回复时间:2008-07-31 16:18 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-07-28 16:02
因为段地址必须是16的倍数
mxl800
[第9楼]   [ 回复时间:2008-09-22 10:11 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-09-17 16:50
第二题还是有问题,段地址必须是16的倍数,段的空间就必须也是16的倍数吗?这有什么必然联系?教材有说明,还有两个10字节空间的段的例子!难到你们都不看书?2.8节中有讲到。
wangzelong2007
[第10楼]   [ 回复时间:2008-11-02 18:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:8
注册日期:2008-10-11 12:55
第三题,真没注意到 end s,太粗心了
------------------
回复:
我也犯了这个错误啊,惭愧惭愧
wangzelong2007
[第11楼]   [ 回复时间:2008-11-03 15:41 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:8
注册日期:2008-10-11 12:55
今天做检测题,终于过了,嘿嘿
fairyhuang
[第12楼]   [ 回复时间:2008-11-05 11:21 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-10-14 21:07
我也是没注意到end s,哎,以后要小心陷阱了--!
mytbk
[第13楼]   [ 回复时间:2008-11-05 12:33 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-07-19 20:02
原来我入口点看错了,怪不得做错两次。
goodboy
[第14楼]   [ 回复时间:2008-11-09 15:47 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-11-05 17:55
分析得很好,发现题目都有陷阱,要注意了。
leibniz007
[第15楼]   [ 回复时间:2008-11-22 11:00 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-11-11 10:05
第一题:
2、 一个数据段命名为data,此标号代表这个数据段在内存中的起始地址。 

代表数据段的段地址吧,不是起始地址(段:偏移)
jizha
[第16楼]   [ 回复时间:2008-11-22 17:54 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-10-27 20:01
题目出的很棒!和书本结合的很紧!各位出题的老师辛苦了!
因为第一题第二个选项自己理解上有些误差,导致没通过检测(只对了4题),呵呵!下次一定通过!
chaosum
[第17楼]   [ 回复时间:2008-11-26 13:11 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-11-19 17:58
真的,太粗心了,
end s
mouse
[第18楼]   [ 回复时间:2008-11-26 13:40 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
推荐做检测题的兄弟看看这个帖子:
http://www.asmedu.net/bbs/pasteinfo.jsp?part=1&level=free&kind=1220&qkSg=2&qID=27565
yinxd6112
[第19楼]   [ 回复时间:2008-11-28 17:23 ]   [引用]   [回复]   [ top ] 
荣誉值:12
信誉值:0
注册日期:2008-11-24 18:10
end s这个陷阱很巧妙啊 哈哈  粗心的一看jmp s1还以为题的考点在这里呢
496952514
[第20楼]   [ 回复时间:2008-11-29 18:04 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-11-24 08:49
恩,我也是没看到end s,陷阱去了,呵呵,楼主分析得很不错,受教了
chilegwh
[第21楼]   [ 回复时间:2008-12-01 11:03 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-11-13 22:17
end s我三次做题都差1题,原来是这道。
jdzluoyin
[第22楼]   [ 回复时间:2008-12-01 13:18 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-11-06 15:48
回复:[第9楼]
------------------
我以前也有点想不通,不过后来又想通了,就象一个人为了存放一些物品而建了一个仓库,虽然东西放进去仍有许多空间没用到,但是他所花的空间还是以这个仓库的空间,而不仅仅是放的那些东西所占空间。呵呵,我说的比较罗嗦,不知道你明白没有?
yuhuofei
[第23楼]   [ 回复时间:2008-12-27 23:12 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-11-17 21:27
楼上这个比喻很恰当啊,突然就理解了
hanlsheng
[第24楼]   [ 回复时间:2009-01-03 17:28 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2008-12-15 16:17
1、 汇编语言程序载入内存后处于64K空间以外的数据和指令将无法使用和执行。  
--------------------------------------------------------------
数据的访问,归根结底还是代码在执行,代码执行,那么就和cs,ip有关系,如果64K空间中没有jmp指令,那么只能执行64k内的指令,如果有jmp指令则可以跳到段外,执行。故此选项错误。

个人理解此题,主要考cs 只能由JMP指令更改这个知识点的。
yangle0125
[第25楼]   [ 回复时间:2009-01-24 17:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2008-11-09 12:50
我的也是因为end s啊,出题的人好坏!!!\(^o^)/~
至于段最小是16b的问题,我是这样想的,我们连续的分配两个段,比如第一个段的段地址为0200h,第二个段的段地址就应为0201h,有的书上也把他们叫做段基,那么我们现在把两个段的第一个字节所在的单元相减,就应该是一个段的最小长度,就是0201h*10h-0200h*10h=10h
也就是16b,我这样说对吧?
cy3221
[第26楼]   [ 回复时间:2009-03-29 17:08 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-03-11 18:00
太惭愧了错了好几次在end s上面 硬是没发现啊!! 
  太粗心了,谢谢楼主分析,很受教,以后一定仔细仔细再仔细!!
yanxinyouhzdqb
[第27楼]   [ 回复时间:2009-04-04 14:48 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-04-02 12:39
书本上检测点 实验5 (3)中code的值是x,为什么data是x+3,我想问 code占了30h 的内存吗
idpanjian
[第28楼]   [ 回复时间:2010-12-07 19:18 ]   [引用]   [回复]   [ top ] 
荣誉值:2
信誉值:0
注册日期:2010-12-03 12:08
书本上检测点 实验5 (3)中code的值是x,为什么data是x+3,我想问 code占了30h 的内存吗
------------------
回复:貌似是data段PSP和申请的数据,和SS段占用的空间,使得CS往后偏移了
psp+data段的数据+SS段占用的空间=cs,有先后申请的顺序,各段值的会不同
不知道对不对
alimy
[第29楼]   [ 回复时间:2011-05-10 21:20 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2011-04-29 14:07
段的物理地址必须是十六的倍数。。又理解了一遍。。做错了。。

一个实际大小有N个字节的段,以为内存对齐的原因。。需要申请 (int )((N-1)/16)*16  个字节空间。。
klxo
[第30楼]   [ 回复时间:2011-08-22 11:23 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2011-07-28 17:34
第三题,真没注意到 end s,太粗心了
------------------
回复:
我也犯了这个错误啊,惭愧惭愧
------------------
回复:做了几遍了,没有保存题,每次都是一题 一题 认真的看,每次答案都是一样,就是没搞明白哪一题错了,,
原来答案在这里,证明还是不够认真仔细!!!!!
regasm_zzq
[第31楼]   [ 回复时间:2012-10-30 23:40 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-08-16 20:51
第一题:
2、 一个数据段命名为data,此标号代表这个数据段在内存中的起始地址。  

我的理解是:编译器是按照段地址的标准给data定位的,而且编译器都是让数据段从段地址:0h开始的。
所以从实际情况来看,第二个说法是合理的。
xxie
[第32楼]   [ 回复时间:2015-02-22 08:10 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:2
注册日期:2011-07-19 12:12
第一题:
2、 一个数据段命名为data,此标号代表这个数据段在内存中的起始地址。  

我的理解是:编译器是按照段地址的标准给data定位的,而且编译器都是让数据段从段地址:0h开始的。
所以从实际情况来看,第二个说法是合理的。
------------------
回复:不对吧,data标号表示的是该段的段地址,是16位的,而起始地址是指是16倍数的20位物理地址。起始地址=段地址×16,二者不能混为一谈。详见第二章2.7节,“段地址×16+偏移地址=物理地址”的本质含义。
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved