. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  求高手帮忙,第九章第一题没有通过  [已解决] 回复[ 6次 ]   点击[ 313次 ]  
younthu
[帖 主]   [ 发表时间:2007-12-28 16:56 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2007-12-11 11:14
下列能够改变CS:IP所指位置并能通过编译的指令是___1___。  
 1、 jmp short [bx]  
 2、 jne [bx]  
 3、 loop byte ptr [bx]  
 4、 jmp [bx]  

我选1(瞎蒙),结果,结果这章测试5对4。
把代码用编译器编译,只有4通过。然后把书翻了几遍,还是没有清晰的概念。

哪位高手指点一下?
huibian
[第1楼]   [ 回复时间:2007-12-28 19:49 ]   [引用]   [回复]   [ top ] 
荣誉值:117
信誉值:2
注册日期:2007-09-04 10:41
你不是自己已经实践出正确答案了吗~
huibian
[第2楼]   [ 回复时间:2007-12-28 19:57 ]   [引用]   [回复]   [ top ] 
荣誉值:117
信誉值:2
注册日期:2007-09-04 10:41
错了也要找找错误的原因,比如第一个答案,指令不是凭空来的,那么它的原型是什么,正确的是怎么用的呢
这里的jmp怎么用,jmp short怎么用。

我觉得一个题最好的效果是把你不会的知识都检查出来,而不是找到答案就算完事了。支持楼主把疑问贴出来的做法,不过加上自己的分析和猜测更好;-)
fishboy
[第3楼]   [ 回复时间:2007-12-28 20:58 ]   [引用]   [回复]   [ top ] 
荣誉值:283
信誉值:0
注册日期:2007-06-26 11:42
jmp short 后面好像只能是标号才合法。
jmp [bx] 相当于jmp near ptr 后面可以是标号、内存单元,和寄存器,这些都是合法的。
而jne和loop这些条件跳转指令,实现跳转的指令是段内短跳转,这些后面跟的都是标号才合法。

这些是我自己实践总结的,不知道对楼主有什么帮助没有。其实,如果按照书上的使用讲解就可以了。只不过jmp后面是near的时候,可以跟一个内存单元的内容做跳转。
mouse
[第4楼]   [ 回复时间:2008-01-01 14:54 ]   [引用]   [回复]   [ top ] 
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34
支持2楼的做法,通过一个题把知识都温习一遍~
younthu
[第5楼]   [ 回复时间:2008-01-04 14:07 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2007-12-11 11:14
感谢各位兄弟帮助!
  综合各位兄弟的思路,自己总结一下:
  前三条指令都是short跳转,机器编码的时候都是用相对位移来表示跳转地址。而这个跳转地址是由汇编编译器以下面格式计算得来的(我猜测的):
    标号 - $    ;标号实际上由编译器在预编译的时候替换为一个数字
并且这个数字是被硬编码到机器指令中去了的,偏移地址不能改变,所以不能用内存中容易变化的数据。
younthu
[第6楼]   [ 回复时间:2008-01-04 14:18 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:4
注册日期:2007-12-11 11:14
此贴由 贴主 于 [ 2008-01-04 14:18 ] 结贴。 结贴原因:问题已解决
得分情况: 1楼(huibian):2分   2楼(huibian):3分   3楼(fishboy):3分   4楼(mouse):2分  
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved