3.汇编-常用汇编指令

Asura 2017年09月16日 100次浏览

1. MOV指令(赋值)

含义:前者被后者赋值
exp:

MOV EAX,0xFFFFFFFF

此时 EAX = 0xFFFFFFFF

指令格式:

  1. MOV r/m8,r8
  2. MOV r/m16,r16
  3. MOV r/m32,r32
  4. MOV r8,r/m8
  5. MOV r16,r/m16
  6. MOV r32,r/m/32
  7. MOV r8,imm8
  8. MOV r16,imm16
  9. MOV r32,imm32

r – 通用寄存器
m – 内存
imm – 立即数
r8 – 8位通用寄存器
m8 – 8位内存
imm8 – 8位立即数

2. ADD指令(加法)

含义:前者与后者相加,结果赋值给前者

MOV AL,00000000
ADD AL,00000001

此时 AL=00000001=0x01

指令格式:

  1. ADD r/m8,imm8
  2. ADD r/m16,imm16
  3. ADD r/m32,imm32
  4. ADD r/m16,imm8
  5. ADD r/m32,imm8
  6. ADD r/m8,r8
  7. ADD r/m16,r16
  8. ADD r/m32,r32
  9. ADD r8,r/m8
  10. ADD r16,r/m16
  11. ADD r32,r/m32

3.SUB指令(减法)

含义:前者减去后者,结果赋值给前者

MOV AL,00000002
SUB AL,00000001

此时 AL=00000001=0x01

指令格式:

  1. SUB r/m8 ,imm8
  2. SUB r/m16,imm16
  3. SUB r/m32,imm32
  4. SUB r/m16,imm8
  5. SUB r/m32,imm8
  6. SUB r/m8,r8
  7. SUB r/m16,r16
  8. SUB r/m32,r32
  9. SUB r8,r/m8
  10. SUB r16,r/m16
  11. SUB r32,r/m32

4.AND指令(与运算,两个都为1 结果为1,否则为0)

含义:前者与后者与运算,结果赋值给前者

MOV AL,00000000
AND AL,00000001

此时 AL=00000000=0x00

指令格式:

  1. AND r/m8 ,imm8
  2. AND r/m16,imm16
  3. AND r/m32,imm32
  4. AND r/m16,imm8
  5. AND r/m32,imm8
  6. AND r/m8,r8
  7. AND r/m16,r16
  8. AND r/m32,r32
  9. AND r8,r/m8
  10. AND r16,r/m16
  11. AND r32,r/m32

5.OR指令(或运算,两个都为0时结果为0 否则为1)

含义:前者与后者或运算,结果赋值给前者

MOV AL,00000000
OR AL,00000001

此时 AL=00000001=0x01

指令格式:

  1. OR r/m8 ,imm8
  2. OR r/m16,imm16
  3. OR r/m32,imm32
  4. OR r/m16,imm8
  5. OR r/m32,imm8
  6. OR r/m8,r8
  7. OR r/m16,r16
  8. OR r/m32,r32
  9. OR r8,r/m8
  10. OR r16,r/m16
  11. OR r32,r/m32

6.XOR指令(异或运算,两个相同时为0 否则为1)

含义:前者与后者进行异或运算,结果赋值给前者

MOV AL,00000000
XOR AL,00000001

此时 AL=00000001=0x01

指令格式:

  1. XOR r/m8 ,imm8
  2. XOR r/m16,imm16
  3. XOR r/m32,imm32
  4. XOR r/m16,imm8
  5. XOR r/m32,imm8
  6. XOR r/m8,r8
  7. XOR r/m16,r16
  8. XOR r/m32,r32
  9. XOR r8,r/m8
  10. XOR r16,r/m16
  11. XOR r32,r/m32

7.NOT指令(取反)

含义:

MOV AL,00000000
NOT AL

此时 AL=11111111=0xff

指令格式

  1. NOT r/m8
  2. NOT r/m16
  3. NOT r/m32