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

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  

[2009-06-03 22:20] 检测点10.5

(1)下面的程序执行后,ax中的数值为多少?  
assume cs:code   
stack segment   
    dw 8 dup(0)   
stack ends   
code segment   
start:  
    mov ax,stack  
    mov ss,ax  
    mov sp,16  
    mov ds,ax  
    mov ax,0  
    call word ptr ds:[0eh]  
    inc ax  
    inc ax  
    inc ax  

    mov ax,4c00H  
    int 21H  
code ends   
end start   

执行call指令时,将下一条指令的地址入栈,然后转向栈中的地址。实际上程序是按照顺序执行的。ax初始值为0,三次加1后,最终结果为3。  

下面的程序执行后,ax和bx中的数值为多少?  
assume cs:code   
data segment   
    dw 8 dup(0)   
data ends   
code segment   
start:  
    mov ax,data  
    mov ss,ax  
    mov sp,16  
    mov word ptr ss:[0],offset s  
    mov ss:[2],cs  
    call dword ptr ss:[0]  
    nop  
    s:  
    mov ax,offset s  
    sub ax,ss:[0ch]  
    mov bx,cs  
    sub bx,ss:[0eh]  
code ends   
end start   

首先将标号s处的地址存到ss:[0][1]处,接着将cs的地址存到ss:[2][3]处。执行call执行时,先将cs入栈,再将nop指令的地址入栈。其中ax中的值比ss:[0ch]中的值大1,bx中的值与ss:[0eh]中的值相等。结果ax=1,bx=0。
评论次数(1)  |  浏览次数(218)  |  类型(作业) |  收藏此文  | 

[  游客   发表于  2009-06-04 09:29  ]

正确。

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