前言:一点点简单的汇编语言,简单的可以看懂,后面可能还会补充
目录
数据传送指令
MOV:把源操作数传送到目的操作数
MOVSX:带符号扩展传送
MOVZX:带零扩展传送
例
MOV EAX, EDX;寄存器EDX->EAX的数据传送
MOVSX EAX, BL;将80H扩张为FFFFFF80H后送EAX中
MOVZX AX, BL;将80H 扩张为0080H后送AX中
push:操作数进栈
pop:出栈到目的操作数,把当前的SP所指向的堆栈顶部的一个字送到指定的目的操作数
还有POPA(处理十六位寄存器)和POPAD(处理三十二位寄存器)
PUSHF:16位标志寄存器进栈
PUSHFD:32位标志寄存器进栈
POPF16位标志寄存器出栈
POPFD:位标志寄存器出栈
XCHG:交换两操作数。允许通用寄存器之间,通用寄存器和存储器之间交换数据
LEA:将源操作数的有效地址传送到通用寄存器
LEA EAX, [EBP+var_cc];将EBP+var_cc的值送入EAX
MOV EAX,[EBP+var_cc];将存储在地址EBP+var_cc上的变量值送入EAX
算数运算指令
加法指令
ADD:将源操作数和目的操作数相加,结果送到目的操作数
ADC:将源操作数与目的操作数一以及CF的值相加,结果传送到目的操作数
INC:目的操作数加一,结果送入目的操作数
减法指令
SUB:将目的操作数减去原操作数,结果送入目的操作数
SBB:将目的操作数减去源操作数,再减去CF值结果送入目的操作数
DEC:目的操作数减一,结果送入目的操作数
除法指令
DIV:无符号除法指令
IDI:有符号除法指令
乘法指令
MUL:无符号数乘法指令,将源操作数和累加器中的目的操作数相乘,结果送入累加器中
IMUL:有符号数乘法指令,将源操作数和累加器中的目的操作数相乘,结果送入累加器中
逻辑运算和位移指令
逻辑运算
AND:与
OR:或
XOR:异或
TEST:目的操作数与源操作数按位进行逻辑与操作,并修改标志位,结果不回送目的操作数
常用于检测某些条件是否满足,但又不希望改变原有操作数的情况下
例
TEST ECX,ECX
JE Crackme,00401326;程序跳转到0x00401326处继续执行
算术逻辑移位
SAR:算数右移(最高位不变)
SHR:逻辑右移(最高位补零)
串操作指令
控制转移指令
REP:循环控制指令
处理器控制指令
NOP:空操作指令(去除花指令的时候用的多 机器码0x90)
INYn:中断指令