mov 将右操作数复制到左操作数 lea 装入有效地址,用来得到局部变量和函数参数的指针 push 将操作数压到堆栈的栈顶 pop 将堆栈的栈顶弹出到操作数 pushad 将所有的通用寄存器压到堆栈栈顶 popad 将堆栈的栈顶弹出到所有的通用寄存器中 call 调用一个函数,以寄存器和偏移量(e.g. call [eax+32])来调用函数和C++里面的虚函数调用很类似 ret 从一个函数返回,_stdcall调用规范要求如果有返回值,就要将返回值从堆栈的栈顶弹出 leave 是mov ESP、EBP/pop EBP的简写,用来退出函数 add 加 sub 减 inc 递增 dec 递减 mul 无符号整数乘法 imul 有符号整数乘法 div 无符号整数除法 idiv 有符号整数除法 and 逻辑与 or 或 not 逻辑非(使用反码非,将所有的位单独取反) neg 非操作(使用补码非,与乘以-1效果相同) xor 异或 cmp 比较 test 比较操作数的位,使用逻辑与操作。 jmp 无条件跳转 je 如果相等则跳转 jne 如果不相等则跳转 loop 返回到循环的入口,视具体条件而定 nop 空操作 int 引发中断,3号中断调用调试器,它经常被当作不会被调用的指令填充到程序中,从而成为一个特殊的空操作
EAX 通用寄存器,记录函数的返回值 EBX 通用寄存器 ECX 通用寄存器,记录指向对象的this指针 EDX 通用寄存器,记录64位函数的返回值的高端字 ESI 内存移动和比较操作的源地址寄存器 EDI 内存移动和比较操作的目标地址寄存器 EIP 指令指针(当前执行代码的位置) ESP 栈指针(当前栈顶的位置) EBP 栈基址指针(当前栈的基地址) EFLAGS 记录比较、算术操作的标志位;有时简写为EFL或EFLGS CS代码段,SS堆栈段,DS数据段,ES附加段,FS另一附加段,GS另一附加段;FS用来指向线程信息块(TIB) FPO优化,帧指针省略优化;使用FPO可能导致一个有趣的错误,程序的Debug版本正确运行,Release版本却崩溃,出现这个问题的原因是函数调用与函数声明不匹配。 |