8086汇编指令文档格式.docx

上传人:b****3 文档编号:7311887 上传时间:2023-05-08 格式:DOCX 页数:24 大小:26.96KB
下载 相关 举报
8086汇编指令文档格式.docx_第1页
第1页 / 共24页
8086汇编指令文档格式.docx_第2页
第2页 / 共24页
8086汇编指令文档格式.docx_第3页
第3页 / 共24页
8086汇编指令文档格式.docx_第4页
第4页 / 共24页
8086汇编指令文档格式.docx_第5页
第5页 / 共24页
8086汇编指令文档格式.docx_第6页
第6页 / 共24页
8086汇编指令文档格式.docx_第7页
第7页 / 共24页
8086汇编指令文档格式.docx_第8页
第8页 / 共24页
8086汇编指令文档格式.docx_第9页
第9页 / 共24页
8086汇编指令文档格式.docx_第10页
第10页 / 共24页
8086汇编指令文档格式.docx_第11页
第11页 / 共24页
8086汇编指令文档格式.docx_第12页
第12页 / 共24页
8086汇编指令文档格式.docx_第13页
第13页 / 共24页
8086汇编指令文档格式.docx_第14页
第14页 / 共24页
8086汇编指令文档格式.docx_第15页
第15页 / 共24页
8086汇编指令文档格式.docx_第16页
第16页 / 共24页
8086汇编指令文档格式.docx_第17页
第17页 / 共24页
8086汇编指令文档格式.docx_第18页
第18页 / 共24页
8086汇编指令文档格式.docx_第19页
第19页 / 共24页
8086汇编指令文档格式.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

8086汇编指令文档格式.docx

《8086汇编指令文档格式.docx》由会员分享,可在线阅读,更多相关《8086汇编指令文档格式.docx(24页珍藏版)》请在冰点文库上搜索。

8086汇编指令文档格式.docx

--->

 │

可选  │{}  │

取内容 │()  │(Reg)表示寄存器Reg的内容

取地址 │[]  │[Mem]表示存储单元Mem的有效地址

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

 

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 

│附加段 /

一、通用寄存器(GeneralRegister)

            通用寄存器的专门用途

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

 寄存器 │         用    途

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

  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基指针(BasePointer),SP堆栈指针(StackPointer)

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

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

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

SI和DI│SI源变址(SourceIndex),DI目的变址(DestinationIndex)

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

二、段寄存器(SegmentRegister)

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

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

中,由段值和段内偏移形成20位地址:

物理地址=段值×

16+偏移。

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

┌代码段(CodeSegment)寄存器CS

│数据段(DataSegment)寄存器DS

│堆栈段(StackSegment)寄存器SS

└附加段(ExtraSegment)寄存器ES

三、指令指针(InstructionPointer)

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

于8080/8085中的程序计数器PC(ProgramCounter)。

指令指针IP给出接着要执行

指针在代码段中的偏移。

四、标志寄存器(FlagRegister)

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

处理器的状态和运算结果的某些特征。

各标志在标志寄存器中的位置如下:

15 

14 

13 

12 

11 

10 

0

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

│ 

│ 

│OF│DF│IF│TF┃SF│ZF│ 

│AF│ 

│PF│ 

│CF│

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

         │ │ │ │ │ │   │   │   │

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

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

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

         │ │ │ │ │ └─零标志

         │ │ │ │ └─符号标志

         │ │ │ └─追踪标志

         │ │ └─中断标志

         │ └─方向标志

         └─溢出标志

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

反之,

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

1.运算结果标志

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

(1)进位标志CF(CarryFlag)

主要用于反映运算是否产生进位或借位。

如果运算结果的最高位产生一个

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

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

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

(2)零标志ZF(ZeroFlag)

用于反映运算结果是否为0。

如果运算结果为0,则ZF=1,否则ZF=0。

(3)符号标志SF(SignFlag)

用于反映运算结果的符号位。

SF与运算结果的最高位相同。

(4)溢出标志OF(OverflowFlag)

用于反映有符号数加减运算是否引起溢出。

如果运算结果超出了8位或16位

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

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

(5)奇偶标志PF(ParityFlag)

用于反映运算结果中“1”的个数。

如果“1”的个数为偶数,则PF=1,否则

PF=0。

(6)辅助进位标志AF(AuxiliaryCarryFlag)

在字节操作时,如发生低半字节向高半字节进位或借位;

在字操作时,如

发生低字节向高字节进位或借位,则AF=1,否则AF=0。

2.状态控制标志

(1)方向标志DF(DirectionFlag)

决定串操作指令执行时有关指针寄存器调整方向。

当DF=1时,串操作指令按减方式改变有关存储器指针值;

当DF=0时,串操作指针按加方式改变有关存储器指针值。

(2)中断允许标志IF(Interrupt-enableFlag)

