《3-8086指令系统及编程应用-1.ppt》由会员分享,可在线阅读,更多相关《3-8086指令系统及编程应用-1.ppt(224页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章第三章 8086 指令系统及编程应用指令系统及编程应用n n 8086的的寻址方式寻址方式(重点重点)存储器寻址、非存储器寻址存储器寻址、非存储器寻址存储器寻址、非存储器寻址存储器寻址、非存储器寻址n n 8086的指令系统(的指令系统(重点重点)数据传送、算术运算、逻辑和移位、串操作、数据传送、算术运算、逻辑和移位、串操作、数据传送、算术运算、逻辑和移位、串操作、数据传送、算术运算、逻辑和移位、串操作、控制转移、控制转移、控制转移、控制转移、处理器控制处理器控制处理器控制处理器控制 n n 编程应用编程应用第一节第一节 8086的的寻址方式寻址方式一、基本概念一、基本概念1、指令系统概
2、念、指令系统概念计算机通过执行指令序列来解决问题,每种计算机都有一组计算机通过执行指令序列来解决问题,每种计算机都有一组指令集提供用户使用,这组指令集提供用户使用,这组指令集就称为计算机的指令系统指令集就称为计算机的指令系统。2、指令组成指令组成计算机中指令由计算机中指令由操作码字段操作码字段和和操作数字段操作数字段两部分组成。两部分组成。操作码字段操作码字段-指示计算机要指示计算机要执行的操作执行的操作,操作数字段操作数字段-指出在指令执行操作过程中所需要的操作数;指出在指令执行操作过程中所需要的操作数;操作数本身操作数本身;操作数地址或是地址的一部分;操作数地址或是地址的一部分;指向操作数
3、指向操作数地址的指针。地址的指针。3、指令的一般格式、指令的一般格式:操作码字段操作码字段:在机器里只需对某种操作指定确定的二进制代码。在机器里只需对某种操作指定确定的二进制代码。通常用指令的第一个字节表示,不够可以占第二个字节中通常用指令的第一个字节表示,不够可以占第二个字节中的的3位。位。操作数字段操作数字段:操作数字段可以有一个操作数字段可以有一个,二个或三个地址指令。二个或三个地址指令。例:例:INCCXADDAX,BX4、操作数的存放、操作数的存放操作数的存放不外乎三种情况:操作数的存放不外乎三种情况:()()操作数包含在指令中操作数包含在指令中例:例:MOVAL,08H-立即数立即
4、数()()操作数包含在的一个内部寄存器中操作数包含在的一个内部寄存器中例:例:INCCX-寄存器寻址寄存器寻址()操作数在内存数据区()操作数在内存数据区操作数字段包含着此操作数字段包含着此操作数的内存地址操作数的内存地址。内存地址由两部分组成:内存地址由两部分组成:段的基地址段的基地址段内偏移量段内偏移量有效地址(有效地址(EffectiveAddress)段内偏移量段内偏移量为适应各种数据结构的需要,可以为适应各种数据结构的需要,可以有几个部分有几个部分组成组成,所以也把它称为,所以也把它称为有效地址有效地址。EA根据不同寻址方式由不同的构成。根据不同寻址方式由不同的构成。寻址方式寻址方式
5、如何寻找内存操作数。如何寻找内存操作数。不同寻址方式实质上是构成它段内的偏移量的方法不同不同寻址方式实质上是构成它段内的偏移量的方法不同。二、操作数的寻址方式二、操作数的寻址方式(一)立即寻址(一)立即寻址非存储器寻址非存储器寻址(二)寄存器寻址方式(二)寄存器寻址方式(三)直接寻址(三)直接寻址(四)寄存器间接寻址方式四)寄存器间接寻址方式(五)寄存器相对寻址方式(变址寻址)五)寄存器相对寻址方式(变址寻址)存储器寻址存储器寻址(六)基址变址寻址方式(六)基址变址寻址方式(七)相对基址变址寻址方式七)相对基址变址寻址方式端口寻址方式在指令中介绍端口寻址方式在指令中介绍(一)(一)立即寻址立即
6、寻址操作数直接存放在指令中,紧跟在操作码之后操作数直接存放在指令中,紧跟在操作码之后,作为指令,作为指令的一部分,存放在代码段里,这种操作数称为立即数。的一部分,存放在代码段里,这种操作数称为立即数。立即数可以是立即数可以是位位或或16位位的。的。16位立即数:高位字节放在高地址位立即数:高位字节放在高地址,低位字节放在低地址低位字节放在低地址。使用场合:使用场合:经常用于给寄存器赋初值。经常用于给寄存器赋初值。注意:只能用于源操作数字段注意:只能用于源操作数字段,不能用于目的操作数字段。,不能用于目的操作数字段。例:例:MOVAL,05H指令执行后指令执行后:(AL)=05H例:例:MOVA
7、X,3064H指令执行后指令执行后:(AX)=3064H立即寻址方式立即寻址方式(二二)寄存器寻址方式寄存器寻址方式操作数在寄存器中,指令指定寄存器号。操作数在寄存器中,指令指定寄存器号。对于位操作数,寄存器可以是对于位操作数,寄存器可以是:,,,。以及段寄存器。以及段寄存器。对于位操作数,寄存器可以是对于位操作数,寄存器可以是:,。不需要访问存储器的不需要访问存储器的运算速度较高运算速度较高。例:例:指令执行前指令执行前:(AX)3064(SS)1234 MOVSS,AX指令执行后指令执行后:(SS)3064H(AX)保持不变。保持不变。指令执行前:指令执行前:指令执行后指令执行后:寄存器寻
8、址方式寄存器寻址方式(三)直接寻址(三)直接寻址操作数操作数地址的位偏移量地址的位偏移量,直接包含在指令中,但操,直接包含在指令中,但操作数一般存放在数据段中,必须先求出操作数的物理地址,作数一般存放在数据段中,必须先求出操作数的物理地址,然后再访问存储器才能取得操作数。然后再访问存储器才能取得操作数。物理地址物理地址:PA16d(DS)+EAIBMPC机允许数据存放在数据段以外的其它段中。此时机允许数据存放在数据段以外的其它段中。此时应在指令中应在指令中指定段跨越(可以是指定段跨越(可以是CS,SS,ES)。)。例:例:MOVAX,3100H(DS)=6000H,(63100H)=3050H
9、则则:(AX)=3050HMOVAX,VALUE或或MOVAX,VALUEVALUE有效操作数单元的有效操作数单元的符号地址。符号地址。如:如:VALUE在附加段中,在附加段中,则应指定段跨越。则应指定段跨越。MOVAX,ES:VALUE或或MOVAX,ES:VALUE直接寻址方式直接寻址方式注意:注意:(1)直接寻址方式适用于处理单个变量。)直接寻址方式适用于处理单个变量。(2)直接寻址方式)直接寻址方式隐含的段寄存器是隐含的段寄存器是DS,段段跨跨越越,即即允允许许使使用用CS、SS、ES作作为为段段寄寄存存器器,必必须须在在指指令中特别标明。令中特别标明。(3)IBMPC机机中中规规定定
10、双双操操作作数数指指令令必必须须有有一一个个操操作作数数使使用用寄寄存存器器方式,这就是常常先要把一个变量送到寄存器去的原因。方式,这就是常常先要把一个变量送到寄存器去的原因。例:要处理某存放在存储器里的变量,可以用直接寻址方式例:要处理某存放在存储器里的变量,可以用直接寻址方式把变量先取到一个寄存器中再作处理。把变量先取到一个寄存器中再作处理。(四四)寄存器间接寻址方式寄存器间接寻址方式操作数在存储器中操作数在存储器中,操作数地址的操作数地址的16位偏移量包含在:位偏移量包含在:BP、BX、SI、DI中。中。1、若选择、若选择SI、DI、BX作为间接寻址作为间接寻址操作数一般在现行数据段区域
11、中,用操作数一般在现行数据段区域中,用(DS)作为段地址。作为段地址。即操作数物理地址为:即操作数物理地址为:物理地址物理地址PA=16d(DS)+(BX)物理地址物理地址PA=16d(DS)+(SI)物理地址物理地址PA=16d(DS)+(DI)例:例:MOVBX,DI(DS)=6000H(DI)=2000HPA=62000H(62000H)=50A0H(BX)=50A0H寄存器间接寻址方式寄存器间接寻址方式MOVBX,DI2、若选择、若选择BP寄存器作为间接寻址寄存器作为间接寻址操作数在堆栈段区域中,用操作数在堆栈段区域中,用SS寄存器的内容作为段地址。寄存器的内容作为段地址。操作数物理地
12、址操作数物理地址:PA=16d(SS)+(BP)例:例:MOVBP,AX执行前:执行前:(SS)=1000H,(BP)=3000H,(AX)=1234H执行后:执行后:PA=13000H(13000H)=1234H寄存器间接寻址方式寄存器间接寻址方式MOVBP,AX3、用、用SI、DI、BX、BP作为间接寻址允许段跨越作为间接寻址允许段跨越指令中可以指定段跨越前缀来取得其他段中的数据。指令中可以指定段跨越前缀来取得其他段中的数据。例:例:MOVES:DI,AXMOVDX,DS:BP这种寻址方法可以用于表格处理。这种寻址方法可以用于表格处理。(五五)寄存器相对寻址方式(变址寻址)寄存器相对寻址方
13、式(变址寻址)操作数的操作数的有效地址是一个基址或变址寄存器的内容和指令中指有效地址是一个基址或变址寄存器的内容和指令中指定的定的8位或位或16位位移量之和。位位移量之和。8086/8088CPU中有中有两个变址寄存器两个变址寄存器:源变址寄存器源变址寄存器SI;目的变址寄存器目的变址寄存器DI。操作数一般在内存的数据段中,但操作数一般在内存的数据段中,但允许段跨越允许段跨越。形成物理地址有二种方式:形成物理地址有二种方式:例:例:MOVAX,COUNTBP或或MOVAX,COUNT+BP或或MOVAX,COUNT+BPCOUNT为为16位位移量。位位移量。指令执行前指令执行前:(SS)=50
14、00H,(BP)=3000H,COUNT=2040H,(AX)=1234H指令执行后指令执行后:EA=5040HPA=55040H(55040H)=5548H(AX)=5548H寄存器相对寻址方式寄存器相对寻址方式MOVAX,COUNTBP用途:这种寻址方式同样用于用途:这种寻址方式同样用于表格处理表格处理。表格首地址表格首地址COUNT修改基址或变址寄存器来取得表格中的值。修改基址或变址寄存器来取得表格中的值。例:某数据表的首地址为例:某数据表的首地址为COUNT欲读取表中第欲读取表中第10个数据个数据,存放到(存放到(AL)中。中。第第10个数据的有效地址个数据的有效地址:EA=COUNT
15、+9MOVSI,09HMOVAL,SI+COUNT*直接变址寻址方式也可以直接变址寻址方式也可以使用段跨越前缀使用段跨越前缀MOVDL,ES:STRINGSI(六六)基址变址寻址方式基址变址寻址方式操作数的操作数的有效地址是一个基址寄存器和一个变址寄存器的有效地址是一个基址寄存器和一个变址寄存器的内容之和内容之和,基址寄存器名和变址寄存器名均有指令指定。,基址寄存器名和变址寄存器名均有指令指定。除有段跨越前缀之外,形成物理地址有二种方式:除有段跨越前缀之外,形成物理地址有二种方式:例:例:MOVAX,BXSI或或MOVAX,BX+SI执行指令前执行指令前:(DS)=3200H,(BX)=045
16、6H,(SI)=1094H(334EAH)=4567H执行指令后执行指令后:EA=14EAHPA=334EAH(AX)=4567H基址加变址寻址方式基址加变址寻址方式MOVAX,BX+SI用途:用途:这种寻址方式同样适用于数组或表格处理。这种寻址方式同样适用于数组或表格处理。表格首地址表格首地址基址寄存器中基址寄存器中,用变址寄存器来访问数组中的元素。用变址寄存器来访问数组中的元素。二个寄存器都能修改,二个寄存器都能修改,所以比直接变址方式更灵。所以比直接变址方式更灵。使用段跨越前缀格式使用段跨越前缀格式:MOVAX,ES:BXSI(七)相对基址变址寻址方式(七)相对基址变址寻址方式操作数操作
17、数有效地址是一个基址寄存器和一个变址寄存器的有效地址是一个基址寄存器和一个变址寄存器的内容和内容和8位或位或16位位移量之和位位移量之和。形成物理地址有二种方式:形成物理地址有二种方式:例:例:MOVAX,MASKBXDIMOVAX,MASKBX+DIMOVAX,MASX+BX+DI执行指令前执行指令前:(DS)=3000H(BX)=1346H(DI)=0500HMASK=1234H(32A7AH)=4050H执行指令后执行指令后:EA=2A7AHPA=32A7AH(AX)=4050H相对基址加变址相对基址加变址MOVAX,MASK+BX+DI用途用途:这种寻址方式为这种寻址方式为堆栈处理堆栈
18、处理提供方便:提供方便:(BP)栈顶(一般栈顶(一般BP可指向栈顶)可指向栈顶)从栈顶到数组的首地址可以用位移量表示从栈顶到数组的首地址可以用位移量表示(MASK).变址寄存器(变址寄存器(SI)或(或(DI)指向数组中某个元素。指向数组中某个元素。第二节第二节8086的指令系统的指令系统8086的指令系统中共有的指令系统中共有92种基本指令。种基本指令。可以分成可以分成6个功能组:个功能组:1数据传送数据传送2算术运算算术运算3逻辑运算和移位指令逻辑运算和移位指令4串操作串操作5控制转移控制转移6处理器控制处理器控制8086指令助记符表指令助记符表8086指令助记符表(续)指令助记符表(续)
19、一一 数据传送指令数据传送指令功能:功能:负责把负责把数据数据、地址地址或或立即数立即数传传送到送到寄存器或存储单元寄存器或存储单元。特点:特点:它是计算机最基本、最重要的一种操作,使用比例最高。它是计算机最基本、最重要的一种操作,使用比例最高。种类:种类:通用传送指令:通用传送指令:通用传送指令:通用传送指令:MOVMOV,PUSHPUSH,POPPOP,XCHG,XLATXCHG,XLAT。输入输出指令输入输出指令输入输出指令输入输出指令:IN,OUTIN,OUT。目的地址传送指令目的地址传送指令目的地址传送指令目的地址传送指令:LEA,LDS,LESLEA,LDS,LES 标志传送指令标
20、志传送指令标志传送指令标志传送指令:LAHF,SAHF,PUSHF,POPFLAHF,SAHF,PUSHF,POPF除除SAHF和和POPF指令外,对标志位没有影响指令外,对标志位没有影响。(一)通用传送指令(一)通用传送指令(一)通用传送指令(一)通用传送指令通用传送指令(除了通用传送指令(除了通用传送指令(除了通用传送指令(除了XCHGXCHG以外)是唯一允许以段寄存器以外)是唯一允许以段寄存器以外)是唯一允许以段寄存器以外)是唯一允许以段寄存器为操作数指令。为操作数指令。为操作数指令。为操作数指令。通用传送指令包括:通用传送指令包括:1、MOV2、PUSHPOP3、XCHG4、XLAT1
21、MOV dest,src;(dest)(src)目的目的源源目的目的源源功能:功能:功能:功能:把一个字节把一个字节(B)或一个字(或一个字(W)操作数由源传送至目的。操作数由源传送至目的。实现实现:寄存器寄存器寄存器寄存器/存储器之间;存储器之间;立即数立即数寄存器寄存器/存储器存储器寄存器寄存器/存储器存储器段寄存器之间的数据传送。段寄存器之间的数据传送。通用数据传送指令能实现:通用数据传送指令能实现:CPU内部寄存器之间的数据的任意传送内部寄存器之间的数据的任意传送(除了码段寄存器(除了码段寄存器CS和指令指针和指令指针IP以外)。以外)。段寄存器之间不能传送。段寄存器之间不能传送。段寄
22、存器之间不能传送。段寄存器之间不能传送。例:例:MOVDL,CH;8位寄存器位寄存器8位寄存器位寄存器MOVAX,DX;16位寄存器位寄存器16位寄存器位寄存器MOVSI,BPMOVDS,BX;通用寄存器通用寄存器段段寄存器寄存器MOVAX,CS;段段寄存器寄存器通用寄存器通用寄存器立即数传送至立即数传送至CPU内部通用寄存器组内部通用寄存器组(AX、BX、CX、DX、BP、SP、SI、DI)。)。用于给寄存器赋初值。用于给寄存器赋初值。不能直接给段寄存器赋值(立即数)不能直接给段寄存器赋值(立即数)不能直接给段寄存器赋值(立即数)不能直接给段寄存器赋值(立即数)例:例:MOVCL,04H;立
23、即数立即数8位位寄存器寄存器 MOVAX,03FFH;立即数立即数16位位寄存器寄存器为什么加为什么加为什么加为什么加WORDPTRWORDPTR,BYTEPTRBYTEPTR?MOVWORDPTRSI,057BH;立即数立即数存储器存储器MOVBYTEPTRMEM,5;立即数立即数存储器存储器CPU内部寄存器(除内部寄存器(除CS和和IP外)外)与存储器(所有寻址方式)之间数据传送。与存储器(所有寻址方式)之间数据传送。可以实现一字节或一个字的传送。可以实现一字节或一个字的传送。存储单元之间不能直接传送存储单元之间不能直接传送存储单元之间不能直接传送存储单元之间不能直接传送 例:例:MOVM
24、EM,AX;累加器累加器存储器存储器,直接寻址直接寻址MOVMEM,DS;段寄存器段寄存器存储器,存储器,直接寻址直接寻址MOVDISPBX,CX;寄存器寄存器存储器,存储器,变址寻址变址寻址MOVAX,DISPSI;存储器存储器累加器,累加器,变址寻址变址寻址MOVDS,MEM;存储器存储器段寄存器,段寄存器,直接寻址直接寻址MOVCX,DISPBXSI;存储器存储器累加器,累加器,相对基址加变址相对基址加变址 注意注意注意注意:(1 1)不能用一条)不能用一条)不能用一条)不能用一条MOVMOV指令实现以下传送。指令实现以下传送。指令实现以下传送。指令实现以下传送。j存储单元之间的传送存储
25、单元之间的传送存储单元之间的传送存储单元之间的传送MOVMEM2,MEM1错。错。MOVAX,MEM1MOVMEM2,AX对。对。kk 立即数送段寄存器立即数送段寄存器立即数送段寄存器立即数送段寄存器例例:MOVDS,2000H错。错。MOVAX,2000HMOVDS,AX对。对。l段寄存器之间的传送段寄存器之间的传送段寄存器之间的传送段寄存器之间的传送MOVES,DS;错错MOVAX,DSMOVES,AX;对对。注意注意注意注意CSCS和和和和IPIP的使用的使用的使用的使用CSCS和和和和IPIP不能作为目标操作数,不能作为目标操作数,不能作为目标操作数,不能作为目标操作数,CSCS可以作
26、为源操作数。可以作为源操作数。可以作为源操作数。可以作为源操作数。例:例:MOVCS,AX;错错MOVAX,CS;对对。MOVIP,AX;错错MOVAX,IP;对。对。P51 挑错挑错(2 2)段地址的默认段地址的默认段地址的默认段地址的默认BX、SI、DI间址默认段地址为间址默认段地址为DS,BP间址默认段地址间址默认段地址SS。(3 3)凡是遇到给凡是遇到给凡是遇到给凡是遇到给SSSS赋值指令,系统自动禁止外部中断,执行赋值指令,系统自动禁止外部中断,执行赋值指令,系统自动禁止外部中断,执行赋值指令,系统自动禁止外部中断,执行本条指令和下条指令,恢复对本条指令和下条指令,恢复对本条指令和下
27、条指令,恢复对本条指令和下条指令,恢复对SSSS寄存器赋值前的中断开放情况。寄存器赋值前的中断开放情况。寄存器赋值前的中断开放情况。寄存器赋值前的中断开放情况。这样做为了允许程序员连续用两条指令分别对这样做为了允许程序员连续用两条指令分别对SS和和SP寄寄存器赋值,同时又防止堆栈空间变动过程出现中断。存器赋值,同时又防止堆栈空间变动过程出现中断。*在修改在修改在修改在修改SSSS和和和和SPSP的指令之间不要插入其他指令。的指令之间不要插入其他指令。的指令之间不要插入其他指令。的指令之间不要插入其他指令。(4 4)所有通用传送指令不影响标志位所有通用传送指令不影响标志位所有通用传送指令不影响标
28、志位所有通用传送指令不影响标志位(除(除SAHF、POPF以外)。以外)。MOVMOV指令应用指令应用指令应用指令应用例:例:实现将实现将AREA1开始的开始的100个数据传送到个数据传送到AREA2开始的单元。开始的单元。AREA1:AREA2:100个数据个数据分析题意:分析题意:可以用可以用200条条MOV指令来完成指令来完成100个数据传送,个数据传送,指令操作重复,每个数据传送后的地址是变化的。指令操作重复,每个数据传送后的地址是变化的。可以利用循环,可以利用循环,但每循环一次要修改地址(源地址和目的地址),但每循环一次要修改地址(源地址和目的地址),必须把地址放在寄存器当中,用必须
29、把地址放在寄存器当中,用寄存器间接寻址来寻找操作数寄存器间接寻址来寻找操作数.得到如下程序:得到如下程序:MOVSI,OFFSETOFFSETAREA1MOVDI,OFFSETOFFSETAREA2MOVCX,100AGAIN:MOVAL,SIMOVDI,ALINCSIINCSI;修改地址指针修改地址指针修改地址指针修改地址指针INCDIINCDI;修改地址指针修改地址指针修改地址指针修改地址指针DECCXDECCX;修改个数修改个数修改个数修改个数JNZAGAIN(2)(2)堆栈操作指令堆栈操作指令堆栈操作指令堆栈操作指令 入栈指令入栈指令入栈指令入栈指令PUSHPUSH格式:格式:PUSH
30、src;(SP)(SP)-2(SP)+1,(SP)(src)把一个字从源操作数把一个字从源操作数把一个字从源操作数把一个字从源操作数由由由由SPSP指向堆栈顶部。指向堆栈顶部。指向堆栈顶部。指向堆栈顶部。操作如:操作如:PUSHAX 出栈指令出栈指令出栈指令出栈指令 POPPOP格式:格式:POPdest;(dest)(SP)+1,(SP)(SP)(SP)+2把现行把现行把现行把现行SPSP所指向堆栈顶部的一个字所指向堆栈顶部的一个字所指向堆栈顶部的一个字所指向堆栈顶部的一个字 指定的目的操作数,指定的目的操作数,指定的目的操作数,指定的目的操作数,同时进行修改堆栈指针的操作。同时进行修改堆栈
31、指针的操作。同时进行修改堆栈指针的操作。同时进行修改堆栈指针的操作。操作如:操作如:POPBX应用时注意:应用时注意:应用时注意:应用时注意:堆栈操作都按字操作。堆栈操作都按字操作。PUSH,POP指令的操作数可能有三种:指令的操作数可能有三种:寄存器(通用寄存器,地址指针,变址寄存器)寄存器(通用寄存器,地址指针,变址寄存器),段寄存器段寄存器(CS除外,除外,PUSHCS合法,合法,POPCS非法)非法),存储器。存储器。执行执行PUSH指令指令,(SP)-2(SP),低字节放在低地址,高字节放在高地址。低字节放在低地址,高字节放在高地址。SP总是指向栈顶总是指向栈顶堆栈工作原则堆栈工作原
32、则后进先出。后进先出。PUSH,POPPUSH,POP指令应该成对使用,保持堆栈原有状态。指令应该成对使用,保持堆栈原有状态。指令应该成对使用,保持堆栈原有状态。指令应该成对使用,保持堆栈原有状态。堆栈最大容量即为堆栈最大容量即为SP的初值与的初值与SS之间的差。之间的差。堆栈应用举例:堆栈应用举例:例:例:用用用用BPBP的基址指令的基址指令的基址指令的基址指令代替代替代替代替POPPOP指令指令指令指令MOVBP,SPPUSHAXPUSHBXPUSHCXMOVCX,BP-6MOVBX,BP-4MOVAX,BP-2ADDSP,6例例:压入堆栈的内容压入堆栈的内容压入堆栈的内容压入堆栈的内容与
33、弹出内容顺序相反与弹出内容顺序相反与弹出内容顺序相反与弹出内容顺序相反PUSH AXPUSHBXPUSHCXPOPCXPOPBXPOPAX堆栈用途堆栈用途堆栈用途堆栈用途:q存放存放存放存放CPUCPU寄存器或存储器中暂时不使用的数据,寄存器或存储器中暂时不使用的数据,寄存器或存储器中暂时不使用的数据,寄存器或存储器中暂时不使用的数据,使用数据时将其弹出;使用数据时将其弹出;使用数据时将其弹出;使用数据时将其弹出;qq 调用子程序调用子程序调用子程序调用子程序,响应中断时都要用到堆栈。响应中断时都要用到堆栈。响应中断时都要用到堆栈。响应中断时都要用到堆栈。调用子程序(或过程)或发生中断时要保护
34、断点的地址;调用子程序(或过程)或发生中断时要保护断点的地址;子程序或中断返回时恢复断点。子程序或中断返回时恢复断点。调用子程序时需保留内容调用子程序时需保留内容调用子程序时需保留内容调用子程序时需保留内容:调用子程序:将下条指令地址即调用子程序:将下条指令地址即调用子程序:将下条指令地址即调用子程序:将下条指令地址即IPIP值保留下来值保留下来值保留下来值保留下来(码段寄存器(码段寄存器CS和指令指针和指令指针IP),),才能才能保证子程序执行完后准确返回主程序继续执行。保证子程序执行完后准确返回主程序继续执行。保证子程序执行完后准确返回主程序继续执行。保证子程序执行完后准确返回主程序继续执
35、行。执行子程序时执行子程序时执行子程序时执行子程序时,通常用到,通常用到内部寄存器内部寄存器,执行结果会影响,执行结果会影响标志位,必须在调用子程序之前将标志位,必须在调用子程序之前将现状保护起来现状保护起来现状保护起来现状保护起来。子程序嵌套或子程序递归(自调自)子程序嵌套或子程序递归(自调自)保留许多信息,而且保证正确返回(且后进先出)。保留许多信息,而且保证正确返回(且后进先出)。q存放存放CPU寄存器或存储器中暂时不使用的数据寄存器或存储器中暂时不使用的数据,使用数据时将其弹出:使用数据时将其弹出:PUSHAX;将将(AX)入栈入栈(AX)(AX)使用数据时将其弹出:使用数据时将其弹出
36、:POPBXq调用子程序(或过程)或发生中断时要保护断点的地址,调用子程序(或过程)或发生中断时要保护断点的地址,子程序或中断返回时恢复断点。子程序或中断返回时恢复断点。子程序嵌套子程序嵌套断点地址压入和弹出情况断点地址压入和弹出情况3 3、交换指令、交换指令、交换指令、交换指令格式:格式:XCHGdest,src;(dest)(src)执行操作:执行操作:把一个字节或一个字的源操作数与目的操作数相交换。把一个字节或一个字的源操作数与目的操作数相交换。把一个字节或一个字的源操作数与目的操作数相交换。把一个字节或一个字的源操作数与目的操作数相交换。可以可以实现:实现:寄存器之间寄存器之间寄存器之
37、间寄存器之间 寄存器和存储器之间寄存器和存储器之间寄存器和存储器之间寄存器和存储器之间注意:注意:存储器之间不能交换,存储器之间不能交换,两个操作数中必须有一个在寄存器中;两个操作数中必须有一个在寄存器中;段寄存器不能作为一个操作数;段寄存器不能作为一个操作数;允许字或字节操作,不影响标志位。允许字或字节操作,不影响标志位。应用举例:应用举例:XCHGBL,DLXCHGAX,SIXCHGCOUNTDI,AXXCHGBX,DI(错)错)XCHGDS,AX(错)错)4.4.XLATXLAT换码指令:换码指令:换码指令:换码指令:该指令不影响标志位该指令不影响标志位。格式:格式:XLATstr_ta
38、ble;(;(AL)(BX)+(AL)或或XLATstr_table表格符号地址(首地址),表格符号地址(首地址),只是为了提高可读性而设置,汇编时仍用只是为了提高可读性而设置,汇编时仍用BX。XLAT指令使用方法指令使用方法:先建立一个字节表格;先建立一个字节表格;表格首偏移地址存入表格首偏移地址存入表格首偏移地址存入表格首偏移地址存入BXBX;需要转换需要转换需要转换需要转换代码的序号代码的序号代码的序号代码的序号(相对与表格首地址位移量)(相对与表格首地址位移量)存入存入存入存入ALAL;(表中第一个元素的序号为表中第一个元素的序号为0)执行执行执行执行XLATXLAT指令后,表中指定序
39、号的元素存于指令后,表中指定序号的元素存于指令后,表中指定序号的元素存于指令后,表中指定序号的元素存于ALAL中中中中。(AL)为转换的代码。为转换的代码。XLAT指令应用:指令应用:若把字符的若把字符的扫描码扫描码转换成转换成ASCII码码;或或数字数字09转换成转换成7段数码所需要的相应代码(段数码所需要的相应代码(字形码字形码)等)等就要用就要用XLAT指令。指令。例:内存的数据段中有一张十六进制数字的例:内存的数据段中有一张十六进制数字的ASCII码表。码表。首地址为:首地址为:Hex_table,欲查出表中第欲查出表中第10个元素(个元素(A)执行指令序列执行指令序列:MOVBX,O
40、FFSETHex_tableMOVAL,0AHXLATHex_table假设:假设:(DS)=F000H,Hex_table=0040H(AL)=0AH执行执行XLAT以后:以后:(AL)=41H=(F004AH),),即即“A”的的ASCII码。码。30H30H31H31H32H32H.39H39H41H41H42H42H.46H46H.Hex_tableHex_tableHex_table+1Hex_table+1Hex_table+2Hex_table+2Hex_table+0AHHex_table+0AHHex_table+0BHHex_table+0BHHex_table+0FHHe
41、x_table+0FHFFBBAA9911220016进制数的进制数的ASCII码表码表(二)输入输出指令二)输入输出指令二)输入输出指令二)输入输出指令输入指令输入指令ININ用于用于CPU从外设端口接受数据,从外设端口接受数据,输出指令输出指令OUTOUT 用于用于CPU向外设端口发送数据。向外设端口发送数据。无论接受还是发送数据,必须通过累加器无论接受还是发送数据,必须通过累加器AX(字)或字)或AL(字字节)节)输入、输出指令不影响标志位。输入、输出指令不影响标志位。输入、输出指令不影响标志位。输入、输出指令不影响标志位。每个外设要占几个端口:数据口,状态口和控制口。每个外设要占几个端
42、口:数据口,状态口和控制口。信息交换要通过端口信息交换要通过端口在在IBMPC机里,可以配接许多外部设备,机里,可以配接许多外部设备,每个外设与每个外设与CPU之间交换数据,状态信息和控制命令,之间交换数据,状态信息和控制命令,每一种信息交换都要通过一个端口来进行。每一种信息交换都要通过一个端口来进行。端口数端口数:外部设备最多有:外部设备最多有65536个个I/O端口。端口。A0A15译码形成。译码形成。端口号端口号:端口号(即外设端口地址)为:端口号(即外设端口地址)为0000HFFFFH。PC机仅使用机仅使用A0A9译码形成译码形成I/O口地址,即口地址,即1024H个口地址个口地址端口
43、号:端口号:0000H03FFH其中:其中:A9=1,表示扩充槽上的表示扩充槽上的口地址。口地址。长格式:长格式:长格式:长格式:端口号中前端口号中前端口号中前端口号中前256256个端口(个端口(个端口(个端口(0FFH0FFH),可以直接写在指令中,可以直接写在指令中,这就是长格式。这就是长格式。端口号代替指令中的端口号代替指令中的PORT,机器指令用二字节表示,第二字节就是端口号。机器指令用二字节表示,第二字节就是端口号。短格式:短格式:短格式:短格式:当端口号当端口号当端口号当端口号 256256时,只能使用短格式时,只能使用短格式时,只能使用短格式时,只能使用短格式,必须先把端口号放
44、到必须先把端口号放到DX寄存器中。寄存器中。不需要用任何段寄存器来修改它的值。不需要用任何段寄存器来修改它的值。1 1、ININ输入指令输入指令输入指令输入指令格式:格式:INacc,port;(acc)(port)具体形式有四种:具体形式有四种:INAL,data8;端口地址端口地址8位,输入一个字节位,输入一个字节INAX,data8;端口地址端口地址8位,输入一个字位,输入一个字INAL,DX;端口地址端口地址16位,输入一个字节位,输入一个字节INAX,DX;端口地址端口地址16位,输入一个字位,输入一个字必须通过累加器必须通过累加器AX(字)或字)或AL(节)输入节)输入数据。数据。
45、2 2、OUTOUT输出指令输出指令输出指令输出指令格式:格式:OUTport,acc;(port)(acc)具体形式有四种:具体形式有四种:OUTdata8,AL;端口地址端口地址8位,输出一个字节位,输出一个字节OUTdata8,AX;端口地址端口地址8位,输出一个字位,输出一个字OUTDX,AL;端口地址端口地址16位,输出一个字节位,输出一个字节OUTDX,AX;端口地址端口地址16位,输出一个字位,输出一个字必须通过累加器必须通过累加器AX(字)或字)或AL(节)输出节)输出数据。数据。例例1:实现:实现(29H)(28H)(DATA_WORD)INAX,28HMOVDATA_WOR
46、D,AX例例2:从端口:从端口3FCH送一个字到送一个字到AX寄存器寄存器MOVDX,3FCHINAX,DX;(AL)(3FCH),),(AH)(3FDH)例例3:实现将(:实现将(AL)(05H)OUT5,AL;(;(05H)(AL)(三)地址传送指令三)地址传送指令三)地址传送指令三)地址传送指令地址指针写入指定寄存器或寄存器对指令。地址指针写入指定寄存器或寄存器对指令。1、LEA(LoadEffectiveAddress)2、LDS(LoadpointerusingDS)3、LES(LoadpointerusingES)1 1、LEALEA格式:格式:LEAreg16,mem16;EA(
47、reg16)功能:加载有效地址,用于写近地址指针。功能:加载有效地址,用于写近地址指针。把指令中指定的把指令中指定的把指令中指定的把指令中指定的存储器操作数有效地址存储器操作数有效地址存储器操作数有效地址存储器操作数有效地址装入指定的寄存器装入指定的寄存器装入指定的寄存器装入指定的寄存器。例:设(例:设(BX)=0400H,(,(SI)=003CHLEABX,BX+SI+0F62H执行指令后执行指令后:EA=(BX)+(SI)+0F62H=0400H+003CH+0F62H=139EH(BX)=139EH注意:设注意:设(DS)=3000HBUFFER=1000H(31000H)=0040HP
48、55图图3.9(1)LEA指令与指令与MOV的区别的区别LEABX,BUFFER;(;(BX)=1000HMOVBX,BUFFER;(BX)=0040HLEA指令与指令与MOV等价等价LEABX,BUFFER;(BX)=1000HMOVBX,OFFSETBUFFER;(BX)=1000H(2)LEALEA指令中的目标寄存器必须是指令中的目标寄存器必须是指令中的目标寄存器必须是指令中的目标寄存器必须是1616位的通用寄存位的通用寄存位的通用寄存位的通用寄存 器器器器,源操作数必须是一个存储器源操作数必须是一个存储器源操作数必须是一个存储器源操作数必须是一个存储器。(3)请思考下列指令的正、误)请
49、思考下列指令的正、误LEADX,BETABXSILEADX,AX2 2、LDSLDS(LoadpointerusingDS)格式:格式:LDSreg16,mem32;(;(reg16)(EA)(DS)(EA)+2)功能:功能:将指令指定将指令指定将指令指定将指令指定3232位地址指针送指令位地址指针送指令位地址指针送指令位地址指针送指令指定寄存器和指定寄存器和指定寄存器和指定寄存器和DSDS。将指令指定将指令指定mem32单元的前两个单元内容单元的前两个单元内容(16位偏移量位偏移量)装入指定通用寄存器,把后两个单元内容装入指定通用寄存器,把后两个单元内容(段地址段地址)装入到装入到DS段寄存
50、器。段寄存器。用于写远地址指针用于写远地址指针。例例:假设:假设:(DS)=C000H指令指令:LDSSI,0010H执行指令后执行指令后:(SI)=0180H(DS)=2000H3 3、LES(LoadpointerusingES)LES(LoadpointerusingES)格式:格式:LESreg16,mem32;(;(reg16)(EA)(ES)(EA)+2)功能:功能:把源操作数指定的把源操作数指定的把源操作数指定的把源操作数指定的4 4个相继字节送指令指定的寄存器个相继字节送指令指定的寄存器个相继字节送指令指定的寄存器个相继字节送指令指定的寄存器 及及及及ESES寄存器中。寄存器中