MOV
MOV A,123
就是直接给A赋值
这句话的意思,就是,把123放在A里面
mov dword ptr ds[0x4562],edx
把edx的值,放在地址为0x4562的里面
add
mov eax,1 // eax里面赋值为1(相当于:int eax=1)
add eax,8 //eax+8然后,再把值给eax,这个时候,eax等于8(相当于:eax=eax+8)
sub
mov eax,8 // eax里面赋值为1(相当于:int eax=1)
sub eax,5 //eax-5然后,再把值给eax,eax等于3(相当于eax=eax-8)
逻辑与and
逻辑或or
逻辑非not
逻辑异或xor(同为0,异为1)
移位指令
左移动:sal;
右移动:sar;
sal eax,1 //算数左移与逻辑左移,功能是一样的
00000010这个将会左移动一位变成:00000100,,
因为要保持8位,不够的地方,会自动用0补齐
......................................................................................
sar eax,1
10001000这个将会向右移动一位,但是,最高位不会变。。。右移后,变成10000100
因为要保持8位,不够的地方,会自动用0补齐
逻辑移位指令
逻辑左移:SHL;
逻辑右移动:SHR;
sal eax,1 //算数左移与逻辑左移,功能是一样的
00000010这个将会左移动一位,最低位置0,变成:00000100,,
......................................................................................
sar eax,1
10001000这个将会向右移动一位,最高位置0。。。右移后,变成01000100
test。cmp指令
test指令:实际上就是逻辑与运算,但不同的是,test指令不会改变参与运算的参数的值,只会改变标志位的值。
cmp指令:实际上就是减法运算,但不同的是,cmp指令不会改变参与运算的参数的值,只会改变标志位的值。
pust。pop指令
push 压栈指令
push ebp 直接把ebp的值,给到栈里面
······它执行了2步操作:1.置顶2.赋值
pop 出栈指令
push ebp 直接把给栈里面值,取出来给ebp
······它执行了2步操作:1.还原之前所在的位置(优先级?反正我是这么理解的)2.赋值
栈:先进后出,后进先出
jmp,nop指令
jmp:无条件跳转指令
nop指令:空指令(CPU什么事情也不做,在那里发呆)
jcc跳转指令,表
call,retn指令
call:
实际上是执行了。1.jmp+函数地址—和----2.push call函数指令的下一行的地址
retn:
实际上就是pop eip