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

我的博客

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

[2007-10-24 17:09] 第10章检测点10.5

检测点10.5(1)
assume cs:code
stack segmeng
  dw 8 dup(0)
stack ends
code segment
  start:mov ax,stack
        mov ss,ax
        mov sp,16
        mov ds,ax
        mov ax,0  ;此时ax=0
        call word prt ds:[0eh] ;此时,发生push ip、jmp动作,而此时ip值指向下一个指令:inc ax,而ds段此时和stack段重合,故,ds:[0eh]此时内容为刚刚压栈的IP值,即,程序将跳到inc ax执行
        inc ax ;此指令执行后,ax=0+1=1
        inc ax ;此指令执行后,ax=1+1=2
        inc ax ;此指令执行后,ax=2+1=3
code ends
end start
求最后ax=??
即最后结果:ax中值为3

检测点10.5(2)
assume cs:code
data segmeng
  dw 8 dup(0)
data ends
code segment
  start:mov ax,data
        mov ss,ax
        mov sp,16
        mov word prt ss:[0],offset s ;此指令执行后,栈段中偏移量0中内容为标号s的偏移值
        mov ss:[2],cs ;此指令执行后,栈段偏移量2中内容为code段的段地址
        call dword prt ss:[0h] ;此指令执行后发生push cs/push IP动作,即指令执行后,栈段偏移量0eh中的内容为code段的段地址,而偏移量0ch中的内容为ip值,而此时ip值为nop代码的偏移量
        nop ;指令长度=1
       s:mov ax,offset s ;call指令执行后,程序跳到此行。而此行执行后,ax中值为s标号的偏移量
        sub ax,ss:[0ch] ;此时栈段0ch偏移量中内容为nop指令偏移量,即:ax=(offset s) - (offset nop),故此指令执行后,ax=1h
        mov bx,cs ;此时bx=code段段地址
        sub bx,ss:[0eh] ;此时栈段0eh偏移量处放置的正是code段段地址,故此指令执行生,bx=0
code ends
end start
求最后ax=??,bx=??
本题最后结果:ax=1h,bx=0h
评论次数(1)  |  浏览次数(1362)  |  类型(汇编作业) |  收藏此文  | 

[  Wednesday   发表于  2007-11-09 17:26  ]

分析透彻,收藏!哈哈

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