. : : 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