x86汇编指令基础积累

一、寻址方式

操作数:立即数、寄存器操作数、内存操作数

1.1 立即寻址

MOV       AL,80H              ;源操作数为立即数80H

1.2 寄存器寻址

MOV        AL,AX                ;以寄存器的值作为操作数

1.3 内存寻址

1.3.1 直接寻址

MOV        AX,[2000H]      ;默认数据段DS:2000H和2001H处的内容取出

MOV        AX,ES:[2000H]

MOV        AX,[BUG]         ;符号地址代替数值

1.3.2 寄存器间接寻址

MOV        AX,[SI]              ;操作数在寄存器中,操作数的有效地址由BX、BP、SI、DI中的一个指出,若未用前缀指明,默认关系为:BX、SI、DI默认在DS段中;BP默认在SS段中。

1.3.3 寄存器相对寻址

MOV        AX,[COUNT+BP]      ;偏移处加上一个偏移量

1.3.4 基址变址寻址

基址:BP、SP

变址:SI、DI

默认关系为:BX、SI、DI默认在DS段中;BP默认在SS段中。

MOV        AX,[BP+SI]

1.3.5 相对基址变址寻址

MOV        AX,[BP+SI+BUG]

二、指令系统(六类101条)

2.1 数据传送指令

MOV
功能: 把源操作数送给目的操作数
语法: MOV 目的操作数,源操作数
格式: MOV r1,r2
MOV r,m
MOV m,r
MOV r,data

XCHG
功能: 交换两个操作数的数据
语法: XCHG
格式: XCHG r1,r2 XCHG m,r XCHG r,m

PUSH,POP
功能: 把操作数压入或取出堆栈
语法: PUSH 操作数 POP 操作数
格式: PUSH r PUSH M PUSH data POP r POP m

PUSHF,POPF,PUSHA,POPA
功能: 堆栈指令群
格式: PUSHF POPF PUSHA POPA

LEA,LDS,LES
功能: 取地址至寄存器
语法: LEA r,m LDS r,m LES r,m

XLAT(XLATB)
功能: 查表指令
语法: XLAT XLAT m

2.2 算术运算指令

ADD,ADC
功能: 加法指令
语法: ADD OP1,OP2 ADC OP1,OP2
格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data
影响标志: C,P,A,Z,S,O

SUB,SBB
功能:减法指令
语法: SUB OP1,OP2 SBB OP1,OP2
格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data
影响标志: C,P,A,Z,S,O

INC,DEC
功能: 把OP的值加一或减一
语法: INC OP DEC OP
格式: INC r/m DEC r/m
影响标志: P,A,Z,S,O

NEG
功能: 将OP的符号反相(取二进制补码)
语法: NEG OP
格式: NEG r/m
影响标志: C,P,A,Z,S,O

MUL,IMUL
功能: 乘法指令
语法: MUL OP IMUL OP
格式: MUL r/m IMUL r/m
影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)

DIV,IDIV
功能:除法指令
语法: DIV OP IDIV OP
格式: DIV r/m IDIV r/m

CBW,CWD
功能: 有符号数扩展指令
语法: CBW CWD

AAA,AAS,AAM,AAD
功能: 非压BCD码运算调整指令
语法: AAA AAS AAM AAD
影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)

DAA,DAS
功能: 压缩BCD码调整指令
语法: DAA DAS
影响标志: C,P,A,Z,S

2.3 逻辑运算与移位指令

逻辑运算指令


AND   与  ;  OR    或  ;  NOT   非  ;  XOR   异或


TEST  测试
功能:将两个操作数进行逻辑与运算,Test命令的两个操作数不会被改变。
语法:TEST r/m,r/m/data
标志位:C,O,P,Z,S(其中C与O两个标志会被设为0)


移位指令

1)非循环移位指令SAL/SAR/SHL/SHR

算术移位指令SAL,SAR     (A:算术)

逻辑移位指令SHL,SHR     (H:逻辑)


2)循环移位指令ROL/ROR/RCL/RCR

不带进位的循环:ROL/ROR

带进位的循环:RCL/RCR

2.4 串操作指令

串传送指令    MOVS
功能:指令可以把SI指向的数据段中的一个字节、字或双字(DS:SI)传递到由DI指向的附加段中的一个字节、字或双字(ES:DI)中去,不影响条件标志位,并根据DF以及数据格式对SI和DI进行修改。 
语法:
   MOVS  DST,SRC
   MOVSB  (字节)
   MOVSW   (字)
   MOVSD  (双字)(386及其后继机型可用)
  

串装入指令    LODS
功能:指令把DS:SI指向的存储单元中的数据送到AL、AX或EAX中,并根据条件标志位DF的值和数据类型来修改SI。 
语法:
   LODS     SRC
   LODSB  (字节)
   LODSW   (字)
   LODSD  (双字)(386及其后继机型可用) 


串存储指令    STOS
功能:指令把AL、AX和EAX中的内容存入由DS:SI指向的存储单元,并根据DF的值及数据类型修改SI。 
语法:
   STOS     DST
   STOSB  (字节)
   STOSW   (字)
   STOSD  (双字)(386及其后继机型可用)


串比较指令    CMPS
功能:指令把DS:SI指向的存储单元中的数据与ES:SI指向的存储单元中的数据相减,不保存结果但影响条件标志位,并根据DF的值对SI和DI进行修改。 
语法:
   CMPS  SRC,DST
   CMPSB  (字节)
   CMPSW   (字)
   CMPSD  (双字)(386及其后继机型可用)  


串扫描指令    SCAS
功能:指令把AL、AX或EAX中的数据与ES:DI指向的存储单元中的数据相减,不保存结果但影响条件标志位,并根据DF的值对SI和DI进行修改。 
语法:
   SCAS     DST
   SCASB  (字节)
   SCASW   (字)
   SCASD  (双字)(386及其后继机型可用)
  

串输入指令    INS
功能:指令把端口在DX寄存器中的I/O空间的数据送到由ES:DI指向的存储单元,并根据DF的值和数据类型修改DI。 
语法:
   INS  DST,DX
   INSB  (字节)
   INSW   (字)
   INSD  (双字)(386及其后继机型可用)
  

串输出指令    OUTS
功能:指令把由DS:SI指向的存储单元中的数据送到端口号在DX寄存器中的I/O端口中,并根据DF的值和数据类型改变SI。
语法:
   OUTS  DX,SRC
   OUTSB  (字节)
   OUTSW   (字)
   OUTSD  (双字)(386及其后继机型可用)

2.5 控制转移指令

⑴ 无条件转移
          JMP 跳转

(2)条件转移

x86汇编指令基础积累_第1张图片

⑶ 循环指令
      LOOP      循环
      LOOPZ/LOOPE  为零/相等时循环
      LOOPNZ/LOOPNE 不为零/不等时循环

⑷ 子程序调用与返回
      CALL      调用
      RET       返回

⑸ 中断及中断返回
      INT       中断
      INTO      溢出则中断
      IRET       中断返回

2.6 处理器控制指令

   CLC    //对CF清零 
   STC    //对CF置位
   CMC    //对CF取反
   CLD    //对DF清零
   STD    //对DF置位
   CLI    //对IF清零
   STI    //对IF置位

 

你可能感兴趣的:(信息安全,汇编语言)