# 常用跳转
1.最常见:
【JMP】 无条件跳转;
【JE=JZ】相等跳转|有符号&无符号;
【JL】小于跳转|有符号专用 ;
【J LE】小于等于时辅有符号专用;
【JGE】大于等于跳转|有符号数专用;
【JB】低于跳转|无符号专用|理解为小于;
【JBE】低于等于跳转|无符号专用
【JA】高于跳转|无符号专用|理解为大于
【JAE】高于等于跳转|无符号专用
其次:
【JO】溢出跳转 【JP】奇偶跳转 【JS】负号跳转 【JC】进位跳转
【JCXZ】CX为0跳转 【JECXZ】ECX为0跳转
注:这是一部分跳转指令,但几乎涵盖所有常见跳转指令,见到指令有N就可去掉N后在上面寻找,再反着理解他的意思就对了。
# mov及其相关指令:
## mov指令
【mov】数据传送指令,不再举例
## MOVZX指令、MOVSX指令
【movzx】扩展指令,无符号扩展
例: movzx eax,ax 即把eax高16位补零后再给eax低16位赋值ax
【movsx】扩展指令,带符号扩展
例: movzx eax,ax 即把eax高16位补ax的最高位,即符号位,正数补0,负数补1,然后再给eax的低16位赋值ax
## movzx、movsw、movsd指令
【MOVSB】移动ESI中地址数据到EDI中,同时ESI、EDI都增加1
【MOVSW】移动ESI中地址数据到EDI中,同时ESI、EDI都增加2
【MOVSD】移动ESI中地址数据到EDI中,同时ESI、EDI都增加4
【Rep】循环执行ECX次某串指令
注:常见组合 rep movsd 用来填充一片空白内存区域,初始化赋值等
# REP相关
## REP指令
循环作用:重复执行一个指令
终止条件:只要求ecx=0
循环过程:每执行一次ecx减1
固定搭配:rep movs|rep stos
搭配作用:对一片连续内存赋值
## REPE指令等效于REPZ指令
循环作用:重复执行一个指令
终止条件:要求ecx=0或者Z标志位=0
循环过程:每执行一次ecx减1
固定搭配:repe cmps
补充:cmps指令
cmps byte ptr ds:[esi],byte ptr es:[edi]
简写为cmpsb,执行后esi和edi自增1
cmps word ptr ds:[esi],word ptr es:[edi]
简写为cmpsw,执行后esi和edi自增2
cmps dword ptr ds:[esi],dword ptr es:[edi]
简写为cmpsd,执行后esi和edi自增4
cmps如果比较结果是相同,Z标志位置1,否则为0
## REPNE指令相当于REPNZ指令
循环作用:重复执行一个命令
终止条件:要求ecx=0或者Z标志位=1
循环过程:每执行一次ecx减1
固定搭配:repne scas
作用:字符串中查找固定字符串,直到ecx变成0之前,一直执行scas扫描,直到遇到相同字符串,scas将Z标志位置1,触发REPNE的终止循环条件,根据ecx的值,可以判定目标字符串是第几位。