. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->转移指令的原理
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  关于三个JMP的不解  [已解决] 回复[ 2次 ]   点击[ 292次 ]  
heicai
[帖 主]   [ 发表时间:2007-08-17 22:42 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:5
注册日期:2007-08-08 14:36
assume cs:code
code segment
begin:        jmp s
        jmp near ptr s
        jmp far ptr s
        
        db 100 dup(0b8h,0,0)
s:        mov ax,2
code ends
end begin


我编译后debug调试了一下。
-u
13B8:0000 E93401        JMP     0137
13B8:0003 E93101        JMP     0137
13B8:0006 EA3701B813    JMP     13B8:0137
13B8:000B B80000        MOV     AX,0000
13B8:000E B80000        MOV     AX,0000
13B8:0011 B80000        MOV     AX,0000
13B8:0014 B80000        MOV     AX,0000
………………………   省略 ………………………
13B8:0128 B80000        MOV     AX,0000
13B8:012B B80000        MOV     AX,0000
13B8:012E B80000        MOV     AX,0000
13B8:0131 B80000        MOV     AX,0000
13B8:0134 B80000        MOV     AX,0000
13B8:0137 B80200        MOV     AX,0002

我想问的是我根据P167的图9.3与下面的分析理解,就jmp near ptr 标号来说,16位位移=标号处地址(本实验中S标号对应的是13B8:0137)—JMP指令后的第一个字节的地址(本实验中为13B8:0006)
这样一来,JMP后面的位移应该是0137—0006=0131才对。为什么调试结果三个JMP都是0137。

希望能得到详细解答。先谢过了!
heicai
[第1楼]   [ 回复时间:2007-08-18 22:23 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:5
注册日期:2007-08-08 14:36
自己搞明白了。JMP后的标号是根据位移+IP的。忘了加IP了。0131+IP的6正好是0137
heicai
[第2楼]   [ 回复时间:2007-08-18 22:23 ]   [引用]   [回复]   [ top ] 
荣誉值:6
信誉值:5
注册日期:2007-08-08 14:36
此贴由 贴主 于 [ 2007-08-18 22:23 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved