数据传送类指令:
- 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不能识别,编译器可以翻译
具体在逆向和病毒分析方面的使用在后边继续写