小乌龟

在梦想的道路上还能走多远

  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::

jmp指令用法总结:

1.直接用法(只能在Debug下使用的汇编指令):
jmp 段地址:偏移地址
功能:修改CS、IP的内容
例子:jmp 55BA:8
执行后:(CS)=55EAH, (IP)=0008H

2.根据标号进行转移的用法:
(1).转移的目的地址不在指令中,依据位移进行转移(段内转移)
 a.jmp short 标号(IP的修改范围为-128至127)
 功能:(IP)=(IP)+8位位移

 b.jmp near ptr 标号(IP的修改范围为-32768至32767)
 功能:(IP)=(IP)+16位位移

注:依据位移进行的转移是段内转移,位移=标号处的地址-jmp指令后的第一个字节的地址。

(2).转移的目的地址在指令中(段间转移)
jmp far ptr 标号
功能:用标号的段地址和偏移地址修改CS和IP
      (CS)=标号所在段的段地址;(IP)=标号所在段的偏移地址
例子:略
 
3.转移地址在寄存器中的用法:
jmp 某一合法寄存器
功能:用寄存器中的值修改IP
例子:jmp ax
执行后:(IP)=(ax)
注意:合法寄存器是指通用寄存器。一个有趣的现象:jmp ip在debug下调试也是
错误的。字面上理解:(IP)=(IP),但CPU并不支持

4.转移地址在内存中的用法:
(1).jmp word ptr 内存单元地址(段内转移)
功能:从内存单元地址出开始存放着一个字,是转移的目的偏移地址
例子:mov ax,0123H
      mov [bx],ax
      jmp word ptr [bx]
执行后:(IP)=0123H

(2).jmp dword ptr 内存单元地址(段间转移)
功能:从内存单元地址处开始存放着两个字,高地址处的字是转移的目的段地址,低地址处是转移的目的偏移地址
例子:mov ax,0123H
      mov [bx],ax
      mov word ptr [bx+2],0
      jmp dword ptr [bx]
执行后:(CS)=0, (IP)=0123H

posted on 2008-03-31 22:46 小乌龟 阅读(4432) 评论(0)  编辑 收藏 引用 所属分类: Assembly

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理