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

我的博客

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

[2010-02-14 09:06] 推荐博文 《汇编语言》第九章实验8

;分析下面的程序,在运行前思考:这个程序可以正确返回吗?
;运行后再思考:为什么是这种结果?
ASSUME CS:CODE
CODE   SEGMENT
       MOV AH,4CH
       INT 21H
START: MOV AX,0
S:     NOP
       NOP
       MOV DI,OFFSET S
       MOV SI,OFFSET S2
       MOV AX,CS:[SI]
       MOV CS:[DI],AX
S0:    JMP SHORT S
S1:    MOV AX,0
       INT 21H
       MOV AX,0
S2:    JMP SHORT S1
       NOP
CODE   ENDS
END    START
  分析:程序从START开始,首先将AX清零。取得S的地址放入DI,S2的地址放入SI。将…………,分析不出来了,直接T吧
  T:程序从START开始,目前一切正常,无不良记录-_-|||
  程序执行到MOV AX,CS:[SI],将内存中的内容F6EB复制入AX
  程序执行到MOV CS:[DI],AX,将F6EB复制到CS:0007处,不偏不差的覆盖了两个NOP命令,变成了JMP FFFF,我用U命令看的
  执行完JMP SHORT S后,跳转到S处继续执行,下一条指令正是JMP FFFF,不知下面会有怎样的惊喜等着我们呢
  额,执行之后……,IP变为FFFF,下一条指令为PUSH ES,再执行下试试
  T之后,COMMAND化为一道黑影消失不见了……
  我使用U命令查看,结果发现,在0B51:0007处,'EBF6'被翻译成'JMP FFFF',而在0B51:001F处,则被翻译成'JMP 0017'
  根据书上所讲,JMP跳转的原理是位移,再思考一番,可以确定'EBF6'的意思是向前跳转8个字节。这样就理顺了,所以这个程序是不能正常退出的,至于答案上说的可以正常退出之类的我就不知道了。
  为了体现我良好的学习习惯和不畏困难勇攀高峰的大无畏精神-_-|||,我决定研究研究答案上的说法……
  参考答案上是这么曰的:
================================================================================================
程序可以正常返回。

 

详细分析:

在此题中较为深入地考察了‘段内直接短转移’[形如:jmp short 标号]的概念。

我们知道程序中:

mov di,offset s

mov si,offset s2

mov ax,cs:[si]

mov cs:[di],ax

四条指令的作用是将标号s2处的一条指令复制到标号s处。这时我们应该关心所复制的语句"jmp short s1"对程序的影响:我们知道在段内直接短转移指令所对应的机器码中,并不包含转移的目的地址,而包含的是转移的位移量(如对此概念还不太熟悉,请查看书中第167页的内容)。也就是说,在源程序的编译过程中,编译器遇到‘段内直接短转移’[形如:jmp short 标号]时就会自动算出其要跳转的位移量,以便程序在执行‘段内直接短转移’的指令时就根据位移量进行(向前或向后)跳转。通过调试中的U命令我们可以看到指令's2:jmp short s1'所对应的机器码是EBF6,F6h(-10d的补码)就是跳转的位移量[此位移量也可由指令's2:jmp short s1'处的偏移地址18h减去指令's2:jmp short s1'后一个字节的偏移地址22h得出]。这时我们就知道了其实复制到标号s处的指令所对应的机器码就是EBF6(刚好取代两个nop所对应的机器码),它的作用就是将当前IP向前移动10个字节。当程序执行标号s0处的指令后,程序便跳到标号s处接着执行标号s处的指令。s处的指令的作用是向前跳10字节,于是便跳到了代码中的第一条指令,继续执行后便实现了程序的正常返回。

[注意:此程序不会也不可能执行标号s1处后的指令。]
============================================================================================
照答案上曰的,'EBF6'的作用是使IP向前跳10个字节,不过我试了几次,确定一定以及肯定的say:EBF6的作用是向前跳8个字节。此程序不能正常返回!
评论次数(79)  |  浏览次数(42384)  |  类型(汇编作业) |  收藏此文  | 

[  versaariel   发表于  2010-02-14 10:23  ]

挺好的^-^

[  游客   发表于  2010-02-18 09:48  ]

能正常返回的,位移是-10,也能向前跳10,你在试试吧

[  游客   发表于  2010-02-18 23:05  ]

