机原理与接口技术微处理器的指令系统_第1页
机原理与接口技术微处理器的指令系统_第2页
机原理与接口技术微处理器的指令系统_第3页
机原理与接口技术微处理器的指令系统_第4页
机原理与接口技术微处理器的指令系统_第5页
已阅读5页,还剩118页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第3章章 微处理器的指令系统微处理器的指令系统 学习目标学习目标8086/8088 CPU8086/8088 CPU的指令系统是的指令系统是Intel80 x86Intel80 x86系列系列CPUCPU共同的基础,其后续高型号微处理器的指令系统共同的基础,其后续高型号微处理器的指令系统都是在此基础上新增了一些指令逐步扩充形成的。都是在此基础上新增了一些指令逐步扩充形成的。本章将重点讨论本章将重点讨论8086/8088 CPU8086/8088 CPU的指令系统。最后,介绍几种扩展指令集的实用知识。的指令系统。最后,介绍几种扩展指令集的实用知识。通过本章对通过本章对808680868088

2、CPU8088 CPU寻址方式和指令系统的学习,应能掌握汇编语言程序设计所需要的汇寻址方式和指令系统的学习,应能掌握汇编语言程序设计所需要的汇编语言和编写程序段的基础知识。编语言和编写程序段的基础知识。学习要求学习要求在理解与掌握各种寻址方式的基础上,着重掌握存储器寻址的各种寻址方式。在理解与掌握各种寻址方式的基础上,着重掌握存储器寻址的各种寻址方式。应熟练掌握应熟练掌握4 4类数据传送指令。难点是类数据传送指令。难点是XLATXLAT、ININ、OUTOUT。学习算术运算类指令中的难点是带符号乘、除指令与十进制指令。学习算术运算类指令中的难点是带符号乘、除指令与十进制指令。学习逻辑运算和移位

3、循环类指令时,要着重理解学习逻辑运算和移位循环类指令时,要着重理解CLCL的设置以及进位位的处理。的设置以及进位位的处理。学习串操作类指令时,着重理解重复前缀(学习串操作类指令时,着重理解重复前缀(REPREP)的使用。)的使用。学习程序控制类指令时,着重理解条件转移的条件及测试条件。学习程序控制类指令时,着重理解条件转移的条件及测试条件。理解指令集的发展趋势,了解几种扩展指令集。理解指令集的发展趋势,了解几种扩展指令集。1第第3章章 微处理器的指令系统微处理器的指令系统 3.1 80863.1 808680888088的寻址方式的寻址方式3.2 3.2 数据传送类指令数据传送类指令P35-P

4、41P35-P413.3 3.3 算术运算类指令算术运算类指令 P48P48 P54-P56P54-P56P61-P68P61-P683.4 3.4 逻辑运算和移位循环类指令逻辑运算和移位循环类指令3.5 3.5 串操作类指令串操作类指令 P78-P86 P78-P863.73.7处理器控制类指令处理器控制类指令P92P923.8 CPU3.8 CPU指令集指令集23.1 80868088的寻址方式的寻址方式8086808680888088的寻址方式分为两种不同的类型:数据寻址方式和程序存储器寻址方式。的寻址方式分为两种不同的类型:数据寻址方式和程序存储器寻址方式。前者是寻址操作数地址,后者是

5、寻址程序地址(在代码段中)。前者是寻址操作数地址,后者是寻址程序地址(在代码段中)。 3.1.13.1.1数据寻址方式数据寻址方式图图3-13-1给出了各种数据给出了各种数据寻址方式的类型、指令寻址方式的类型、指令举例以及存储器地址举例以及存储器地址生成方法与数据流向。生成方法与数据流向。31立即寻址立即寻址立即寻址的操作数就在指令中,当执行指令时,立即寻址的操作数就在指令中,当执行指令时,CPUCPU直接从紧跟着指令代码的后续地直接从紧跟着指令代码的后续地址单元中取得该立即数。立即数可以是址单元中取得该立即数。立即数可以是8 8位,也可以是位,也可以是1616位;并规定只能是整数类型位;并规

6、定只能是整数类型的源操作数。这种寻址主要用来给寄存器赋初值,指令执行速度快。的源操作数。这种寻址主要用来给寄存器赋初值,指令执行速度快。立即数寻址的立即数寻址的MOVMOV指令示例。指令示例。42寄存器寻址寄存器寻址寄存器寻址的操作数放在寄存器中,寄存器名在指令中指出。在一条指令中,源操寄存器寻址的操作数放在寄存器中,寄存器名在指令中指出。在一条指令中,源操作数或作数或/ /和目的操作数都可以采用寄存器寻址方式。这种寻址的指令长度短,操作数和目的操作数都可以采用寄存器寻址方式。这种寻址的指令长度短,操作数就在就在CPUCPU内部,执行速度快。注意,使用时源与目标应有相同的数据类型长度。内部,执

