汇编网首页登录博客注册
mqmelon的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
最新留言
好友圈
友情链接

[2007-10-27 23:18] 推荐博文 第7章检测题!很好,真好.

生成EXE之后用Debug加载后,查看寄存器内容如下:  
    ds=0b2d es=0b2d ss=0b3d cs=0b3e ip=0000  
    程序的起始地址的段地址是_____。  
 1、 0b3e  
 2、 0b2d  
 3、 0b3d  
 4、 0
解析:此题检测的不是本章内容,是第4章中提到的关于程序在内存中的加载问题.即,程序在内存中加载后,ds中的内容为程序在内存区的段地址,而这个内存区的偏移地址为0,故,程序所在内存区的地址:ds:0,
而内存区的前256个字节用来放置PSP的,所以程序的开始地址为sa(此时为ds值)*16+0+256,表示为偏移地址为:sa+10h:0
/*此题我做了三次,前两次都没过去,一直都没认为此题做错,后来才想起应该是这题错了.才又去看书,惭愧!!!*/
下列指令不能执行的是_____。  
 1、 mov ax,10h[bx]  
 2、 mov ax,10h[di]  
 3、 mov ax,[di+si]  
 4、 mov ax,10h[bx][si]
解析:
di与si不能直接使用,必须与通用寄存器配合,而且这两个寄存器也不能分做8位使用.

对如下程序要实现将datasg段中的字符串"welcome to masm!"复制到它后续的数据区中,  
    assume cs:codesg,ds:datasg  
    datasg segment  
    db 'welcome to masm!'  
    db '................'  
    datasg ends  
    codesg segment  
    start: mov ax,datasg  
    mov ds,ax  
    mov si,0  
    ________  
    ________  
    mov ax,4c00h  
    int 21h  
    codesg ends  
    end start  
    在空白区域添加的指令序列合理的是_____。  
 1、 mov di,10h  
    mov cx,10h  
    s: mov ax,[si]  
    mov [di],ax  
    add si,2  
    add di,2  
    loop s  
 2、 mov di,10h  
    mov cx,8  
    s: mov ax,[si]  
    mov [di],ax  
    inc si  
    inc di  
    loop s  
 3、 mov ss,ax  
    mov sp,32   
    mov cx,8  
    s: mov ax,[si]  
    push ax  
    add si,2  
    loop s  
 4、 mov cx,8  
    s: mov ax,[si]  
    mov [si+10h],ax  
    add si,2  
    loop s
解析:
此题看似简单.第一个选项很容易排除,因为ax为16位寄存器,故每次取值都是word类型,那10H个字节,只须8次就可取完,故排除;
第二个选项在si与di增值时出错,步长应为2.
第三个着实让我恼火了一回,看似都正常,却忘了一件事,栈是先进后出的,如果用栈做此题唯一要做的就是步长为负值.故此选项排除.
评论次数(2)  |  浏览次数(1208)  |  类型(汇编作业) |  收藏此文  | 

[  feemess   发表于  2007-10-28 00:08  ]

谢谢指点.我的下一次答题要在32个小时之后了.一直都认为第一题没错.看来.要认真看书才是

[  mqmelon   发表于  2007-11-02 10:03  ]

不用客气,共同进步!

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码