汇编基础教程(二)——常用汇编指令之条件指令
2012-10-29 18:40
393 查看
原文地址:http://www.tinpont.com/knowledge/assembly_instruction_condition.html
---------------------------------------------------------------------------------------------分割线---------------------------------------------------------------------------------------
前面介绍的汇编指令大多都是围绕着数值的修改,这一小节我们来学习一下改变程序运行逻辑的部分指令——条件指令。
此小节需要大家参照 汇编基础教程(一)——寄存器介绍(EFlags) 同步进行知识的温习与加深。
此指令会直接修改EIP寄存器,格式如下:
dst可以是地址、寄存器和立即数,执行后,下一句将会执行跳转到的地方,例如:
此指令仅设置寄存器EFlags相关位,格式如下:
此指令与SUB指令类似,唯一的不同是此指令仅影响EFlags寄存器,不影响结果。例如:
此指令仅设置寄存器EFlags相关位,格式如下:
此指令与AND指令类似,唯一的不同是此指令仅影响EFlags寄存器,不影响结果。例如:
此处需要结合EFlags寄存器标识进行学习。
当EFlags寄存器CF位与ZF位同时为0时,进行跳转。
当EFlags寄存器CF位为1或ZF位为1时,进行跳转。
当EFlags寄存器CF位为1时,进行跳转。
当EFlags寄存器CF位为0时,进行跳转。
当EFlags寄存器ZF位为1时,进行跳转。
当EFlags寄存器ZF位为0时,进行跳转。
当EFlags寄存器ZF位为0且SF位等于OF位时,进行跳转。
当EFlags寄存器ZF位为1或SF位不等于OF位时,进行跳转。
当EFlags寄存器SF位不等于OF位时,进行跳转。
当EFlags寄存器SF位等于OF位时,进行跳转。
---------------------------------------------------------------------------------------------分割线---------------------------------------------------------------------------------------
前面介绍的汇编指令大多都是围绕着数值的修改,这一小节我们来学习一下改变程序运行逻辑的部分指令——条件指令。
此小节需要大家参照 汇编基础教程(一)——寄存器介绍(EFlags) 同步进行知识的温习与加深。
JMP直接跳转指令(jump)
此指令会直接修改EIP寄存器,格式如下:
CMP比较指令(compare)
此指令仅设置寄存器EFlags相关位,格式如下:
TEST比较指令(test)
此指令仅设置寄存器EFlags相关位,格式如下:
条件跳转指令
此处需要结合EFlags寄存器标识进行学习。
JA/JNBE 大于/不小于等于跳转指令(Jump if Above/Jump if Not Below or Equal)
当EFlags寄存器CF位与ZF位同时为0时,进行跳转。
JNA/JBE 不大于/小于等于跳转指令(Jump if Not Above/Jump if Below or Equal)
当EFlags寄存器CF位为1或ZF位为1时,进行跳转。
JB/JNAE/JC 小于/不大于等于跳转指令(Jump if Below/Jump if Not Above or Equal/Jump if Carry)
当EFlags寄存器CF位为1时,进行跳转。
JNB/JAE/JNC 不小于/大于等于跳转指令(Jump if Not Below/Jump if Above or Equal/Jump if Not Carry)
当EFlags寄存器CF位为0时,进行跳转。
JE/JZ 相等/为零跳转指令(Jump if Equal/Jump if Zero)
当EFlags寄存器ZF位为1时,进行跳转。
JNE/JNZ 不相等/不为零跳转指令(Jump if Not Equal/Jump if Not Zero)
当EFlags寄存器ZF位为0时,进行跳转。
JG/JNLE 大于/不小于等于带符号跳转指令(Jump if Greater/Jump if Not Less or Equal)
当EFlags寄存器ZF位为0且SF位等于OF位时,进行跳转。
JNG/JLE 不大于/小于等于带符号跳转指令(Jump if Not Greater/Jump if Less or Equal)
当EFlags寄存器ZF位为1或SF位不等于OF位时,进行跳转。
JL/JNGE 小于/不大于等于带符号跳转指令(Jump if Less/Jump if Not Greater or Equal)
当EFlags寄存器SF位不等于OF位时,进行跳转。
JNL/JGE 不小于/大于等于带符号跳转指令(Jump if Not Less/Jump if Greater or Equal)
当EFlags寄存器SF位等于OF位时,进行跳转。
相关文章推荐
- 汇编基础教程(二)——常用汇编指令之条件指令
- 汇编基础教程(二)——常用汇编指令之其他指令
- 汇编基础教程(二)——常用汇编指令之其他指令
- 汇编基础教程(二)——常用汇编指令之运算指令
- 汇编基础教程(二)——常用汇编指令之运算指令
- 汇编基础教程(二)——常用汇编指令之传送指令
- 汇编基础教程(二)——常用汇编指令之传送指令
- Android逆向中常用的ARM汇编指令基础知识
- [中级教程]GNU ARM汇编程序开发之----几个常用的指令
- Android逆向中常用的ARM汇编指令基础知识
- 汇编语言基础教程-除法指令
- 汇编语言基础教程-指令:传送,交换,取地址
- 汇编语言基础教程-减法指令
- 汇编语言基础教程-乘法指令
- 汇编基础——常用汇编指令总结
- 汇编语言基础教程-加法指令
- ARM汇编基础教程——ARM指令集
- iOS开发零基础教程之Git的一些常用命令
- 转移指令的原理05 - 零基础入门学习汇编语言47
- GStreamer基础教程14——常用的element