7、行速度快。注意,使用时源与目标应有相同的数据类型长度。各种寄存器寻址的各种寄存器寻址的MOVMOV指令示例。指令示例。5存储器寻址存储器寻址存储器寻址比较复杂,当存储器寻址比较复杂,当CPUCPU寻找存储器操作数时,应根据指令给出的寻址方式,由寻找存储器操作数时,应根据指令给出的寻址方式,由EUEU先计算出操作数地址的偏移量(即有效地址先计算出操作数地址的偏移量(即有效地址EAEA)。)。EAEA的值由汇编程序根据指令所的值由汇编程序根据指令所采用的寻址方式自动计算得出。计算采用的寻址方式自动计算得出。计算EAEA的通式为:的通式为:EAEA基址值(基址值(BXBX或或BPBP)+ +变址值(

8、变址值(SISI或或DIDI)+ +位移量位移量DISPDISP63直接数据寻址直接数据寻址直接数据寻址有两种基本形式:直接寻址和位移寻址。直接数据寻址有两种基本形式:直接寻址和位移寻址。1 1)直接寻址)直接寻址直接寻址简单、直观,它是指令中以位移量方式直接给出存储器操作数的偏移地址,直接寻址简单、直观,它是指令中以位移量方式直接给出存储器操作数的偏移地址,即有效地址即有效地址EAEADISPDISP。这种寻址方式的指令执行速度快,用于存储单元与。这种寻址方式的指令执行速度快,用于存储单元与ALAL、AXAX之之间的间的MOVMOV指令。指令。2 2)位移寻址)位移寻址位移寻址也以位移量方式

9、直接给出存储器操作数的偏移地址,但适合于几乎所有将位移寻址也以位移量方式直接给出存储器操作数的偏移地址,但适合于几乎所有将数据从存储单元传送到寄存器的指令。数据从存储单元传送到寄存器的指令。7使用使用AX、AL的直接寻址指令示例的直接寻址指令示例8使用位移量的直接数据寻址指令示例使用位移量的直接数据寻址指令示例位移寻址与直接寻址的操作相同,只是它的指令为4字节而不是3字节【例例3.1】 MOV CL, 2000H指令与MOV AL,2000H指令的操作相同,但MOV CL,2000H指令为4字节长,而MOV AL,2000H指令为3字节长。94寄存器间接寻址寄存器间接寻址寄存器间接寻址的操作数

10、在存储器中,存储单元的有效地址寄存器间接寻址的操作数在存储器中,存储单元的有效地址EAEA由寄存器保存,这些由寄存器保存,这些寄存器是基址寄存器寄存器是基址寄存器BXBX、基址指针寄存器、基址指针寄存器BPBP、变址寄存器、变址寄存器SISI和和DIDI之一或它们的某种之一或它们的某种组合。组合。【例例3.23.2】设设BXBX3000H3000H,DSDS2000H2000H,当执行,当执行MOV AXMOV AX,BXBX指令后,则数据段存储单指令后,则数据段存储单元为元为23000H23000H处的字内容将被复制处的字内容将被复制AXAX中,即中,即23000H23000H的内容送到的内

11、容送到ALAL,23001H23001H的内容送到的内容送到AHAH。指令中的方括号。指令中的方括号 在汇编语言中表示间接寻址。在汇编语言中表示间接寻址。10寻址储存器时如何默认段寄存器寻址储存器时如何默认段寄存器当使用当使用BXBX、DIDI和和SISI寻址存储器时,寄存器间接寻址或任何其他寻址方式都默认使用寻址存储器时,寄存器间接寻址或任何其他寻址方式都默认使用数据段,而使用基址指针寄存器数据段,而使用基址指针寄存器BPBP寻址存储器时,则默认使用堆栈段。寻址存储器时,则默认使用堆栈段。在使用寄存器间接寻址时,要注意在某些情况下,要求用指定的类型运算伪指令在使用寄存器间接寻址时,要注意在某

12、些情况下,要求用指定的类型运算伪指令BYTE PTRBYTE PTR、WORD PTRWORD PTR或或DWORD PTRDWORD PTR来规定传送数据的长度。来规定传送数据的长度。【例例3.33.3】 MOV AL MOV AL,SISI指令的书写格式是对的,因为汇编程序能够清楚地根据指令的书写格式是对的,因为汇编程序能够清楚地根据ALAL来判明来判明SISI是指定存储器数据为字节传送类型。是指定存储器数据为字节传送类型。【例例3.423.42】MOV SIMOV SI,6AH6AH指令的书写格式是模糊的。因为,汇编程序不能根据立即指令的书写格式是模糊的。因为,汇编程序不能根据立即数数6

13、AH6AH确定确定SISI存储单元的数据类型的长度。如果将此指令书写成存储单元的数据类型的长度。如果将此指令书写成MOV BYTE PYRSIMOV BYTE PYRSI,6AH6AH,则汇编程序就能清楚地判明,则汇编程序就能清楚地判明SISI所寻址的存储单元为字节类型。所寻址的存储单元为字节类型。115基址加变址寻址基址加变址寻址基址加变址寻址类似于间接寻址,它也是间接地寻址存储器数据。其操作数的有效基址加变址寻址类似于间接寻址,它也是间接地寻址存储器数据。其操作数的有效地址地址EAEA是指令中指定的基址寄存器(是指令中指定的基址寄存器(BXBX或或BPBP)和变址寄存器()和变址寄存器(S

14、ISI或或DIDI)的内容之和。)的内容之和。【例例3.53.5】MOV BX+SIMOV BX+SI,CLCL指令是将寄存器指令是将寄存器CLCL中的字节内容复制到数据段中由中的字节内容复制到数据段中由BXBX加加SISI寻址的存储单元中。寻址的存储单元中。基址加变址寻址可用于处理数组(或表格),通常,用基址寄存器保存数组(或表基址加变址寻址可用于处理数组(或表格),通常,用基址寄存器保存数组(或表格)的起始地址,而变址寄存器保存数组(或表格)元素的相对位置。如果是用格)的起始地址,而变址寄存器保存数组(或表格)元素的相对位置。如果是用BPBP寄存器寻址堆栈段存储器数组,则由寄存器寻址堆栈段

15、存储器数组,则由BPBP寄存器和变址寄存器两者生成有效地址。寄存器和变址寄存器两者生成有效地址。【例例3.63.6】当执行指令当执行指令MOV DXMOV DX,BP+SIBP+SI时,若时,若BPBP2000H2000H,SISI0300H0300H,SSSS1000H1000H,则指令执行后,将把堆栈段中则指令执行后,将把堆栈段中12300H12300H单元的字数据传送到单元的字数据传送到DXDX寄存器。表寄存器。表3.63.6给出了基给出了基址加变址寻址的指令示例。址加变址寻址的指令示例。12基址加变址寻址的指令示例基址加变址寻址的指令示例136寄存器相对寻址寄存器相对寻址寄存器相对寻址

16、是带有位移量寄存器相对寻址是带有位移量DISPDISP的基址或变址寄存器(的基址或变址寄存器(BXBX、BPBP或或DIDI、SISI)寻址。)寻址。例如:在例如:在MOV AXMOV AX,SI+4000HSI+4000H指令中,假设指令中,假设SISI0500H0500H,DSDS2000H2000H,则指令执行时,则指令执行时,CPUCPU按段加偏移寻址机制得到按段加偏移寻址机制得到EAEASI+4000HSI+4000H4500H4500H,再加上,再加上DSDS10H10H20000H20000H,生成,生成所寻址的存储器物理地址为所寻址的存储器物理地址为24500H24500H,于

17、是,指令执行后将把数据段存储单元,于是,指令执行后将把数据段存储单元24500H24500H中的字内容送到中的字内容送到AXAX。147相对基址加变址寻址相对基址加变址寻址相对基址加变址寻址是用基址、变址与位移量三个分量之和形成有效地址。相对基址加变址寻址是用基址、变址与位移量三个分量之和形成有效地址。【例例3.83.8】 在在MOV AXMOV AX,BX+DI+200HBX+DI+200H指令中,设指令中,设BXBX0100H0100H,DIDI0300H0300H,DSDS4000H4000H。当当CPUCPU指令执行时,先计算出指令执行时,先计算出EAEABX+DI+200HBX+DI

18、+200H0600H0600H,指令运行后,将把数据段存,指令运行后,将把数据段存储单元储单元40600H40600H中的字内容装入中的字内容装入AXAX。15相对基址加变址寻址的指令示例相对基址加变址寻址的指令示例例如:存储器中有一个文件例如:存储器中有一个文件FILEFILE包含包含A A、B B、C C、D 4D 4个记录,每个记录又包含个记录,每个记录又包含1010个元个元素,如果要求将其中存储在单元素,如果要求将其中存储在单元RECARECA中的记录中的记录A A的元素的元素0 0复制到记录复制到记录D D的元素的元素4 4,这时,这时,可以用位移量寻址文件,用基址寄存器可以用位移量

19、寻址文件,用基址寄存器BXBX寻址记录,而用变址寄存器寻址记录,而用变址寄存器DIDI寻址记录中寻址记录中的元素。程序段如下:的元素。程序段如下:MOV BXMOV BX,OFFSET RECAOFFSET RECA;寻址记录;寻址记录A A的存储单元的存储单元RECARECAMOV DIMOV DI,0 0;寻址单元;寻址单元0 0MOV ALMOV AL,FILEBX+DIFILEBX+DI;取出记录;取出记录A A的元素的元素0 0MOV BXMOV BX,OFFSET RECDOFFSET RECD;寻址记录;寻址记录D D的存储单元的存储单元RECDRECDMOV DIMOV DI,

20、4 4;寻址单元;寻址单元4 4MOV FILEBX+DIMOV FILEBX+DI,ALAL;复制到记录;复制到记录D D的元素的元素4 4中中163.1.2 程序存储器寻址方式程序存储器寻址方式程序存储器寻址方式即转移类指令(转移指令程序存储器寻址方式即转移类指令(转移指令JMPJMP和调用指令和调用指令CALLCALL)的寻址方式。这)的寻址方式。这种寻址方式最终是要确定一条指令的地址。种寻址方式最终是要确定一条指令的地址。在在8086/80888086/8088系统中,由于存储器采用分段结构,所以转移类指令有段内转移和段间系统中,由于存储器采用分段结构,所以转移类指令有段内转移和段间转

21、移之分转移之分。条件转移条件转移指令只允许实现段内转移,而且是段内短转移,即只允许转移的地址范围指令只允许实现段内转移,而且是段内短转移,即只允许转移的地址范围在在-128-128+127+127字节内,由指令中直接给出字节内,由指令中直接给出8 8位地址位移量位地址位移量。无条件转移无条件转移和调用指令又可和调用指令又可分为分为: : 段段内短内短转移转移 段段内直接内直接转移转移 段段内间接内间接转移转移 段段间直接间直接转移转移 段段间间接转移等间间接转移等5 5种不同的寻址方式。种不同的寻址方式。173.1.3 堆栈存储器寻址方式堆栈存储器寻址方式表表3.93.9列出了可使用的一些列出

22、了可使用的一些PUSHPUSH和和POPPOP指令的示例。指令的示例。183.1.4其他寻址方式其他寻址方式1 1串操作指令寻址方式串操作指令寻址方式数据串(或称字符串)指令不能使用正常的存储器寻址方式来存取数据串(或称字符串)指令不能使用正常的存储器寻址方式来存取数据串指令中使用的操作数数据串指令中使用的操作数。执行执行数据串指令时,源串操作数第数据串指令时,源串操作数第1 1个字节或字的有效地址应存放在个字节或字的有效地址应存放在源变址寄存器源变址寄存器SISI中(不允许修改),目标串操作数第中(不允许修改),目标串操作数第1 1个字节或字的个字节或字的有效地址应存放有效地址应存放在在目标

