8086汇编指令解析

  • 格式:doc
  • 大小:77.50 KB
  • 文档页数:16

8086汇编指令

·8086/8088 寄存器组

一、通用寄存器

二、段寄存器

三、指令指针

四、标志寄存器

·8086/8088 寻址方式

0.固定寻址

一、立即数寻址

1.立即寻址

二、寄存器操作数寻址

2.寄存器寻址

三、存储器操作数寻址

3.直接寻址

4.寄存器间接寻址

5.寄存器相对寻址

6.基址变址寻址

7.相对基址变址寻址

四、I/O端口寻址

·8086/8088 指令系统

一、数据传送

二、算术运算

三、逻辑运算

四、串操作

五、控制传送

六、处理器控制

符号说明

━━━━┯━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━

含义 │ 符号 │ 备 注

────┼────┼─────────────────────────

操作数 │OPRD │包括存储器、寄存器、立即数,可接8,16,32指明位数

存储器 │Mem │可接8,16,32表明操作数位数,如Mem32表示字操作数

累加器 │AReg │可接8, 16表明累加器的位数,AReg8即AL、AReg16即AX

寄存器 │Reg │可接8,16,32表明寄存器位数,如Reg16表示16位寄存器

段寄存器│Seg │代码段CS,数据段DS,堆栈段SS,附加段ES

标志位 │Flags │O D I T|S Z A P C

立即数 │Im │

有效地址│EA │Effective Address,即偏移量,其值不超过FFFFH

物理地址│PA │Physical Address

传送至 │<--, -->│

交换 │<---> │

可选 │{ } │

取内容 │( ) │(Reg)表示寄存器Reg的内容 取地址 │[ ] │[Mem]表示存储单元Mem的有效地址

━━━━┷━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━

·8086/8088 寄存器组

8086/8088包括四个16位数据寄存器,两个16位指针寄存器,两个16位变址

寄存器,一个16位指令指针,四个16位段寄存器,一个16位标志寄存器。

这14个16位寄存器分成四组,它们的名称和分组情况如下:

┌─┬─┐

│AH│AL│AX \ ┐

│BH│BL│BX \ 数据 │

│CH│CL│CX / 寄存器 │

│DH│DL│DX / │

└─┴─┘ ├ 通用寄存器

┌───┐ │

│ BP │基址指针 \ 指针 │

│ SP │堆栈指针 / 寄存器 │

│ SI │源地址 \ 变址 │

│ DI │目的地址 / 寄存器 ┘

└───┘

┌───┐

│ IP │指令指针 \ 控制

│ FLAG │标志寄存器/ 寄存器

└───┘

┌───┐

│ CS │代码段 \

│ DS │数据段 \ 段

│ SS │堆栈段 / 寄存器

│ ES │附加段 /

└───┘

一、通用寄存器(General Register)

通用寄存器的专门用途

━━━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

寄存器 │ 用 途

─────┼─────────────────────────────

AX │字乘法,字除法,字I/O

AH │字节乘法,字节除法

AL │字节乘法,字节除法,字节I/O,十进制算术运算

BX │存储器指针

CX │串操作或循环控制中的计数器

CL │移位计数器

DX │字乘法,字除法,间接I/O

BP │存储器指针(存取堆栈的指针) SP │堆栈指针

SI │存储器指针(串操作中的源指针)

DI │存储器指针(串操作中的目的指针)

━━━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

1.数据寄存器

数据寄存器主要用于保存操作数或运算结果等信息,它们的存在节省了为存

取操作数所需占用总线和访问存储器的时间。

四个16位的数据寄存器可分解成八个独立的8位寄存器,这八个8位的寄存器

有各自的名称,均可独立存取。

━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

AX, AL│累加器(Accumulator) 通过它进行操作所花时间可能最少

BX │基(Base)地址寄存器 唯一可作为存储器指针的数据寄存器

CX │计数(Count)寄存器 用来控重复制循环次数或移位位数

DX │数据(Data)寄存器 存放被除数高16位或余数,还有I/O地址

━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

2.指针和变址寄存器

