您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第3章 指令系统和寻址方式
汇编语言程序设计第3章指令系统和寻址方式◆汇编指令格式◆寻址方式◆8086指令系统汇编语言程序设计3.1汇编指令格式计算机中的一条指令通常包含两部分:依据操作数的个数划分,80X86CPU指令系统中的指令格式最常用的有:双操作数指令、单操作数指令和无操作数指令。操作码操作数汇编语言程序设计1、双操作数指令汇编格式及操作规定格式:[标号:]操作符OPD,OPS[;注释]操作规定:(1)OPD与OPS应为同种操作类型且类型明确,即同为字节类型或字类型。(2)OPD不能是立即数。(3)OPS和OPD不能同时为存储器操作数,即:或者是OPS和OPD中至少有一个为寄存器操作数,或者是OPD为存储器操作数,OPS为立即数。(4)操作结束后,运算结果存入OPD中,OPS内容不变。汇编语言程序设计2、单操作数指令汇编格式及操作规定格式:[标号:]操作符OPD[;注释]操作规定:(1)OPD类型必须明确即为字节类型或字类型,不能是模糊类型。(2)操作对象为目的操作数,操作结束后结果存入OPD中。(3)OPD不能是立即数,只能是寄存器操作数或存储器操作数。汇编语言程序设计3、无操作数指令汇编格式及操作规定格式:[标号:]操作符[;注释]操作规定:指令中只有操作码,不含操作数,这种指令有两种可能:(1)无需任何操作数。如停机指令、空操作指令等。(2)所需操作数是隐含指定的,操作时取固定操作数进行操作。返回汇编语言程序设计3.2寻址方式寻找指令中所需操作数存放地址的方式或程序转移时寻找转移地址的方式称为寻址方式,因而寻址方式分为两大类,一类是数据寻址方式,另一类是转移地址寻址方式。由于80X86指令涉及四种操作数:立即操作数、寄存器操作数、存储器操作数和隐含操作数,因此,数据寻址方式又可对应四种寻址方式,即:立即寻址、寄存器寻址、存储器寻址和固定寻址。汇编语言程序设计1、立即寻址汇编语言程序设计2、寄存器寻址此寻址方式的操作数直接存放在由指令指明的寄存器中。在汇编指令中直接书写寄存器名,如16位寄存器操作数可以是AX、BX、CX、DX、SI、DI、BP、SP、DS、ES、SS、CS等;8位寄存器操作数可以是AH、AL、BH、BL、CH、CL、DH、DL。汇编语言程序设计3、存储器寻址指令中给出的是存储单元的地址或产生存储单元地址的表达式。有效地址EA是由3个地址分量的某种组合求得,这3个地址分量是:位移量、基址、变址。这3个地址分量的不同组合,使形成有效地址EA的方法不同,相应有以下5种不同的存储器操作数寻址方式。汇编语言程序设计(1)直接寻址直接寻址是最简单的存储器寻址,这种寻址,操作数的有效地址EA由指令直接给出。它主要用于存取简单变量。汇编格式:(a)[常量](b)变量或含有变量的表达式汇编语言程序设计(2)寄存器间接寻址此寻址方式中,操作数的有效地址EA存放在SI、DI、BX或BP四个寄存器之一中,即:EA=(BX)或(BP)或(SI)或(DI)。汇编格式:[R](其中R是寄存器SI、DI、BX、BP之一)SI、DI、BX、BP在这里叫间址寄存器。若用BX、SI或DI间址寻址时,则操作数默认在数据段中,且用DS内容作为段首址,操作数的物理地址为:(BX)PA=(DS)×16+(SI)(DI)汇编语言程序设计(3)寄存器相对寻址此寻址操作数的有效地址EA是指令中指定的基址寄存器的内容与指令中给出的位移量之和,即:EA=(BX)+位移量(BP)汇编格式:(a)Disp[BX]或Disp[BP](b)[BX+Disp]或[BP+Disp]该寻址方式中若以BX作为基址寄存器,则操作数默认在数据段中;若以BP作为基址寄存器,则操作数默认在堆栈段中,因而操作数的物理地址为:PA=(DS)×16+(BX)+Disp(SS)×16+(BP)+Disp汇编语言程序设计(4)基址加变址寻址汇编语言程序设计(5)相对基址加变址寻址此寻址方式中操作数的有效地址EA是指令中的基址寄存器的内容、变址寄存器的内容、位移量三个地址分量之和,即:EA=(BX)+(SI)+位移量(BP)+(DI)汇编格式:(a)Disp[BX或BP+SI或DI](b)[BX或BP+SI或DI+Disp]该寻址方式中若基址寄存器采用BX,则操作数默认在数据段中;若基址寄存器采用BP,则操作数默认在堆栈段中,因而操作数的物理地址为:PA=(DS)×16+(BX)+(SI)+Disp(DI)(SS)×16+(BP)+(SI)+Disp(DI)返回汇编语言程序设计3.38086指令系统8086指令系统按功能可分为六大类:(1)数据传送类指令(2)算术运算类指令(3)位操作指令(4)串操作指令(5)控制转移指令(6)处理器控制指令8086指令按操作数个数可划分为三种类型:(1)双操作数指令(2)单操作数指令(3)无操作数指令学习汇编指令应从以下几方面着重理解掌握:(1)学习指令格式;(2)掌握指令中操作数的寻址方式及寻址方式的搭配规则;(3)掌握指令的功能及指令执行后对条件码的影响;(4)学习如何正确运用指令。汇编语言程序设计一、数据传送指令1.通用数据传送指令(1)传送指令MOV格式:MOVOPD,OPS功能:把源操作数传送到目的操作数。即:OPD←(OPS)说明:①源操作数和目的操作数的操作类型必须明确且一致;当指令中只有一个操作数的类型明确时,另一个操作数被视为同一类型;当两操作数类型均不明确时,必须用“BYTEPTR”或“WORDPTR”将一个存储器操作数定义为字节或字类型。②指令执行后,源操作数内容不变。③指令执行后,对标志寄存器各位无影响。④源操作数可以是通用寄存器、段寄存器、存储器和立即数;目的操作数也可以是通用寄存器、段寄存器、存储器,但立即数、CS段寄存器不能作为目的操作数。源操作数和目的操作数不能同时为存储器操作数。汇编语言程序设计用一条MOV指令能实现:(a)立即数传送到通用寄存器或存储单元如MOVDL,’a’、MOVAX,1FA4H(b)寄存器之间的传送如MOVAX,BX、MOVAL,DH、MOVDS,AX(c)寄存器与存储单元之间的传送如MOVDL,BUFBYTEMOVWORDPTR[BX+SI],AX由于MOV指令中只允许一个操作数在存储器中,因此用一条MOV指令无法完成两个存储单元之间的数据传送,但可以用二条指令来实现。【例3.9】把BUFWORD1字单元内容传送到BUFWORD2字单元中,可用以下指令完成:MOVAX,BUFWORD1MOVBUFWORD2,AX汇编语言程序设计(2)交换指令XCHG格式:XCHGOPD,OPS功能:源操作数和目的操作数的内容相互交换。即:(OPD)←→(OPS)说明:该指令与MOV指令相似,但在功能上有两点区别,其一,该指令不允许使用立即数和段寄存器作为操作数;其二,该指令改变源操作数的内容。(3)查表转换指令XLAT格式:XLAT或XLATOPS功能:将(BX)为首址(AL)为位移量的字节存储单元中的数据传送到AL中。即:AL←([BX+AL])字节汇编语言程序设计2.地址传送指令地址传送指令主要用于将存储器操作数地址(偏移地址、段地址)传送给指定的寄存器。它包括3条指令:LEA、LDS和LES。(1)传送有效地址指令LEA格式:LEAREG16,OPS功能:将源操作数的有效地址EA传送给目的操作数指定的16位通用寄存器。说明:①源操作数必须是存储器操作数,即OPS采用存储器寻址;目的操作数必须是一个16位通用寄存器。②本指令对标志位无影响。③该指令通常用来建立内存储器的寄存器指针。汇编语言程序设计(2)传送偏移地址及数据段首址指令LDS格式:LDSREG16,OPS功能:将由源操作数确定的双字存储单元的内容传送给DS及目的操作数指定的16位通用寄存器中,其中高字单元的内容送给DS,低字单元的内容送给REG16。说明:①源操作数必须是双字存储器操作数,即:OPS采用存储器寻址,寻找到相继4个字节的存储单元,低字单元中存放偏移地址,高字单元中存放段首地址;目的操作数必须是一个16位通用寄存器,通常特定为SI。②本指令不影响标志位。(3)传送偏移地址及附加段首址指令LES格式:LESREG16,OPS功能:将由源操作数确定的双字存储单元的内容传送给ES及目的操作数指定的16位通用寄存器中,其中高字单元的内容送给ES,低字单元的内容送给REG16。说明:同LDS指令。汇编语言程序设计3.标志位传送指令标志位传送指令有4条指令,即:LAHF、SAHF、PUSHF和POPF。(1)标志送AH指令LAHF格式:LAHF功能:将标志寄存器低8位的内容送入AH寄存器。即:AH←(FLAGS)7-0,该指令的执行不影响标志位。(2)AH标志送指令SAHF格式:SAHF功能:将AH寄存器的内容送入标志寄存器低8位,高8位保持不变。该指令用于设置或恢复SF、ZF、AF、PF、CF五个标志位,该指令的执行只影响标志寄存器的低8位,对高8位(即OF、DF、IF、TF)标志位无影响。从指令的功能上可看出,SAHF和LAHF为互逆过程。汇编语言程序设计(3)标志进栈指令PUSHF格式:PUSHF功能:将标志寄存器的内容压入堆栈。(4)标志出栈指令POPF格式:POPF功能:将栈顶字单元内容弹出到标志寄存器中。该指令的执行影响标志位。PUSHF和POPF互为逆过程。标志位传送指令中SAHF和POPF指令将直接影响标志寄存器的内容。利用这一特性,可以方便地改变标志寄存器中指定位的状态.数据传送类指令还包括输入/输出专用指令,在PC机里所有I/O端口与CPU之间的通信都由IN和OUT指令实现,由IN指令完成从I/O端口到CPU的信息传送,由OUT指令完成从CPU到I/O端口的信息传送。汇编语言程序设计二、算术运算指令算术运算指令用来执行加、减、乘、除四则运算。它包括无符号数、有符号数的二进制算术运算指令和十进制算术运算调整指令。1.二进制数算术运算指令(1)加法运算指令加法运算指令包括ADD、ADC的INC三条指令。①加法指令ADD格式:ADDOPD,OPS功能:将目的操作数与源操作数相加,结果存入目的地址中,而源操作数不变。即:OPD←(OPD)+(OPS)。说明:该指令的源操作数或在通用寄存器或在存储单元中,也可以是立即数,而目的操作数只能在通用寄存器或存储单元中,不能是立即数,且两操作数不能同时为存储器操作数;操作数可以是字节或字,且两操作数的类型明确并一致。该指令相加后,根据得到的结果设置标志寄存器的OF、SF、ZF、CF、AF和PF标志位。ADD指令执行后对标志位的影响及作用如下,这里我们只重点说明OF、CF、SF和ZF四个标志位。汇编语言程序设计OF:当两个有符号数相加时,若两个操作数的符号相同,而结果的符号与之相反,则OF=1,否则,其余情况OF=0。当OF=1时,说明两个有符号数相加产生了溢出,即和的值超出了有符号数的有效范围。在把操作数视为有符号数时,可通过该标志了解加法结果是否正确。CF:运算过程中当最高位产生进位时,则CF=1,否则,CF=0。当CF=1时,说明运算结果超出了无符号数的表示范围。在把操作数视为无符号数时,可通过该标志了解加法结果是否正确。SF:运算结果的最高位为1,则SF=1,否则,SF=0。ZF:运算结果为零时,则ZF=1;否则,ZF=0。汇编语言程序设计②带进位加法指令ADC格式:ADCOPD,OPS功能:与ADD指令基本相同,惟一区别是将该指令执行前的CF值加至目的操作数中。即:OPD←(OPD)+(OPS)+CF说明:该指令与ADD指令在功能上及结果对标志位影响上基本相同。该指令主要用于多字节的加法运算。③加1指令INC格式:INCOPD功能:将目的操作数加1后送回目的地址中,并根据执行结果设置标志位OF、SF、ZF、AF、PF,但不影响CF位。说明:该指令的操作数可以是字或字节且类型必须明确。其操作数只能在通用寄存器或存储单元中,不能是立即数。该指令执行后对OF、SF、ZF、AF、PF标志位的影响与ADD指
本文标题:第3章 指令系统和寻址方式
链接地址:https://www.777doc.com/doc-6368567 .html