8086指令格式和寻址方式

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第4章80x86指令系统教学内容本章重点介绍8086指令格式和寻址方式,包括操作数的寻址方式和转移地址的寻址方式;然后介绍8086指令系统,包括数据传送、算术运算、位操作、串操作、控制转移以及处理器控制等六大类指令。具体内容如下:1、8086/8088指令格式2、8086/8088指令系统的寻址方式3、8086/8088指令系统第4章80x86指令系统学习要求指令系统是程序员编写程序的基础,因此很好地掌握本章内容是后续进一步学习汇编语言程序设计的关键。通过本章学习,应该达到如下要求:1、了解8086/8088指令格式。2、熟练掌握8086/8088(包括后续CPU)的寻址方式。3、掌握8086/8088指令系统中的各种指令的名称、功能及对操作数寻址方式的约定。第4章80x86指令系统第4章80x86指令系统4.18086/8088指令系统4.1.18086/8088指令格式4.1.28086/8088指令系统的寻址方式4.1.38086/8088指令系统第4章80x86指令系统汇编语言程序设计过程:第一步,利用记事本输入汇编源程序,然后将扩展名改为ASM。如文件名为33.asm。第二步,利用宏汇编程序MASM对汇编源程序33.asm进行汇编,产生33.obj文件。第三步,利用LINK对33.obj进行连接,产生33.exe文件。第4章80x86指令系统4.18086/8088指令系统4.1.18086/8088指令格式用汇编语言编写的汇编语言程序输入计算机后,必须由“汇编程序”将它翻译成由机器指令(指令码)组成的机器语言程序,才能由计算机识别并执行。因此汇编语言程序需由汇编程序翻译成可执行的机器语言程序,一般来说,这一过程不必由人来干预。我们这里只介绍一下基本原理,以便在必要时也可以手工完成类似的工作。第4章80x86指令系统4.1.18086/8088指令格式计算机是通过执行指令来处理各种数据的,因此,一条指令即要指出如何处理数据,同时还应指出数据的来源、操作结果的去向。一般来说指令是由两部分组成,即操作码和操作数。在指令中操作码是不可缺少的,但操作数可以没有,也可以有一个操作数或两个操作数。操作码操作数用来描述该指令的操作对象给出该指令应完成何种操作第4章80x86指令系统8086/8088指令(编码)格式80X86CPU指令系统采用变字长的指令格式,不可能用一个简单的规则来描述指令编码格式。通常指令中包含操作码和操作数两部分。操作码表示计算机执行什么操作,由一组二进制代码表示。在汇编语言中用助记符代表。操作数可能指明了参与操作的数的本身,或规定了操作数的地址。如何寻找操作数,这就是指令的寻址方式,也是由指令编码格式指出。第4章80x86指令系统根据操作数的个数,指令格式可分为以下几种:1.无操作数控制类指令,比如“HLT”暂停指令。2.单操作数只给出一个操作数地址。该操作数可在寄存器或存储器中,或指令中直接给出立即数。比如“INCCX”3.双操作数指令指令中有两个操作数,其中一个为目的操作数,另一个为源操作数。一个操作数在寄存器中,另一个在寄存器或存储器中,或指令中直接给出立即数。不允许两个都在存储器中。第4章80x86指令系统由此可见,操作数可分为源操作数和目的操作数。源操作数:只能读取的操作数。目的操作数:即可读取又可写入(存放操作结果)的操作数。操作数又可分为两大类:数据操作数和地址操作数。第4章80x86指令系统指令长度与字长的关系指令的长度主要取决于指令操作码的长度、操作数的长度和操作数的个数。通常指令字长位数越多,所能表示的操作信息也就越多,指令功能就越丰富。但位数多则指令所占的存储空间就多,读取指令的时间就增加。字长(一般是指CPU的机器字长)是指CUP一次能够处理的二进制数位数,它都是字节长度(8位二进制数)的1、2、4或8倍,也就是8、16、32或64位。因此,指令字长也是字节的简单倍数,如一字节指令,二字节指令、三字节指令……。第4章80x86指令系统一条指令中的信息按其含义分成若干个信息段,每一信息段占一个字节或多个字节,且按一定的顺序排列,这便于CPU解释执行。如8086/8088CPU的指令系统,它采用1~6个指令字节的变字长,它包括操作码(第一字节)、寻址方式(第二字节)和操作数(第三到第六字节)三部分组成。指令格式如下:disp(低)/Data(低)disp(高)/Data(高)Data(低)Data(高)modregr/mWDOP765432100172操作码寻址方式与寄存器号位移量/立即数位移量/立即数立即数立即数第1字节第2字节第3字节第4字节第5字节第6字节第4章80x86指令系统disp(低)/Data(低)disp(高)/Data(高)Data(低)Data(高)modregr/mWDOP765432100172目的操作数源操作数源操作数目的操作数D=1D=0000001010011100101110111ALCLDLBLAHCHDHBHAXCXDXBXSPBPSIDIregW=0W=1寄存器寻址BX+SI+disp8BX+DI+disp8BP+SI+disp8BP+DI+disp8SI+disp8DI+disp8BP+disp8BX+disp8BX+SI+disp16BX+DI+disp16BP+SI+disp16BP+DI+disp16SI+disp16DI+disp16BP+disp16BX+disp16BX+SIBX+DIBP+SIBP+DISIDI直接地址BX000001010011100101110111ALCLDLBLAHCHDHBHAXCXDXBXSPBPSIDIW=0W=1寄存器寻址mod=11modr/m存储器地址有效地址的计算公式mod=00mod=01mod=10双操作数指令中各字段定义第4章80x86指令系统例:写出下面指令的机器语言编码。MOV[BX+DI-6],CL=88H、49H、FAH100010DWmodr/mregdisp8100010001111101001001001100010000100100111111010第4章80x86指令系统000000DWmodr/mregDisp-L000000110010011010001000Disp-H0000100003H81H26H08H例:写出下面指令的机器语言编码。ADDAX,[BX+DI-0826]00000011100000010010011000001000第4章80x86指令系统4.1.28086/8088的寻址方式所谓寻址方式就是寻找操作数存放地址(位置)的方法。在8086/8088系统中操作数存放的位置用以下几种:①固定寻址②操作数包含在指令字节中。即指令格式中操作数部分就是操作数本身。这种操作数叫立即数操作数。③操作数存放在CPU的某个内部寄存器中。这种操作数叫寄存器操作数。④操作数在内存的数据区中。这种操作数叫存储器操作数。包括直接寻址、寄存器间接寻址、寄存器相对寻址;基址变址寻址、基址变址相对寻址方式。⑤其它寻址方式:包括串操作指令寻址、I/O端口寻址、转移类指令寻址。第4章80x86指令系统1)固定寻址方式有些单字节指令,规定CPU对某个固定的寄存器进行。例如:十进制加法的调整指令AAA,规定被调整的数总位于AL中。该指令用来调整AL中的结果,指令编码为:37HOP00110111第4章80x86指令系统2)立即数寻址方式操作数就在指令中,当执行指令时,CPU直接从指令队列中取得立即数,而不必执行总线周期。立即数可以是8位的或16位的;只能是整数类型的源操作数;主要用来给寄存器赋初值;指令执行速度快。例如:MOVAL,80HMOVAX,1234HAL操作码字节80H存储器指令码操作码字节12H存储器AL指令码AH34H123480H80H1234第4章80x86指令系统3)寄存器寻址方式操作数在CPU的寄存器中,指令中给出寄存器名。源操作数和目的操作数均可采用寄存器寻址的方式。寻址的指令长度短;操作数就在CPU内部进行,不需要使用总线周期;指令执行速度快。例如:MOVAX,CX89C1存储器AXCX指令码(包括操作数)第4章80x86指令系统4)存储器寻址方式存储器寻址方式的操作数存放在存储器单元中。因此,要存取操作数就必须知道其存储器的单元地址。在指令中可以直接给出或间接给出操作数的地址,以达到存取操作数的目的。指令中给出的地址只是操作数的有效地址(EA),并且是放在方括号(“[]”)中。若要从存储器中存取操作数还须得到实际的地址(物理地址)。物理地址=段基址左移四位+有效地址物理地址=CSDSSSES×10H+EA第4章80x86指令系统寻找存储器操作数,必须经过总线控制逻辑电路进行存取。当EU单元需要读/写位于存储器的操作数时:①根据寻址方式(指令中的B2字节),由EU计算出操作数的偏移量,即有效地址EA;②将EA送至BIU单元,同时请求BIU执行一个总线周期;③BIU将某个段寄存器的内容左移4位,在加上EU送来的EA,形成20位的实际地址,即物理地址PA;④执行总线周期,读/写指令所需要的操作数。计算EA的通式为:EA=基地址[BX或BP]+变址值[SI或DI]+位移量[0或8位或16位]第4章80x86指令系统有效地址可以由以下三种地址分量组成:●位移量(Displacement):它是存放在指令中的一个8位或16位的数,但它不是立即数,而是一个地址。●基址(BaseAddress):它是存放在基址寄存器BX或BP中的内容。●变址(IndexAddess):它是存放在变址寄存器SI或DI中的内容。对于某条具体指令,这三个地址分量可有不同的组合。如果存在两个或两个以上的分量,那么就需要进行加法运算,求出操作数的有效地址(EA),进而求出物理地址(PA)。正是因为这三种地址分量有不同的组合,才使得对存储器操作数的寻址产生了若干种不同的方式。第4章80x86指令系统①直接寻址方式最简单,直观;指令中直接以位移量形式,给出操作数的有效地址EA;执行速度快,主要用于存取位于存储器中的简单变量。MOVAL,[1064H],设当前(DS)=2000H21064H(DS)*10H=20000H20000H21064HAL操作码641045…代码段数据段4545+1064H第4章80x86指令系统如果没有特殊指明,直接寻址方式的操作数一般在存储器的数据段中,即隐含的段寄存器是DS。但是8086/8088也允许段超越,此时需要在指令中特别标明,方法是在有关操作数的前面写上操作数所在段的段寄存器名,再加上冒号。例如,若以上指令中源操作数不在数据段而在附加数据段中,则指令应写为如下形式:MOVAL,ES:[1064H]在汇编语言指令中,可以用符号地址来表示位移量。例如:MOVAL,[value]或MOVAL,value此时value为存储单元的符号地址。第4章80x86指令系统5040……MAX②寄存器间接寻址-基址寻址方式设当前(DS)=3000H,(BP)=2000H,(BX)=1000H,(SS)=4000HMOVAX,[BP]40000H(SS)*10H=40000H(BP)=2000H+42000H42000H40505040……64HMAL30000HDS30000HBX1000H+31000H31000H64H64HMOV[BX],AL第4章80x86指令系统③寄存器间接寻址-变址寻址方式MOVCL,[SI]21000H641045…代码段数据段操作码…CL45+21000HSI1000HDS20000H20000HEA=(DI)(SI)第4章80x86指令系统④基址加变址寻址方式MOVAH,[BP+SI]56H……MAH40000HSS:40000HBP:2000H+43200H43200HSI:1200H56H56HEA=(BX)(BP)+(DI)(SI)第4章80x86指令系统⑤基址加变址加位移量MOV[BX+DI+1234H],AHEA=(BX)

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功