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

我的博客

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

[2012-12-03 11:23] 第10章检测题,第一次未通过。

错了一题:想来是下面这个错了。

对下列程序说法正确的是__。 
    assume cs:codesg 
    stack segment 
    dw 10 dup (0) 
    stack ends 
    codesg segment 
    mov ax,4c00h 
    int 21h 
    start: mov ax,stack 
    mov ss,ax 
    mov sp,20 
    mov ax,0 
    push cs 
    push ax 
    mov bx,0 
    retf 
    codesg ends 
    end start 
 1、 程序中start之后的汇编指令不能得到执行。 
 2、 程序加载后stack段在内存中实际占用的内存空间是20b。 
 3、 程序的每一条指令都能获得执行,但不能正常返回。 
 4、 指令retf可替换为ret,并能够正常返回。 

----------------
我选择了3为答案,但是这个答案本身就是错的。因为如果每一条殾能执行,必会返回。因为程序开始执行位置决定了。
所以。。。

再看看,最有可能是4答案正确。
分析一下,不知对否:
retf和ret的区别:
retf会执行类似pop cs的动作,而ret不会。
那执行retf之前,的两个push动作一定会影响结果,决定是否能返回到程序开始处执行。
push cs这句保存了cs内容
push ax这句把0压入栈,
结果导致,retf返回时:ip=0;cs=[cs];程序可以返回到mov ah,4c00h语句执行。故可以正常返回。
那么ret替换可不可以呢?应该可以,因为ret相当于执行pop ip,而此时最后压入栈的是ax,而ax值恰好为0。
故,答案应该为4.
评论次数(0)  |  浏览次数(378)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码