决定CPU是否响应外部可屏蔽中断请求。

当IF=1时,CPU能够响应外部的可屏蔽中断请求;

当IF=0时,CPU则不响应外部的可屏蔽中断请求。

(3)追踪标志TF(TrapFlag)

当追踪标志TF被置1后,CPU进入单步方式,即在一条指令执行后,产生一个

单步中断。

这主要用于程序的调试。

8086/8088的寻址方式

“高高低低”原则、逻辑地址的表示“段值:

偏移”、物理地址=段值×

16+偏移

            段寄存器的引用规定

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

 访问存储器涉及的方式 │约定段寄存器│可选段寄存器│  偏移

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

 取指令        │   CS   │   无   │  IP

 堆栈操作       │   SS   │   无   │  SP

 一般数据存取     │   DS   │ CS,ES,SS │ 有效地址

 源数据串       │   DS   │ CS,ES,SS │  SI

 目的数据串      │   ES   │   无   │  DI

 BP作为指针寄存器   │   SS   │ CS,DS,ES │ 有效地址

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

注:

可选段寄存器指可作为段超越前缀改变的段寄存器,有效地址指段内偏移

8086/8088接受三种类型的操作数:

一、立即操作数:

数据作为指令的一部分,紧跟在操作码的后面

二、寄存器操作数:

数据存在CPU的某个寄存器中

三、存储器操作数:

数据存在存储器中,操作数用来指出数据在存储器中的位置

针对前两种操作数的寻址方式是立即寻址和寄存器寻址,其余5种方式都是

指针存储器操作数的。

0.固定寻址

固定寻址又称为隐含寻址,即指令中不指明操作数,但隐含在操作码中。

字扩展指令CBW,仅有操作码,无操作数,但指令扩展AL中字节的符号,把它送至

AH中,这里的操作数AL是隐含在操作码中的。

又如乘法指令MUL,是单操作数指令

形式(MULOPRD),只指示了一个操作数OPRD,另一操作数未指明,也是隐含的,

为AL或AX,同样乘积的存放地址也是隐含的,为AX或DX,AX。

【特点】不需要计算有效地址,执行速度快,多为单字节指令

一、立即数寻址

1.立即寻址:

操作数直接包含在指令中,紧跟在操作码之后存放在代码段,执行

时直接从指令队列中取出,不必执行总线周期访问存储器,操作数称为立即数

【特点】执行速度快,只能用于源操作数,主要用来对寄存器赋值

〖例〗MOVAX,1234H

这条指令的机器码为:

B83412,占3字节,含义是将立即数1234H送到寄存

器AX中,存放按“高高低低”原则,即高位字节存入高地址,低位字节存入低地

址。

示意图如下:

┌─┬─┐ 

┌─┐ 

│AH│AL│ 

└┬┴┬┘ 

│B8│

└───┼34│

└─────┼12│

└─┘

二、寄存器操作数寻址

2.寄存器寻址:

操作数包含在CPU内部的寄存器中,指令中直接给出该寄存器名

对于16位操作数,寄存器可以是:

AX,BX,CX,DX,BP,SP,SI,DI等

对于8位操作数,寄存器可以是:

AH,AL,BH,BL,CH,CL,DH,DL等

【特点】指令编码短,无需从存储器取数,执行速度快

〖例〗

INCCX 

;

目的操作数为寄存器寻址

MOVSI,AX 

源操作数和目的操作数均是寄存器器寻址

MOVAL,5AH 

源操作数为立即寻址,目的操作为寄存器寻址

※8086/8088规定,除串操作指令外,在一条指令中只能有一个操作数为存储器

操作数,或为源操作数,或为目的操作数

三、存储器操作数寻址

3.直接寻址:

操作数在存储器中的16位有效地址由指令中直接给出

如果指令中没有用段超越前缀指明操作数在哪个段,则默认在数据段。

〖例〗MOVAX,[1234H]

A13412,占3字节,含义是将DS段中偏移地址为

1234H的字单元中的内容送到AX中。

【注意】

(1)在直接寻址中,若指令中有效地址是一个16位数,

为不与立即寻址相混淆,应用方括号[]括起来,如上例;

若有效地址是一个符号地址,如MOVAX,DATA,则不用加方括号。

(2)若操作数不在数据段,则可用段超越前缀在有效地址前指明,如:

MOVES:

[2500H],BL

该指令表示目的操作数不在数据段,而在附加段,PA=(ES*16)+2500H

4.寄存器间接寻址:

操作数的有效地址在BX、BP、SI、DI这4个寄存器之一中

不使用段超载前缀时:

(1)当指定BX、SI或DI为间址寄存器,则操作数在数据段中,DS的内容为段基址

┌(BX)

EA=┤(SI) 

PA=(DS×

16)+EA

└(DI)

