前言:
??此文章收录在本人的《学习笔记分享》分类中,此分类记录本人的学习心得体会,现全部分享出来希望和大家共同交流学习成长。附上分类链接:
??https://www.cnblogs.com/tibbors/category/1729804.html
JCC就是有在前提条件的情况下执行JMP指令
??(其中J为JMP,CC指条件码)
JMP指令:
修改EIP的值
MOV EIP,寄存器/立即数
简写为 JMP 寄存器/立即数
CALL指令:
PUSH 地址B
MOV EIP,地址A/寄存器
简写为:CALL 地址A/寄存器
RET指令:
LEA ESP,[ESP+4]
MOV EIP,[ESP-4]
简写为:RET
?? JCC指令:
??J : jmp ??? N : not
| 指令 | 执行条件(语言描述) | 执行条件 | 备注 | |
|---|---|---|---|---|
| 1 | JEJZ | 结果为零则跳转结果相等时跳转 | ZF=1 | jmp if zf=1(E:equal)(Z:zero) |
| 2 | JNEJNZ | 结果不为零则跳转结果不相等时跳转 | ZF=0 | jmp if zf=0(E:equal)(Z:zero) |
| 3 | JS | 结果为负则跳转 | SF=1 | jmp if sf=1(S:sign) |
| 4 | JNS | 结果为非负则跳转 | SF=0 | jmp if sf=0(S:sign) |
| 5 | JPJPE | 结果中1的个数为偶数则跳转 | PF=1 | jmp if pf=1(P:parity(E:even)) |
| 6 | JNPJPO | 结果中1的个数为偶数则跳转 | PF=0 | jmp if pf=0(P:parity(O:odd)) |
| 7 | JO | 结果溢出了则跳转 | OF=1 | jmp if of=1(O:overflow) |
| 8 | JNO | 结果没有溢出则跳转 | OF=0 | jmp if of=0(O:not overflow) |
| 9 | JBJNAE | 小于则跳转 (无符号数)不高于则跳转 | CF=1 | jmp if cf=1(B:bdlow)(AE:above equal) |
| 10 | JNBJAE | (无符号数)大于等于则跳转高于则跳转 | CF=0 | jmp if cf=0(B:bdlow)(AE:above equal) |
| 11 | JBEJNA | (无符号数)小于等于则跳转不高于则跳转 | ZF=1CF=1 | jmp if zf=1/cf=1(B:below)(A:above) |
| 12 | JNBEJA | (无符号数)大于则跳转 | ZF=0CF=0 | jmp if zf=0/cf=0(B:below)(A:above) |
| 13 | JLJNGE | (有符号数)小于则跳转 | SF ≠ OF | jmp if sf ≠ of(L:less)(GE:greater equal) |
| 14 | JNLJGE | (有符号数)大于等于则跳转 | SF = OF | jmp if sf = of(L:less)(GE:greater equal) |
| 15 | JLEJNG | (有符号数)小于等于则跳转 | SF ≠ OFZF = 1 | jmp if sf ≠ of or zf = 1(LE:less equal)(G:greater) |
| 16 | JNLEJG | (有符号数)大于则跳转 | SF = OF & ZF = 0 | jmp if sf = of & zf = 0(LE:less equal)(G:greater) |
算术移位指令(用于有符号数)
指令格式:SAL/SAR Reg/Mem, CL/Imm

SAL EAX,1
SAL AX,1
SAL AL,1
e.g.
1000 0001 ? ? 0x81
SAL AL,1
0000 0010 ? ? 0x02
CF = 1

SAR EAX,1
SAR AX,1
SAR AL,1
e.g.
1000 0001 ? ? 0x81
SAR AL,1
1100 0000 ? ? 0xC0
CF = 1
逻辑移位指令(用于无符号数)
指令格式:SHL/SHR Reg/Mem, CL/Imm

SHL EAX,1
SHL AX,1
SHL AL,1
e.g.
1000 0001 ? ? 0x81
SHL AL,1
0000 0010 ? ? 0x02
CF = 1

SHR EAX,1
SHR AX,1
SHR AL,1
e.g.
1000 0001 ? ? 0x81
SHR AL,1
0100 0000 ? ? 0x40
CF = 1
循环移位指令
指令格式:ROL r/m, i8 ROR r/m, CL

ROL EAX,1
ROL AX,1
ROL AL,1
e.g.
1000 0001 ? ? 0x81
ROL AL,1
0000 0011 ? ? 0x03
CF = 1

ROR EAX,1
ROR AX,1
ROR AL,1
e.g.
1000 0001 ? ? 0x81
ROR AL,1
1100 0000 ? ? 0xC0
CF = 1
带进位的循环移位指令
指令格式:RCL r/m, i8 RCR r/m, CL

RCL EAX,1
RCL AX,1
RCL AL,1
e.g.
1000 0001 ? ? 0x81
设CF = 0
RCL AL,1
0000 0010 ? ? 0x02
CF=1

RCR EAX,1
RCR AX,1
RCR AL,1
e.g.
1000 0001 ? ? 0x81
设CF = 0
RCR AL,1
0100 0000 ? ? 0x40
CF = 1
与运算 &
或运算 |
非运算 ~
异或运算 ^
移位运算 << >>
此部分详情在C语言中更新
原文:https://www.cnblogs.com/tibbors/p/12728847.html