JCC

JCC
xiu指令扩展
JMP
jmp 0040193F= mov eip,0040193F,只不过寄存器不允许直接mov的写法,意思一样
无条件修改寄存器EIP的数值,cpu会根据eip的值跳转,不影响堆栈的值
jmp 0040193F
jmp只影响eip
CALL
与retn配合使用
call会把当前cpu汇编指令的下一行地址压入栈里,执行完当前call指令以后跳转回去继续执行,压入的地址被称为返回地址,call指令会通过当前指令有多少字节的数据计算返回地址
RETN
相当于pop eip,但是寄存器不允许直接写pop eip
CMP
相当于sub指令
eax=0x400
ecx=0x400
与sub指令区别就在于cmp指令只影响标志寄存器,不会修改eax,ebx两个寄存器的数值,cmp指令常常用于判断两个数值是否相等,根据zf位判断
TEST
两个数值进行与操作,结果同样不保存,但是会改变相应标志寄存器
该指令尝尝用于判断某个寄存器的值是否为0
JCC
JCC指令是x86汇编语言中的条件跳转指令,根据不同的条件码(CF、ZF、SF、OF等)来决定是否跳转,jcc指令就是有条件的jmp
JZ/JE
如果零标志位(ZF)为1,则跳转
在比较两个数的大小或检查某个数是否为0时,可以使用此指令,如果比较结果为0或者该变量的值为0,则执行跳转指令。
JNZ/JNE
如果零标志位(ZF)为0,则跳转
用于判断数值是否非0,如果该变量的值不为0,则执行跳转指令。
JS
如果符号标志位(SF)为1,则跳转
在处理有符号数
据时,若一个数小于0,则SF置1,反之置0,可以利用此指令实现相关操作的条件判断。
JNS
如果符号标志位(SF)为0,则跳转
用于判断有符号数据是否大于等于0。
JC
如果进位标志位(CF)为1,则跳转
在校验数据的时候,如果发现了数据错误(例如加减溢出),就可以通过此指令中止程序执行,避免程序崩溃。
JNC
如果进位标志位(CF)为0,则跳转
JO
如果溢出标志位(OF)为1,则跳转
在进行加、减、乘等运算的时候发生溢出可以用此指令实现跳转。
JNO
如果溢出标志位(OF)为0,则跳转
用于判断没有发生溢出时的操作。
JP/JPE
如果奇偶标志位(PF)为1,则跳转
JNP/JPO
如果奇偶标志位(PF)为0,则跳转
JCXZ/JECXZ
如果CX寄存器为0,则跳转
JA/JNBE
CF=0 and ZF=0
用于无符号数大小的判断,当指令后面的操作数无符号比较结果的值大于基准值时,执行跳转指令。
JB/JANE
CF=1
用于无符号数大小比较,当指令后面的操作数比较结果的值小于基准值时,执行跳转指令。
JAE/JNB
CF=0
JBE/JNA
CF=1 or ZF=1
JE
ZF=1
JG/JNLE
ZF=0 and SF=OF
JGE/JNL
SF=OF
JL/JNGE
SF!=OF
JLE/JNG
ZF=1 or SF!=OF