指针和变址寄存器主要用于存放某个存储单元地址的偏移,或某组存储单元

开始地址的偏移,即作为存储器(短)指针使用。作为通用寄存器,它们也可以

保存16位算术逻辑运算中的操作数和运算结果,有时运算结果就是所需要的存储

单元地址的偏移。

利用指针和变址寄存器不仅能够有效地缩短机器指令的长度,而且能够实现

多种存储器操作数的寻址,从而方便地实现对多种类型数据的操作。

━━━┯━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

BP和SP│BP基指针(Base Pointer),SP堆栈指针(Stack Pointer)

│BP主要用于给出堆栈中数据区基址的偏移,便于直接存取堆栈数据

│SP只保存堆栈栈顶地址的偏移

───┼───────────────────────────────

SI和DI│SI源变址(Source Index),DI目的变址(Destination Index)

│在字符串操作中,规定由SI给出源指针,DI给出目的指针

━━━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

二、段寄存器(Segment Register)

8086/8088 CPU 依赖其内部的四个段寄存器实现寻址1M字节物理地址空间。

8086/8088把1M字节地址空间分成若干逻辑段,当前使用段的段值存放在段寄存器

中,由段值和段内偏移形成20位地址:物理地址=段值×16+偏移。

8086/8088 CPU 的四个段寄存器均是16位的,分别称为:

┌ 代码段(Code Segment) 寄存器CS

│ 数据段(Data Segment) 寄存器DS

│ 堆栈段(Stack Segment)寄存器SS

└ 附加段(Extra Segment)寄存器ES

三、指令指针(Instruction Pointer) 8086/8088 CPU 中的指令指针IP(Instruction Pointer)也是16位的,它类似

于8080/8085中的程序计数器PC(Program Counter)。指令指针IP给出接着要执行

指针在代码段中的偏移。

四、标志寄存器(Flag Register)

8086/8088 CPU 中有一个16位的标志寄存器,包含了9个标志,主要用于反映

处理器的状态和运算结果的某些特征。各标志在标志寄存器中的位置如下:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

┌─┬─┬─┬─┬─┬─┬─┬─┳─┬─┬─┬─┬─┬─┬─┬─┐

│ │ │ │ │OF│DF│IF│TF┃SF│ZF│ │AF│ │PF│ │CF│

└─┴─┴─┴─┴┬┴┬┴┬┴┬┻┬┴┬┴─┴┬┴─┴┬┴─┴┬┘

│ │ │ │ │ │ │ │ │

│ │ │ │ │ │ │ │ 进位标志

│ │ │ │ │ │ │ └─ 奇偶标志

│ │ │ │ │ │ └─ 辅助进位标志

│ │ │ │ │ └─ 零标志

│ │ │ │ └─ 符号标志

│ │ │ └─ 追踪标志

│ │ └─ 中断标志

│ └─ 方向标志

└─ 溢出标志

有些指令的执行会影响部分标志,而有些指令的执行不会影响标志;反之,

有些指令的执行受某些标志的影响,而有些指令的执行不受标志的影响。

1.运算结果标志

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

(1) 进位标志CF(Carry Flag)

主要用于反映运算是否产生进位或借位。如果运算结果的最高位产生一个

进位或借位,则CF=1,否则CF=0。

移位指令也把操作数的最高位或最低位移入CF。

───────────────────────────────────

(2) 零标志ZF(Zero Flag)

用于反映运算结果是否为0。如果运算结果为0,则ZF=1,否则ZF=0。

───────────────────────────────────

(3) 符号标志SF(Sign Flag)

用于反映运算结果的符号位。SF与运算结果的最高位相同。

───────────────────────────────────

(4) 溢出标志OF(Overflow Flag)

用于反映有符号数加减运算是否引起溢出。如果运算结果超出了8位或16位

有符号数的表示范围(字节运算时大于127或小于-128,字运算时大于32767或

小于-32768),则OF=1,否则OF=0。

───────────────────────────────────

(5) 奇偶标志PF(Parity Flag)

用于反映运算结果中“1”的个数。如果“1”的个数为偶数,则PF=1,否则

PF=0。