23、变址寄存器目标变址寄存器DIDI中中(不允许修改)(不允许修改)。在在重复串操作时,重复串操作时,8086/80888086/8088能自动修改能自动修改SISI和和DIDI的内容,以使它们能的内容,以使它们能指向后面的字节或字。因指令中不必给出指向后面的字节或字。因指令中不必给出SISI或或DIDI的编码,故串操作的编码,故串操作指令采用的是隐含寻址方式。指令采用的是隐含寻址方式。19其他寻址方式其他寻址方式2 2I/OI/O端口寻址方式端口寻址方式在在8086/80888086/8088指令系统中,输入指令系统中,输入/ /输出指令对输出指令对I/OI/O端口的寻址可采用直端口的寻址可采用

24、直接或间接两种方式。接或间接两种方式。(1 1)直接端口寻址:端口地址以)直接端口寻址:端口地址以8 8位立即数方式在指令中直接给出。位立即数方式在指令中直接给出。例如例如IN ALIN AL,n n指令是将端口号为指令是将端口号为8 8位立即数位立即数n n的端口地址中的字节操的端口地址中的字节操作数输入到作数输入到ALAL,它所寻址的端口号只能在,它所寻址的端口号只能在0 0255255范围内。范围内。(2 2)间接端口寻址:这类似于寄存器间接寻址,)间接端口寻址:这类似于寄存器间接寻址,1616位的位的I/OI/O端口地端口地址在址在DXDX寄存器中,即通过寄存器中,即通过DXDX间接寻

25、址,故可寻址的端口号为间接寻址,故可寻址的端口号为0 06553565535。例如。例如OUT DXOUT DX,ALAL指令是将指令是将ALAL的字节内容输出到由的字节内容输出到由DXDX指出的端指出的端口中去。口中去。203.2 数据传送类指令数据传送类指令数据传送类指令可完成寄存器与寄存器之间、寄存器与存储器之间以及寄存器与数据传送类指令可完成寄存器与寄存器之间、寄存器与存储器之间以及寄存器与I/OI/O端口之间的字节或字传送,除端口之间的字节或字传送,除SAHFSAHF和和POPFPOPF指令对标志位有影响外指令对标志位有影响外, ,这类指令所具有的这类指令所具有的共同特点是不影响标志

26、寄存器的内容。共同特点是不影响标志寄存器的内容。3.2.1 3.2.1 通用数据传送指令通用数据传送指令通用数据传送指令包括通用数据传送指令包括基本的传送指令基本的传送指令MOVMOV,堆栈操作指令堆栈操作指令PUSHPUSH和和POPPOP,数据交换指数据交换指令令XCHGXCHG与与字节翻译指令字节翻译指令XLATXLAT。1 1基本的传送指令基本的传送指令MOV dMOV d,s s;dsds指令功能:将由源指令功能:将由源s s指定的源操作数送到目标指定的源操作数送到目标d d。源操作数可以是源操作数可以是8/168/16位寄存器、存储器中的某个字节位寄存器、存储器中的某个字节/ /字

27、或者是字或者是8/168/16位立即数;目标位立即数;目标操作数不允许为立即数,其他同源操作数。且两者不能同时为存储器操作数。操作数不允许为立即数,其他同源操作数。且两者不能同时为存储器操作数。21MOV指令可实现的数据传送类型指令可实现的数据传送类型(1 1)MOV mem/reg1MOV mem/reg1,mem/reg2mem/reg2由由mem/reg2mem/reg2所指定的存储单元或寄存器中的所指定的存储单元或寄存器中的8 8位数据位数据或或1616位数据传送到由位数据传送到由mem/reg1mem/reg1所指定的存储单元或寄存器中,但不允许从存储器传所指定的存储单元或寄存器中,

28、但不允许从存储器传送到存储器。送到存储器。(2 2)MOV mem/reg,dataMOV mem/reg,data将将8 8位或位或1616位立即数位立即数datadata传送到由传送到由mem/regmem/reg所指定的存储单元所指定的存储单元或寄存器中。或寄存器中。(3 3)MOV reg,dataMOV reg,data将将8 8位或位或1616位立即数位立即数datadata传送到由传送到由regreg所指定的寄存器中。所指定的寄存器中。(4 4)MOV ac,memMOV ac,mem将存储单元中的将存储单元中的8 8位或位或1616位数据传送到累加器位数据传送到累加器acac中

29、。中。(5 5)MOV mem,acMOV mem,ac将累加器将累加器ALAL(8 8位)或位)或AXAX(1616位)中的数据传送到由位)中的数据传送到由memmem所指定的存所指定的存储单元中。储单元中。(6 6)MOV mem/reg,segregMOV mem/reg,segreg将由将由segregsegreg所指定的段寄存器(所指定的段寄存器(CSCS、DSDS、SSSS、ESES之一)的之一)的内容传送到由内容传送到由mem/regmem/reg所指定的存储单元或寄存器中。所指定的存储单元或寄存器中。(7 7)MOV segreg,mem/regMOV segreg,mem/r

