1.通用数据传送指令
指令名称 | 功能 | 备注 |
---|---|---|
mov(MOV) | 传送赋值 | 英文(move) 例子:mov a,b 把b的值传给a |
push(PUSH) | 压栈 | 英文(Push noto the stack) |
pop(POP) | 出栈 | 英文(pop from the stack) 例子: 由于堆栈平衡原理,所以有push就有pop |
xchg(XCHG) | 交换 | 英文(Exchange) |
2.标志寄存器传送指令
指令名称 | 功能 | 备注 |
---|---|---|
pushf(PUSHF) | 标志进栈 | 英文(push the flag) |
popf(POPF) | 标志出栈 | 英文(pop the flag) |
3.条件跳转(一般配合cmp
使用)
指令名称 | 指令英文全拼 | 功能 | 备注 |
---|---|---|---|
jmp(JMP) | jump | 无条件跳转 | 强制跳转 |
jz(JZ)/je(JE) | jump if zero,or equal | 结果为0(相等)跳转 | 检测Z位 |
jnz(JNZ)/jne(JNE) | jump if not zero,or not equal | 结果不为0(不相等)跳转 | 检测Z位 |
js(JS) | jump if sign | 结果为负跳转 | 检测S位 |
jns(JNS) | jump if not sign | 结果为正跳转 | 检测S位 |
jb(JB) | jump below | 比较小于跳转 | 检测C位 |
jnb(JNB) | jump not below | 比较大于或者等于跳转 | 检测C位 |
What is Z位 S位 C位
?
在0x01
认识OD中在寄存器窗口
中认识了标志寄存器
,如图:
这里用jnz去举例,jnz的判断检查Z位,当Z位是0的时候就跳转,在Z位是1的时候就不跳转
4.子程序
指令名称 | 指令英文全拼 | 功能 |
---|---|---|
call(CALL) | CALL | 调用子程序或者函数 |
ret(RET) | return | 返回到 |
5.循环指令
LOOP loop
6.算数指令
指令名称 | 功能 |
---|---|
add(ADD) | 加法 |
sub(SUB) subr(SUBR) | 减法 |
mul(MUL) | 乘法 |
div(DIV) divr(DIVR) | 除法 |
6.空指令
空指令:nop
7.比较指令
比较指令:cmp
例如:cmp x,y 比较x,y是否相等