数据传送类指令:
MOV reg/mem,imm
;立即数送寄存器或主存
MOV reg/mem/seg,reg
;寄存器送(段)寄存器或主存
MOV reg/seg,mem
;主存送(段)寄存器
MOV reg/mem,seg
;段寄存器送寄存器或主存
MOV al,4 ;al<-4,字节传送
MOV cx,0ffh ;cx<-00ffh,字传送
MOV si,200h ;si<-200h,字传送
MOV byte ptr [si],0ah ;byte ptr 属性修饰符,说明操作数为字节
MOV word ptr [si+2],0bh ;word ptr 说明是字操作
交换指令:
寄存器和寄存器可以对换数据
寄存器和储存器可以对换数据
储存器和储存器不能对换数据
XCHG reg,reg/mem
;reg<->reg/mem
MOV ax,1234h ;ax=1234h
MOV bx,5678h ;bx=5678h
XCHG ax,bx ;ax=5678h bx=1234h
XCHG ah,al ;ax=7856h
进栈指令:
操作过程:
1.sp<-sp-2
2.ss:[sp]<-r16/m16/seg
出栈指令:
操作过程:
1.r16/m16/seg<-ss:[sp]
2.sp<-sp+2
算术运算指令:
加法指令ADD
ADD reg,imm/reg/mem
;reg<-reg+imm/reg/mem
ADD mem,imm/reg
;mem<-mem+imm/reg
带进位加法指令ADC
ADC reg,imm/reg/mem
;reg<-reg+imm/reg/mem+CF
ADC mem,imm/reg
;mem<-mem+imm/reg+CF
增量指令INC:
INC reg/mem
;reg/mem<-reg/mem+1
减法指令SUB:
SUB reg,imm/reg/mem
;reg<-reg-imm/reg/mem
SUB mem,imm/reg
;mem<-mem-imm/reg
带借位减法指令SBB:
SBB reg,imm/reg/mem
;reg<-reg-imm/reg/mem-CF
SBB mem,imm/reg
;mem<-mem-imm/reg-CF
减量指令DEC:
DEC reg/mem
;reg/mem<-reg/mem-1
求补指令NEG:
NEG reg/mem
;reg/mem<-0-reg/mem
比较指令CMP:执行功能与SUB一样,但是结果不送回操作数
CMP reg,imm/reg/mem
;reg-imm/reg/mem
CMP mem,imm/reg
;mem-imm/reg
位操作类指令:
逻辑运算指令AND
AND dest,src
;dest<-dest^src
逻辑运算指令OR
OR dest,src
;dest<-destVsrc
其他逻辑运算指令:
XOR:异或指令
NOR:非运算
控制转移类指令:
无条件转移指令JMP
原理:程序跳转是通过修改CS和IP的值来实现的
JMP label
;程序转向label标号指定地址
条件转移指令JCC
JCC label
;条件满足发生转移 IP<-IP+8位位移量
;条件不满足顺序执行
J开头的很多其他指令:都是“比较”有关
循环指令LOOP:
利用CX寄存器作为计数器
LOOP lable
;cx<-cx-1
;cs!=0,循环到标号label
子程序指令:
比如玩游戏时候发技能就是在调用子程序
CALL指令调用子程序
子程序执行完后RET指令返回主程序
中断指令:
中断指令INT,中断返回指令INRT
处理机控制类指令:
对CPU状态进行控制的指令
NOP:不执行任何操作,但占用字节
伪指令:
CPU不能识别,编译器可以翻译
具体在逆向和病毒分析方面的使用在后边继续写