x86汇编 转移跳转指令


包含:jmp、call、ret、retf、loop、jcxz
 
 以下为正文内容:

两种转移方式:
1、段内转移(只修改IP)
  • 短转移:IP的修改范围为「-128~127」,即8位位移。
  • 近转移:IP的修改范围为「-32768~32767」,即16位位移。
 2、段间转移(修改CS和IP)
 
jmp:无条件跳转指令
 
1、jmp short 标号
段内段转移。即(IP)=(IP)+8位位移。「注:(IP)表示IP寄存器中的值,下同」
 
2、jmp near 标号
段内近转移。(IP)=(IP)+16位位移。
 
3、jmp far ptr 标号
段间转移(远转移)。(CS)=标号的段地址,(IP)=标号的偏移地址。
 
4、jmp 16位的寄存器
(IP)=(16位的寄存器)
 
5、jmp word ptr 内存地址
(IP)=(内存单元),即用指定的内存单元中的值来填充IP。
 
6、jmp dword ptr 内存地址
(CS)=(内存地址+2),(IP)=(内存地址)。即用从指定的内存单元开始第2个字填充CS,用第1个字填充IP。
 

 
call指令
 
call指令用于将当前的IP压栈或将CS、IP同时压栈后进行程序的跳转。
 
1、call 标号
将IP压栈后跳转。
 
2、call far ptr 标号
将CS和IP压栈后跳转。

 

 3、call 16位寄存器

将IP压栈后跳转。 

 

 4、call word ptr 内存地址

 

 


  ret/ref指令
 
  ret
 
 
retf
 

 可通过call与ret、retf搭配使用,实现父、子函数的跳转。


 
loop指令
当cx寄存器的值不为0时,循环执行标号内指定的指令。
 
指令格式:
 
用伪代码来描述:
 

 jcxz指令

  Jump while CX is Zero(我猜的)
 
当cx寄存器的值为0时,跳转到标号处执行指令。
 
指令格式:
jcxz 标号

  

用伪代码来描述:

 

 


The end
 

 

 以上内容整理自:王爽《汇编语言 第二版》p177-p198

PS1:《汇编语言 第二版》PDF下载: 点击前往某度云,提取码:04e0
PS2:安利一个写x86汇编的IDE:emu8086, 点击前往下载。 安装的时候把例子也装上,里面有很多有趣的例子!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM