汇编指令学习_01

汇编指令学习_01

通用寄存器

  •   AX
  •   BX
  •   CX
  •   DX

段寄存器

  •   CS - Code Segment
  •   DS - Data Segment
  •   ES - Extra Segment
  •   SS - Stack Segment

指针寄存器

  •  IP - Instruction Pointer
  •  BP - Base Pointer
  •  SP - Stack Pointer

数据转移寄存器

  •   DI - Destination Index
  •   SI - Source Index
  •   set of flags

指令学习

1. MOVE

数据传送指令 MOV

格式: MOV OPRD1,OPRD2

功能: 本指令将一个源操作数送到目的操作数中,即OPRD1<--OPRD2.

说明:

1. OPRD1 为目的操作数,可以是寄存器、存储器、累加器.

   OPRD2 为源操作数,可以是寄存器、存储器、累加器和立即数.

2. MOV 指令以分为以下四种情况:

- 寄存器之间的数据传送指令

- 即数到通用寄存器数据传送指令

- 存器与存储器之间的数据传送指令

- 立即数到存储器的数据传

3本指令不影响状态标志位

Note: x86上不支持内存到内存的转移指令, mov byte ptr [di], byte ptr [si] 是错的

    同样也不能两个操作数都是段寄存器, mov es, cs 是错的

   mov ds, 0这样也是错的, 需要通过ax来中转 mov ax, 0; mov ds, ax

 

2. PUSH

堆栈操作指令 PUSH和POP

格式:

PUSH OPRD

POP OPRD

功能: 实现压入操作的指令是PUSH指令;实现弹出操作的指令是POP指令.

说明:

1. OPRD为16位(字)操作数,可以是寄存器或存储器操作数.

2. PUSH的操作过程是: (SP)<--(SP)-2,((sp))<--OPRD 即先修改堆栈指针SP

(压入时为自动减2),然后,将指定的操作数送入新的栈顶位置.

此处的((SP))<--OPRD,也可以理解为: [(SS)*16+(SP)]<--OPRD 或 [SS:SP]<--OPRD

 

3. POP

堆栈操作指令 PUSH和POP

格式:

PUSH OPRD

POP OPRD

功能: 实现压入操作的指令是PUSH指令;实现弹出操作的指令是POP指令.

说明:

1. OPRD为16位(字)操作数,可以是寄存器或存储器操作数.

2. POP指令的操作过程是: POP OPRD:OPRD<--((SP)),(SP)<--(SP)+2

它与压入操作相反,是先弹出栈顶的数顶,然后再修改指针SP的内容.

 

3. 示例:

POP AX

POP DS

POP DATA1 POP ALFA[BX][DI]

4. PUSH和POP指令对状态标志位没有影响.

 

4. XCHG

数据交换指令 XCHG

格式: XCHG OPRD1,OPRD2 其中的OPRD1为目的操作数,OPRD2为源操作数

功能: 将两个操作数相互交换位置,该指令把源操作数OPRD2与目的操数OPRD1

交换.

说明:

1. OPRD1及OPRD2可为通用寄存器或存储器,但是两个存储器之间是不能用XCHG指令实现的.

2. 段寄存器内容不能用XCHG指令来交换.

3. 若要实现两个存储器操作数DATA1及DATA2的交换,可用以下指令实现:

示例:

PUSH DATA1

PUSH DATA2

POP DATA1

POP DATA2

本指令不影响状态标志位.

 

5. XLAT

查表指令 XLAT

格式: XLAT TABLE其中TABLE为一待查表格的首地址.

LEA bx, offset s

MOV al, 0

XLAT

功能: 把待查表格的一个字节内容送到AL累加器中.

说明:

1. 在执行该指令前,应将TABLE先送至BX寄存器中,然后将待查字节与在表格中距表首地址位移量送AL,即 (AL)<--((BX)+(AL)).

2. 本指令不影响状态标位,表格长度不超过256字节.

 

6. LAHF

标志传送指令 LAHF

格式: LAHF

功能: 取FLAG标志寄存器低8位至AH寄存器.(AH)<--(FLAG)7~0

说明: 该指令不影响FLAG的原来内容,AH只是复制了原FLAG的低8位内容.

 

7. SAHF

标志传送指令 SAHF

格式: SAHF

功能: 将AH存至FLAG低8位

说明: 本指令将用AH的内容改写FLAG标志寄存器中的SF、ZF、AF、PF、和CF标志,从而改变原来的标志位.

 

8. PUSHF

标志传送指令 PUSHF

格式: PUSHF

功能: 本指令可以把标志寄存器的内容保存到堆栈中去

 

9. POPF

标志传送指令 POPF

格式: POPF

功能: 本指令的功能与PUSHF相反,在子程序调用和中断服务程序中,往往用PUSHF指令保护FLAG的内容,用POPF指令将保护的FLAG内容恢复.

说明: 如果对堆栈中的原FLAG内容进行修改,如对TF等标志位进行修改,然后再弹回标志位寄存器FLAG.这是通过指令修改TF标志的唯一方法.

 

10. LEA

有效地址传送指令 LEA

格式: LEA OPRD1,OPRD2

功能: 将源操作数给出的有效地址传送到指定的的寄存器中.

说明:

1. OPRD1 为目的操作数,可为任意一个16位的通用寄存器.
  
    OPRD2 为源操作数,可为变量名、标号或地址表达式. 

    示例: 

LEA BX,DATA1
LEA DX,BETA[BX+SI]
LEA BX BX,[BP],[DI]

2. 本指令对标志位无影响。

posted @ 2013-07-13 21:57  Ares_  阅读(507)  评论(0编辑  收藏  举报