(2)当指定BP为间址寄存器,则操作数在堆栈段中,SS寄存器中的内容为段基址

EA=(BP) 

PA=(SS×

MOVAX,[DI] 

源操作数为寄存器间接寻址,引用的段寄存器是DS

MOV[BP],CX 

目的操作数为寄存器间接寻址,引用的段寄存器是SS

MOVDL,CS:

[BX];

源操作数为寄存器间接寻址,引用的段寄存器指定为CS

【特点】可以用于表格处理,处理完表中的一项后,只要修改指针寄存器的内容

就可方便地处理表中的另一项

5.寄存器相对寻址:

操作的有效地址是一个基址寄存器或变址寄存器的内容加上

指令中给定的8位/16位的位移量

├(BP) 

┌ 

8位

EA=┤ 

┤ 

位移量

├(SI) 

└16位

寄存器相对寻址和寄存器间接寻址很相似,只是多了一个位移量。

〖例〗MOVAL,53H[BX] 

或写成MOVAL,[BX+53H]

设(DS)=3000H,(BX)=8000H,(38053H)=7FH,则源操作数的PA为:

PA=(3000H)*16+8000H+53H=38053H

指令执行后,将存储器38053H单元的内容7FH送入AL。

【特点】可以用于表格处理,表格的首地址可设置为指令中的位移量,利用修改

基址或变址寄存器的内容来存取表格中的项值

6.基址变址寻址:

操作数有效地址是一个基址寄存器和一个变址寄存器内容之和

┌(BX) 

┌(SI)

└(BP) 

〖例〗MOVAX,[BX][DI] 

或写成MOVAX,[BX+DI]

设(DS)=2000H,(BX)=0256H,(DI)=6694H,(268EAH)=68H,(268EBH)=01H,则

EA=0256H+6694H=68EAH

PA=(DS)*16+EA 

=2000H*16+68EAH=268EAH

指令执行后,把268EAH和268EBH两相邻单元的内容送到AX中,(AH)=01H,(AL)=68H

【特点】适用于数组或表格处理,用基址寄存器存放数组首地址,用变址寄存器

来定位数组中的各元素,或反之,由于两个寄存器都可改变,所以操作更灵活

7.相对基址变址寻址:

操作数有效地址是一个基址寄存器和一个变址寄存器内容

再加上一个8位/16位的位移量之和

┌(SI) 

└(DI) 

└16位

〖例〗以下三条指令等价,源操作数为相对基址变址寻址,引用的段寄存器是DS

MOVAX,MASK[BX][SI]

MOVAX,MASK[BX+SI]

MOVAX,[MASK+BX+SI]

四、I/O端口寻址

在以Intel的80x86家族处理器为CPU的系统中,I/O端口地址和存储单元的地址

是各自独立的,分占两个不同的地址空间。

8086/8088提供的I/O端口地址空间达

64K,因而可接64K个8位端口。

I/O地址空间也可以定义16位和32位的端口。

I/O端口可以用立即操作数或DX寄存器寻址:

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

直接端口寻址│端口地址为8位立即数,值范围0~255

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

间接端口寻址│端口地址为DX寄存器内容,值范围0~65535

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

IN 

AL,7 

源操作数为直接端口寻址

AX,DX 

源操作数为间接端口寻址

OUT40H,AX 

目的操作数为直接端口寻址

OUTDX,AL 

目的操作数为间接端口寻址

8086/8088的指令系统可分为如下六个功能组:

一、数据传送(DataTransfer)

二、算术运算(Arithmetic)

三、逻辑运算(Logic)

四、串操作 

(StringManipulation)

五、控制传送(ControlTransfer)

六、处理器控制(ProcessorControl)

【规则】

(1)只有通用传送指令中的MOV,PUSH,POP是允许以段寄存器为操作数的指令

(2)源和目的不能同时是段寄存器

(3)代码段寄存器CS不能作为目的,指令指针IP既不能作为源,也不能作为目的

(4)立即数永远不能作为目的操作数

(5)源操作数和目的操作类型要一致,即同时为字节或字,但LDS,LES例外

(6)除了串操作指令外,源操作数和目的操作数不能同时是存储器操作数

一、数据传送指令(DataTransfer)

1.通用传送(GeneralPurposeTransfer)

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

MOVOPRD1,OPRD2 

│数值传送,OPRD1<

--OPRD2,操作数可为段寄存器

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

PUSHOPRD16 

│进栈指令,把16位数据压入堆栈顶,OPRD16可为段寄存器

POPOPRD16 

│出栈指令,从堆栈顶弹出16位数据,OPRD16不可为CS

XCHGOPRD1,OPRD2│交换指令,把一个字节或一个字的源与目的操作互换

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

2.累加器专用传送(AccumulatorSpecialPurposeTransfer)

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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 笔试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2