30、eg允许将由允许将由mem/regmem/reg指定的存储单元或寄存器中的指定的存储单元或寄存器中的1616位数据位数据传送到由传送到由segregsegreg所指定的段寄存器(但代码段寄存器所指定的段寄存器(但代码段寄存器CSCS除外)中。除外)中。22MOV指令可实现的数据传送举例指令可实现的数据传送举例 例:例:MOV DSMOV DS,AXAX指令是对的;指令是对的;MOV CSMOV CS,AXAX指令是错的。指令是错的。注意:注意:MOVMOV指令不能直接实现从存储器到存储器之间的数据传送,但可以通过寄存器指令不能直接实现从存储器到存储器之间的数据传送,但可以通过寄存器作为中转站来

31、完成这种传送。作为中转站来完成这种传送。例:例:MOV SI,BXMOV SI,BX指令是错的;而用以下两条指令是对的:指令是错的;而用以下两条指令是对的:MOV AXMOV AX,BXBXMOV SIMOV SI,AXAX例:要将数据段存储单元例:要将数据段存储单元ARRAY1ARRAY1中的中的8 8位数据传送到存储单元位数据传送到存储单元ARRAY2ARRAY2中,用中,用MOV MOV ARRAY2ARRAY2,ARRAY1ARRAY1指令是错的;而用以下两条指令则可以完成:指令是错的;而用以下两条指令则可以完成:MOV ALMOV AL,ARRAY1ARRAY1MOV ARRAY2M

32、OV ARRAY2,ALAL232堆栈操作指令堆栈操作指令(1 1)PUSH sPUSH s;字压入堆栈指令允许将源操作数(;字压入堆栈指令允许将源操作数(1616位)压入堆栈。位)压入堆栈。(2 2)POP dPOP d;字弹出堆栈指令允许将堆栈中当前栈顶两相邻单元的;字弹出堆栈指令允许将堆栈中当前栈顶两相邻单元的数据字弹出到数据字弹出到d d。这是两条成对使用的进栈与出栈指令,其中,这是两条成对使用的进栈与出栈指令,其中,s s和和d d可以是可以是1616位寄存位寄存器或存储器两相邻单元,以保证堆栈按字操作。器或存储器两相邻单元,以保证堆栈按字操作。24PUSH指令和指令和POP指令指令

33、 堆栈的图示:堆栈的图示: 压入:格式压入:格式 PUSH SRCPUSH SRC 先修改指针先修改指针: SP SP-2 : SP SP-2 后压入后压入: (SP+1,SP) SRC: (SP+1,SP) SRC 弹出:格式弹出:格式 POP DSTPOP DST 栈顶栈顶 先弹出:先弹出:DST (SP+1,SP)DST (SP+1,SP) 后修改指针:后修改指针:SP SP+2SP SP+2 最后一项25弹出弹出压入压入SPSS高地址高地址 栈底栈底 堆栈段操作时应遵循的几点原则:堆栈段操作时应遵循的几点原则:堆栈的存取操作每次必须是一个字(即堆栈的存取操作每次必须是一个字(即2 2个

34、字节),没有单字节的操作指令。个字节),没有单字节的操作指令。执行压栈指令时,总是从高位地址向低位地址存放数据;执行出栈指令时,从堆栈中执行压栈指令时,总是从高位地址向低位地址存放数据;执行出栈指令时,从堆栈中弹出数据则正好相反。弹出数据则正好相反。堆栈段在内存中的物理地址由堆栈段在内存中的物理地址由SSSS和和SPSP或或SSSS和和BPBP决定,决定,SSSS是堆栈段寄存器,它是栈区的是堆栈段寄存器,它是栈区的最低地址,称为堆栈的段地址;最低地址,称为堆栈的段地址;SPSP是压栈或出栈指令隐含使用的堆栈地址指针,它是压栈或出栈指令隐含使用的堆栈地址指针,它的起始值是堆栈应达到的最大偏移量,

35、即指向栈顶地址,因此,堆栈段的范围是的起始值是堆栈应达到的最大偏移量,即指向栈顶地址,因此,堆栈段的范围是SSSS1616至至SSSS16+SP16+SP的起始值。显然,每执行一次压栈指令,则的起始值。显然,每执行一次压栈指令,则SP-2SP-2,推入堆栈的数,推入堆栈的数据放在栈顶;而每执行一次弹出指令时,则据放在栈顶;而每执行一次弹出指令时,则SP+2SP+2。BPBP寄存器用于对堆栈中的数据块进行随机存取,例如,寄存器用于对堆栈中的数据块进行随机存取,例如,MOV AXMOV AX,BPSIBPSI指令执行指令执行后,将把偏移量为后,将把偏移量为BP+SIBP+SI的存储单元的内容装入的

36、存储单元的内容装入AXAX。堆栈指令中的操作数只能是寄存器或存储器操作数,而不能是立即数。堆栈指令中的操作数只能是寄存器或存储器操作数,而不能是立即数。对对CSCS段寄存器可以使用压栈指令段寄存器可以使用压栈指令PUSH CXPUSH CX,但却不能使用,但却不能使用POP CSPOP CS这种无效指令,否则,这种无效指令,否则,由于它只改变了下一条指令的段地址(由于它只改变了下一条指令的段地址(CSCS值),将造成不可预知的结果。值),将造成不可预知的结果。 26例:例: 设当前设当前CS1000H,IP0030H,SS2000H,SP0040H,BX2340H,则则PUSH BX指令的操作

