8086指令系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章8086指令系统
第一节8086的寻址方式
第二节8086的指令系统
§4-1 指令的寻址方式
指令的基本组成:
操作码,操作数(0,1,或2个)
汇编语言指令的基本格式:
指令助记符操作数表示符1,操作数表示符2;注释
一、概述
1.操作数(Operand)
操作数是指令的基本构成要素。根据指令的功能,指令中的操作数可以是如下三种:•无操作数,例:HLT;
•单一操作数,例:INC AX;
•双操作数,例:ADD AX,1234H;
在双操作数情况下,第一个操作数通常保存运算结果,故称目的操作数,第二个操作数则称为源操作数。
2.寻址方式(Addressing Mode)
指令由操作码和操作数组成,而操作数部分通常不是直接给出操作数的数据本身,而是给出该数据的位置信息。
指令中,操作数位置信息的表示方式称为寻址方式。
所谓寻址,就是按照指令中所给出的操作数位置信息,找出操作数的数据来。
3.操作数可能的存放位置
程序存储器(或内存的代码段)中,这种操作数称为立即数。
数据存储器(或内存的数据段)中,这种操作数称为存储器操作数。
CPU的内部寄存器中,这种操作数称为寄存器操作数。
按照操作数的存放位置,将操作数的寻址方式分为三大类:♠立即数寻址
♠寄存器寻址
♠存储器寻址
二、立即数寻址方式
1.特点
–指令代码中操作数部分就是数据本身。
因此,总线操作中除取指周期外,不需要额外的取操作数周期。
2.举例
–MOV AL,80H ;
将字节数80H送入AL中。
指令代码(B0H,80H)中,80H即为操作数本身。
–MOV AX,1090H ;
将字型数1090H送到AX中。
指令代码(B8H,90H,10H)中,1090H即为操作数本身。
3.用途
立即数寻址方式主要用来对寄存器或存储器单元赋值。
4.注意事项
立即数可以为8位,也可以为16位;
立即数只能作为源操作数。
三、寄存器寻址方式
1.特点
操作数在CPU内部寄存器中。
因此,总线操作中除取指周期外,也不需要额外的取操作数周期。
2.举例
MOV AL,80H ;将字节数80H送入AL中。
指令代码(B0H,80H)中,操作码B0H中隐含了目的操作数为寄存器AL。
本条指令中,目的操作数为寄存器寻址,源操作数为立即数寻址。
OR AX,BX ;
将BX内容与AX内容相或,结果回送到AX中。
目的操作数和源操作数均为寄存器寻址。
3.用途
绝大部分操作功能都是借助于寄存器(尤其是累加器)来完成的,因此,通
常是先将立即数、存储器数据或IO接口
数据暂存与寄存器中,以便于后续指令
直接进行操作。
4.注意事项
16位操作数,寄存器可用AX、BX、CX、DX、SI、DI。必要时,也可以用SP、BP、DS、ES、
SS、CS,但CS只能做源操作数。
8位操作数,寄存器可用AH、AL、BH、BL、CH、CL、DH、DL。
四、存储器寻址方式
1.特点
操作数在数据存储器(数据段)中,指令操作数部分仅是操作数在内存中的位
置信息。
因此,总线操作中除取指周期外,还需要额外的取操作数周期。当然,取数之前,必须先计算出存放
地址。
2.举例1
MOV AX,[3100H] ;
指令代码(A1H,00H,31H)中,操作数部分直接指明操作数在数据段的存放地址,即逻辑地址为
DS:3100H。这种方式称为存储器直接寻址。
2.举例2
MOV AX,[SI] ;
将以DS为段地址、以SI为偏移地址的存储器字单元的内容送到累加器AX中。
指令代码(89H,43H)中,操作数部分间接给出操作数在数据段的存放地址,即逻辑地址为DS:
(SI),寄存器SI的内容才是操作数的偏移地址。
这种方式称为存储器间接寻址。由于间接寻址寄
存器为变址寄存器,故这种间接寻址方式又称为
存储器变址寻址。
变址寻址寄存器有SI和DI,对应的段寄存器均为DS。
2.举例3
MOV AX,[BX] ;
将以DS为段地址、以BX为偏移地址的存储器字单元的内容送到累加器AX中。
指令代码(89H,25H)中,操作数部分间接给出操作数在数据段的存放地址,即逻辑地址为DS:
(BX),寄存器BX的内容才是操作数的偏移地址。
这种方式称为存储器间接寻址。由于间接寻址寄
存器为基址寄存器,故这种间接寻址方式又称为
存储器基址寻址。
基址寻址寄存器有BX和BP,BX对应的段寄存器为DS,而BP对应的段寄存器为SS。
2.举例4——组合
MOV AX,[BX+SI+0200H] ;
将以DS为段地址、以[(BX)+(SI)+0200H]为偏移地址的存储器字单元的内容送到累加器AX中。
MOV AX,[BX+DI+34H] ;
将以DS为段地址、以[(BX)+(DI)+34H]为偏移地址的存储器字单元的内容送到累加器AX中。
MOV AX,[BP+SI+0200H] ;
将以SS为段地址、以[(BP)+(SI)+0200H]为偏移地址的存储器字单元的内容送到累加器AX中。
MOV AX,[BP+DI+34H] ;
将以SS为段地址、以[(BP)+(DI)+34H]为偏移地址的存储器字单元的内容送到累加器AX中。