“ASSUME CS:CODE 
CODE   SEGMENT 
       MOV AH,4CH 
       INT 21H ”
程序都敲错了你还研究什么啊
mov ax,4ch  跟  mov ax,4c00h  一样吗啊?

真有意思你...

[  versaariel   发表于  2010-02-19 14:02  ]

他可能写错了,小问题,呵呵

[  hygf99   发表于  2010-02-20 14:08  ]

那谁,我写的是MOV AH,4CH
请仔细看看哦
呵,你也挺有意思的
没看清楚你还研究什么啊

[  versaariel   发表于  2010-02-21 08:36  ]

恩,我也没仔细看,如果是这样的话的确不能正常返回,MOV AH,4CH是2个字节,MOV AX,4C00H是3个字节,有区别

[  hygf99   发表于  2010-02-23 21:39  ]

VERSAARIEL说的很对
的确是这样,改为MOV AX,4C00H确实可以正确执行了
但是,EBF6的作用。。。。
我明白了,原来是这样:
我为什么以为EBF6是向前位移8个字节呢?因为在OB51:001F处是JMP 0017,算一算,1F-17=8.但是,我忘了一件灰常重要的事情,cpu读取指令后,IP+指令的字节数,所以。。。。应该加上EBF6本身的2个字节数,8+2=10。
EBF6的作用确实是向前位移10个字节

[  yiruirui   发表于  2010-09-03 14:51  ]

你连最起码的CPU执行指令的过程都不清楚,何来一定确定以及肯定?论坛里面这个问题我已经仔细回答过了,仔细去看看吧!

[  wangshu   发表于  2010-11-22 11:46  ]

我啥时候才能有这个水平呢?

[  rotapple   发表于  2011-06-21 17:53  ]

不过我试了几次,确定一定以及肯定的say:EBF6的作用是向前跳8个字节。此程序不能正常返回! 
=======================================
它的确就是8个字节,但是你真的认真看过书上的关于偏移的计算方法吗?
看我写的这道题的解法:
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=40812&kindId=57150&postId=52101&readSg=1
我已经标上了书上多少页!

[  游客   发表于  2012-02-22 19:17  ]

还有“段内直接短转移”的?太雷人了。

[  kanwangxue   发表于  2013-01-30 23:55  ]

呵呵。基础才是王道啊!
打个比方,一副画,在最开始首先是没有色彩的,先素描
素描搞的好,后面才会好,就这个意思。这还是孔子说的。

[  maverick   发表于  2013-08-11 12:07  ]

牛逼

[  游客   发表于  2021-05-29 14:38  ]

1

[  lai-52sora   发表于  2024-03-12 00:35  ]

https://t.me/hey893

[  lai-52sora   发表于  2024-03-12 00:36  ]

+瀨52sora饑渴淫蕩人妻求幹

[  lai-52sora   发表于  2024-03-12 00:37  ]

+瀨52sora饑渴淫蕩人妻求幹

[  lai-52sora   发表于  2024-03-12 00:37  ]

+瀨52sora饑渴淫蕩人妻求幹

[  lai-52sora   发表于  2024-03-12 00:37  ]

+瀨52sora饑渴淫蕩人妻求幹

[  lai-52sora   发表于  2024-03-12 00:37  ]

+瀨52sora饑渴淫蕩人妻求幹

[  lai-52sora   发表于  2024-03-12 00:37  ]

+瀨52sora饑渴淫蕩人妻求幹

[  lai-52sora   发表于  2024-03-12 00:38  ]

+瀨52sora饑渴淫蕩人妻求幹

[  lai-52sora   发表于  2024-03-12 00:38  ]

+瀨52sora饑渴淫蕩人妻求幹

[  lai-52sora   发表于  2024-03-12 00:38  ]

+瀨52sora饑渴淫蕩人妻求幹
+瀨52sora饑渴淫蕩人妻求幹
+瀨52sora饑渴淫蕩人妻求幹
+瀨52sora饑渴淫蕩人妻求幹
+瀨52sora饑渴淫蕩人妻求幹
+瀨52sora饑渴淫蕩人妻求幹

[  lai-52sora   发表于  2024-03-12 00:39  ]

+瀨52sora饑渴淫蕩人妻求幹

[  lai-52sora   发表于  2024-03-12 00:39  ]

+瀨52sora饑渴淫蕩人妻求幹

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