37、过程如图指令的操作过程如图3.2所示。所示。27POP CX指令执行举例指令执行举例例:设当前例:设当前CSCS1000H1000H,IPIP0020H0020H,SSSS1600H1600H,SPSP004CH004CH,则,则POP CXPOP CX指令执行时,指令执行时,将当前栈顶两相邻单元将当前栈顶两相邻单元1604CH1604CH与与1604DH1604DH中的数据字弹出并传送到中的数据字弹出并传送到CXCX中,同时修改堆中,同时修改堆栈指针,栈指针,SP+2SPSP+2SP,使之指向新栈顶,使之指向新栈顶1604EH1604EH。PUSHPUSH和和POPPOP两条指令可用来保存并

38、恢复现场数据。由于堆栈中的内容是按两条指令可用来保存并恢复现场数据。由于堆栈中的内容是按LIFOLIFO(后进(后进先出)的次序进行传送的,因此,保存内容和恢复内容时,需按照对称的次序执行先出)的次序进行传送的,因此,保存内容和恢复内容时,需按照对称的次序执行一系列压入指令和弹出指令。一系列压入指令和弹出指令。283数据交换指令数据交换指令XCHG dXCHG d,s s本指令的功能是将源操作数与目标操作数(字节或字)相互对应交换位置。本指令的功能是将源操作数与目标操作数(字节或字)相互对应交换位置。交换可以在通用寄存器与累加器之间、通用寄存器之间、通用寄存器与存储器之间交换可以在通用寄存器与

