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

我的博客

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

[2010-07-17 16:13] 无条件转移指令:jmp

控制指令jmp, 允许程序跳过一段程序,跳转到存储器任何部分区执行一段指令。
无条件转移指令有三种类型:短转移,近转移和远转移。 短转移是两字节指令允许转移到相对地址127~-128字节范围内的任意存储单元。3字节的近转移指令允许转移到代码段内当前地址起±32K字节范围以内(即当前代码段任何位置)。远转移指令为5字节指令,允许转移到整个存储器的任何内存单元。
短的和近的转移通常叫做段内转移。而远转移通常叫做段间转移。
在80386到奔腾处理器,如果按照保护模式运行并且有4G字节的代码段, 则近转移±2G字节范围;如果按实模式运行,则是在±32K字节范围内。在保护模式中,80386以上使用32位位移量。
无条件转移的三种格式:
------------------------------------------------------
|EB|8位移|                              ;段内短转移
|E9|低8位移|高8位移|                    ;段内近转移
|EA|IP低地址|IP高地址|CS低地址|CS高地址|;段间转移
-------------------------------------------------------

短转移:
短转移也叫相对转移。转移范围是+127~-128字节。当处理器执行短转移时,偏移量先被符号扩展后和IP/EIP相加。从而得到当前代码段内的转移地址。短转移指令分支到新的地址,即程序的下一条指令地址。

近转移:
近转移通过控制转移到当前代码段内距离该指令±32K字节范围内。而保护模式下的80386极其以上cpu是±2G字节范围。近转移是3字节指令,包括操作码和它后面的有符号的16位偏移量。在80386及其以上cpu中,位移量是32位,指令5字节长。

远转移:
远转移从第2~5内存字节得到新的段和偏移地址实现转移。5字节指令的远转移指令的2,3字节存放新的偏移地址,4,5字节存放新的段地址。远转移有时用far ptr伪指令作为说明。例如
jmp far ptr newadd

带相对操作数的转移:
转移指令也可以用16/32位寄存器作为操作数。这就自动的设置指令为间接转移。 转移地址在转移指令指定的寄存器内。和近转移的偏移量不同,寄存器的内容直接传送到IP中。例如:
jmp ax

使用变址的间接转移:
转移指令也可以使用[]的寻址方式直接访问内存地址。这个内存单元包含着偏移地址或者要转移的段地址和偏移地址。 比如: jmp [si] 。
评论次数(0)  |  浏览次数(528)  |  类型(汇编语言笔记) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码