39、累加器之间、通用寄存器之间、通用寄存器与存储器之间进行。但不能在两个存储单元之间交换,段寄存器与进行。但不能在两个存储单元之间交换,段寄存器与IPIP也不能作为源或目标操作数。也不能作为源或目标操作数。例如:例如: XCHG AXXCHG AX,SI+0400HSI+0400H设当前设当前CSCS1000H1000H,IPIP0064H0064H,DSDS2000H2000H,SISI3000H3000H,AXAX1234H1234H,则该指令执行,则该指令执行后,将把后,将把AXAX寄存器中的寄存器中的1234H1234H与物理地址与物理地址23400H23400H单元开始的数据字(设为单元

40、开始的数据字(设为ABCDHABCDH)相)相互交换位置,即互交换位置,即AXAXABCDHABCDH;(;(23400H23400H)34H34H,(,(23401H23401H)12H12H。294字节翻译指令字节翻译指令XLAT 字节翻译指令通过查表方式完成代码转换功能,执行操作是:字节翻译指令通过查表方式完成代码转换功能,执行操作是:ALBX+ALALBX+AL。执行结。执行结果是将待转换的序号转换成对应的代码,并送回果是将待转换的序号转换成对应的代码,并送回ALAL寄存器中。寄存器中。代码转换的操作步骤如下:代码转换的操作步骤如下:建立代码转换表(其最大容量为建立代码转换表(其最大容

41、量为256256字节),将该表定位到内存中某个逻辑段的一字节),将该表定位到内存中某个逻辑段的一片连续地址中,并将表的首地址的偏移地址置入片连续地址中,并将表的首地址的偏移地址置入BXBX。将待转换的一个十进制数在表中的序号(又叫索引值)送入将待转换的一个十进制数在表中的序号(又叫索引值)送入ALAL寄存器中。该值实寄存器中。该值实际上就是表中某一项与表格首地址之间的位移量。际上就是表中某一项与表格首地址之间的位移量。执行执行XLATXLAT指令。指令。例如:已知七段显示码的编码规则为:例如:已知七段显示码的编码规则为:001000000001000000;101111001101111001

42、;220010010000100100;300110000300110000;400011001400011001;500010010500010010;600000010600000010;770111100001111000;800000000800000000;900010000900010000。设有一个十进制数。设有一个十进制数0 09 9的七段显示的七段显示码表被定位在当前数据段中,其起始地址的偏移地址值为码表被定位在当前数据段中,其起始地址的偏移地址值为0030H0030H。假定当前。假定当前CSCS2000H,IP2000H,IP007AH,007AH,DSDS4000H400

43、0H。若欲将。若欲将ALAL中待转换的十进制数中待转换的十进制数5 5转换成对应的七段码转换成对应的七段码12H12H,试分析执行,试分析执行XLATXLAT指令的操作过程。指令的操作过程。30执行执行XLAT指令的操作过程指令的操作过程首先,将数据段中该转换表的首地址的偏移地址首先,将数据段中该转换表的首地址的偏移地址0030H0030H置入置入BXBX;再将;再将待转换的十进制数在表中的序号待转换的十进制数在表中的序号05H05H送入送入ALAL;然后,执行;然后,执行XLATXLAT指令。指令。31字节翻译指令字节翻译指令XLAT应用举例应用举例假设假设0 09 9的七段显示码表存放在偏

44、移地址为的七段显示码表存放在偏移地址为0030H0030H开始的内存中,则取出开始的内存中,则取出“5”5”所对所对应的七段码(应的七段码(12H12H)可以用如下)可以用如下3 3条指令的程序段完成:条指令的程序段完成:MOV BX,0030HMOV BX,0030HMOV AL,5MOV AL,5XLAT XLAT 323.2.2目标地址传送指令目标地址传送指令这是一类专用于传送地址码的指令,可传送存储器的逻辑地址(即存储器操作数的这是一类专用于传送地址码的指令,可传送存储器的逻辑地址(即存储器操作数的段地址或偏移地址)至指定寄存器中,共包含段地址或偏移地址)至指定寄存器中,共包含3 3条

45、指令:条指令:LEALEA、LDSLDS和和LESLES。1 1LEA dLEA d,s s这是取有效地址指令,其功能是把用于指定源操作数(它必须是存储器操作数)的这是取有效地址指令,其功能是把用于指定源操作数(它必须是存储器操作数)的1616位偏移地址(即有效地址),传送到一个指定的位偏移地址(即有效地址),传送到一个指定的1616位通用寄存器中。这条指令常位通用寄存器中。这条指令常用来建立串操作指令所需要的寄存器指针。用来建立串操作指令所需要的寄存器指针。【例例3.173.17】LEA BXLEA BX,SI+100AHSI+100AH设当前设当前CSCS1500H1500H,IPIP02

46、00H0200H,DSDS2000H2000H,SISI0030H0030H,源操作数,源操作数1234H1234H存放在存放在SI+100AHSI+100AH开始的存储器内存单元中,则该指令的操作过程如图开始的存储器内存单元中,则该指令的操作过程如图3.43.4所示。所示。33LEA BX,SI+100AH指令的操作过程如图指令的操作过程如图3.4所示。所示。34注意比较注意比较LEA指令和指令和MOV指令的不同功能指令的不同功能 【例例3.183.18】 LEA LEA BX,BX,SISI指令是将指令是将SISI指示的偏移地址(指示的偏移地址(SISI的内容)装入的内容)装入BXBX。M

47、OV MOV BX,BX,SISI指令则是将由指令则是将由SISI寻址的存储单元中的数据装入寻址的存储单元中的数据装入BXBX。通常,通常,LEALEA指令用来使某个通用寄存器作为地址指针。指令用来使某个通用寄存器作为地址指针。【例例3.193.19】LEA BXLEA BX,BPBPDIDI指令是将内存单元的偏移量(指令是将内存单元的偏移量(BPBPDIDI)送)送BXBX。LEA SPLEA SP,3768H3768H指令是使堆栈指针指令是使堆栈指针SPSP为为3768H3768H。data segmentdata segment pkey db press any key.$ pkey

48、db press any key.$endsends MOV SI, 1000H MOV SI, 1000H LEA BX, pkey LEA BX, pkey MOV BP, OFFSET pkey MOV BP, OFFSET pkey LEA BX, SI+100AH LEA BX, SI+100AH MOV BP, OFFSET SI+100AH MOV BP, OFFSET SI+100AH MOV BP, OFFSET SI MOV BP, OFFSET SI;BP=0000H;BP=0000H MOV MOV BX, SIBX, SI;BH=72H(ASCII;BH=72H(AS

49、CII码码r), BL=70H(ASCIIr), BL=70H(ASCII码码p)p)352LDS d,s这是取某变量的这是取某变量的3232位地址指针的指令,其功能是从由指令的源位地址指针的指令,其功能是从由指令的源s s所指定的存储单元开始,所指定的存储单元开始,由由4 4个连续存储单元中取出个连续存储单元中取出某变量的地址指针(共某变量的地址指针(共4 4个字节),将其前两个字节(即变量个字节),将其前两个字节(即变量的偏移地址)的偏移地址)传送到由指令的传送到由指令的目标目标d d所指定的某所指定的某1616位通用寄存器,后位通用寄存器,后两字节(即变量的段两字节(即变量的段地址)地址

50、)传送到传送到DSDS段寄存器中。段寄存器中。【例例3.203.20】LDS SILDS SI,DI+100AHDI+100AH设当前设当前CSCS1000H1000H,IPIP0604H0604H,DSDS2000H2000H,DIDI2400H2400H,待传送的某变量的地址指针其待传送的某变量的地址指针其偏移地址为偏移地址为0180H0180H,段地址为,段地址为2230H2230H。363LES d,s这条指令与这条指令与LDS dLDS d,s s指令的操作基本相同,其区别仅在于将把由源所指定的某变量指令的操作基本相同,其区别仅在于将把由源所指定的某变量的地址指针中后的地址指针中后2

51、 2个字节(段地址)传送到个字节(段地址)传送到ESES段寄存器,而不是段寄存器,而不是DSDS段寄存器。段寄存器。上述上述3 3条指令都是装入地址,但使用时要准确理解它们的不同含义。条指令都是装入地址,但使用时要准确理解它们的不同含义。LEALEA指令是将指令是将1616位位有效地址装入任何一个有效地址装入任何一个1616位通用寄存器;而位通用寄存器;而LDSLDS和和LESLES是将是将3232位地址位地址指针装入任何指针装入任何一个一个1616位通用寄存器位通用寄存器及及DSDS或或ESES段寄存器段寄存器。373.2.3标志位传送指令标志位传送指令标志位传送指令共有标志位传送指令共有4

52、 4条:条:LAHFLAHF、SAHFSAHF、PUSHFPUSHF和和POPFPOPF。1 1LAHFLAHF指令功能:将标志寄存器指令功能:将标志寄存器F F的低字节的低字节( (共包含共包含5 5个状态标志位个状态标志位) )传送到传送到AHAH寄存器中。寄存器中。LAHFLAHF指令执行后,指令执行后,AHAH的的D7D7、D6D6、D4D4、D2D2与与D0 5D0 5位将分别被设置成位将分别被设置成SFSF(符号标志)、(符号标志)、ZFZF(零标志)、(零标志)、AFAF(辅助进位标志)、(辅助进位标志)、PFPF(奇偶标志)与(奇偶标志)与CFCF(进位标志)(进位标志)5 5

53、位,而位,而AHAH的的D5D5、D3D3、D1 3D1 3位没有意义。位没有意义。2 2SAHFSAHF指令功能:将指令功能:将AHAH寄存器内容传送到标志寄存器寄存器内容传送到标志寄存器F F的低字节。的低字节。SAHFSAHF与与LAHFLAHF的功能相反,它常用来通过的功能相反,它常用来通过AHAH对标志寄存器的对标志寄存器的SFSF、ZFZF、AFAF、PFPF与与CFCF标志标志位分别置位分别置1 1或复或复0 0。上述上述2 2条指令只涉及到对标志寄存器条指令只涉及到对标志寄存器F F的低的低8 8位进行操作,这是为了保持位进行操作,这是为了保持80868086指令系统指令系统对

54、对8088808880858085指令系统的兼容性。指令系统的兼容性。383.2.3标志位传送指令标志位传送指令3 3PUSHFPUSHF指令功能:将指令功能:将1616位标志寄存器位标志寄存器F F内容入栈保护。其操作过程与前述的内容入栈保护。其操作过程与前述的PUSHPUSH指令类似。指令类似。4 4POPFPOPF指令功能:将当前栈顶和次栈顶中的数据字弹出送回到标志寄存器指令功能:将当前栈顶和次栈顶中的数据字弹出送回到标志寄存器F F中。中。PUSHFPUSHF与与POPF 2POPF 2条指令常成对出现,一般用在子程序和中断处理程序的首尾,用来保条指令常成对出现,一般用在子程序和中断处

55、理程序的首尾,用来保护和恢复主程序涉及的标志寄存器内容。必要时可用来修改标志寄存器的内容。护和恢复主程序涉及的标志寄存器内容。必要时可用来修改标志寄存器的内容。393.2.4 I/O数据传送指令数据传送指令1 1ININ累加器,端口号累加器,端口号ININ指令是将指定端口中的内容输入到累加器指令是将指定端口中的内容输入到累加器AL/AXAL/AX中。其指令如下:中。其指令如下:IN ALIN AL,PORT PORT ;ALAL(端口(端口PORTPORT),即把端口),即把端口PORTPORT中的字节内容读入中的字节内容读入ALALIN AXIN AX,PORT PORT ;AXAX(端口(

56、端口PORTPORT),即把由),即把由PORTPORT两相邻端口中的字内容读入两相邻端口中的字内容读入AXAXIN ALIN AL,DXDX ;ALAL(端口(端口(DXDX),即从),即从DXDX所指的端口中读取所指的端口中读取1 1个字节内容送个字节内容送ALALIN AXIN AX,DXDX ;AXAX(端口(端口(DXDX),即从),即从DXDX和和DXDX1 1所指的两个端口中读取所指的两个端口中读取1 1个字内容送个字内容送AXAX【例例3.213.21】IN ALIN AL,40H40H设当前设当前CSCS1000H1000H,IPIP0050H0050H;8 8位端口位端口4

57、0H40H中的内容为中的内容为55H55H。 403.2.4 I/O数据传送指令数据传送指令2 2OUTOUT端口号,累加器端口号,累加器与与ININ指令相同,端口号可以由指令相同,端口号可以由8 8位立即数给出,也可由位立即数给出,也可由DXDX寄存器间接给出。寄存器间接给出。OUTOUT指令是把累加器指令是把累加器AL/AXAL/AX中的内容输出到指定的端口。其指令如下:中的内容输出到指定的端口。其指令如下:OUT PORTOUT PORT,ALAL;端口;端口PORTALPORTAL,即把,即把ALAL中的字节内容输出到由中的字节内容输出到由PORTPORT直接指定的端口直接指定的端口O

58、UT PORTOUT PORT,AXAX;端口;端口PORTAXPORTAX,即把,即把AXAX中的字内容输出到由中的字内容输出到由PORTPORT直接指定的端口直接指定的端口OUT DXOUT DX,ALAL;端口(;端口(DXDX)ALAL,即把,即把ALAL中的字节内容输出到由中的字节内容输出到由DXDX所指定的端口所指定的端口OUT DXOUT DX,AXAX;端口(;端口(DXDX)AXAX,即把,即把AXAX中的字内容输出到由中的字内容输出到由DXDX所指定的端口所指定的端口例例 3.22 OUT DX3.22 OUT DX,ALAL设当前设当前CSCS4000H4000H,IPI

59、P0020H0020H,DXDX6A10H6A10H,ALAL66H66H。413.3 算术运算类指令算术运算类指令3.3.13.3.1加法指令加法指令1 1ADD dADD d,s s;dd+sdd+s例例 3.23 3.23 ADD ADD WORD PTRWORD PTRBX+106BHBX+106BH,1234H1234H设当前设当前CSCS1000H1000H,IPIP0300H0300H,DSDS2000H2000H,BXBX1200H1200H。各标志位的改变为:各标志位的改变为:O O0 0(没有溢出),(没有溢出),S S0 0(结果为负),(结果为负),Z Z0 0(结果不

60、为(结果不为0 0),),A A0 0(有半进位),(有半进位),P P1 1(奇偶性为偶),(奇偶性为偶),C C0 0(没有借位)。(没有借位)。423.3 算术运算类指令算术运算类指令【例例3.243.24】 寄存器加法。若将寄存器加法。若将AXAX、BXBX、CXCX和和DXDX的内容累加,再将所得的的内容累加,再将所得的1616位的和数位的和数存入存入AX,AX,则加法程序段如下:则加法程序段如下:ADD AXADD AX,BXBX;AXAX+BXAXAX+BXADD AXADD AX,CXCX;AXAX+BX+CXAXAX+BX+CXADD AXADD AX,DXDX;AXAX+B

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论