第3章数据处理2数据传送指令优秀课件.ppt
第第3 3章数据处理章数据处理2 2数据数据传送指令传送指令第1页,本讲稿共37页学习指令的注意事项学习指令的注意事项指令的功能指令的功能该指令能够实现何种操作。通常指令该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式助记符就是指令功能的英文单词或其缩写形式指令支持的寻址方式指令支持的寻址方式该指令中的操作数可以采用该指令中的操作数可以采用何种寻址方式何种寻址方式指令对标志的影响指令对标志的影响该指令执行后是否对各个标志该指令执行后是否对各个标志位有影响,以及如何影响位有影响,以及如何影响其他方面其他方面该指令其他需要特别注意的地方,如指该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、隐含使用的令执行时的约定设置、必须预置的参数、隐含使用的寄存器等寄存器等2第2页,本讲稿共37页3.4.1 3.4.1 通用传送指令通用传送指令将数据将数据从源地址传送到目的地址从源地址传送到目的地址源操作数源操作数 src目的操作数目的操作数 dest30H30H被传送的数据被传送的数据3第3页,本讲稿共37页 包括包括MOV指令,指令,PUSH 和和 POP指令,指令,XCHG指令指令 1 基本传送指令基本传送指令MOVl 指令格式指令格式 MOV dst,src l 指令功能指令功能 将源操作数将源操作数src复制到目的操作数复制到目的操作数dst中,结果目的操作中,结果目的操作数的内容等于源操作数的内容,源操作数数的内容等于源操作数的内容,源操作数src的内容不变。的内容不变。dstsrcl 对标志位的影响对标志位的影响 该指令不影响标志位。该指令不影响标志位。4第4页,本讲稿共37页l 该指令的源操作数该指令的源操作数src可以使用各种寻址方式,目的操作数可以使用各种寻址方式,目的操作数dst可可以使用除立即数外的各种寻址方式。以使用除立即数外的各种寻址方式。依据源操作数、目的操作数的不同,依据源操作数、目的操作数的不同,MOV指令有指令有6种具体格式种具体格式 通用寄存器之间的数据传送通用寄存器之间的数据传送 例如例如 MOV AL,BL MOV AX,CX MOV EBX,EAX 它将源寄存器的内容传送到目的寄存器,源寄存器内容不变。它将源寄存器的内容传送到目的寄存器,源寄存器内容不变。5第5页,本讲稿共37页 通用寄存器与段寄存器之间的数据传送通用寄存器与段寄存器之间的数据传送例如例如 MOV DS,AX MOV AX,ES注意:注意:l向段寄存器送数据,源操作数不能用立即数,向段寄存器送数据,源操作数不能用立即数,l只能从通用数据寄存器或存储器只能从通用数据寄存器或存储器段寄存器段寄存器l不能向不能向CS传送传送6第6页,本讲稿共37页例如例如 MOV AL,BX MOV 1234H,BX 段寄存器和存储单元之间的数据传送段寄存器和存储单元之间的数据传送例如例如 MOV DS,3000H MOV BX+SI,CS 立即数送通用寄存器立即数送通用寄存器 MOV AX,1234H ;将立即数将立即数1234HAX 立即数送存储单元立即数送存储单元 MOV WORD PTR DI,0800H表示是一个字型数据表示是一个字型数据 通用寄存器和存储单元之间的数据传送通用寄存器和存储单元之间的数据传送7第7页,本讲稿共37页是双操作数指令,源操作数和目的操作数的类型必须一致。是双操作数指令,源操作数和目的操作数的类型必须一致。若立即若立即数没有明确的类型,汇编程序数没有明确的类型,汇编程序MASM负责将立即数扩展为与目的操负责将立即数扩展为与目的操作数位数相同。有时作数位数相同。有时MASM不能确定内存操作数的类型,需要用不能确定内存操作数的类型,需要用byte ptr和和word ptr明确指出是字节或字类型。明确指出是字节或字类型。两个操作数不能同时都是存储器操作数,既不能将存储器中的内容直两个操作数不能同时都是存储器操作数,既不能将存储器中的内容直接传送到另一个存储器,而必须经过一次向寄存器传送的过渡。接传送到另一个存储器,而必须经过一次向寄存器传送的过渡。例如例如 MOV BX,DI是错误的,而应该如下处理是错误的,而应该如下处理 MOV AL,DI MOV BX,AL 使用使用MOVMOV指令需要注意指令需要注意8第8页,本讲稿共37页不能用不能用CS寄存器作目的操作数。一般寄存器作目的操作数。一般CS,IP在执行转移指令时改在执行转移指令时改变。变。立即数不能传送到段寄存器中。立即数不能传送到段寄存器中。MOV seg,DATA ;错误错误段寄存器之间不能直接传送数据段寄存器之间不能直接传送数据立即数不能作为目的操作数立即数不能作为目的操作数9第9页,本讲稿共37页例:错误的例:错误的MOV 指令如下所示:指令如下所示:MOV AX,BL ;类型不匹配;类型不匹配MOV DS,1000H ;不允许立即数送段寄存器;不允许立即数送段寄存器MOV BX,SI ;不允许内存操作数之间传送;不允许内存操作数之间传送MOV ES,CS ;不允许段寄存器之间传送;不允许段寄存器之间传送MOV CS,AX ;CS不能作为目的操作数不能作为目的操作数例:判断以下指令使用是否正确。例:判断以下指令使用是否正确。MOV 123,BL ;错误,目的操作数不能是立即错误,目的操作数不能是立即数数MOV AL,0 ;正确,正确,MASM可以判断出可以判断出 ;要送字节;要送字节0MOV BYTE PTR 1234,35H ;正确。正确。10第10页,本讲稿共37页(1)(1)格式:格式:XCHG dst,src XCHG dst,src ;交换;交换dstdst与与srcsrc的内容的内容(2)(2)功能:功能:两个操作数交换位置。两个操作数交换位置。指令执行后,源操作数变成目的操作数,目的操作数指令执行后,源操作数变成目的操作数,目的操作数变成源操作数,不影响标志位。变成源操作数,不影响标志位。例如例如 (AX)=1234H,(BX)=5678HAX)=1234H,(BX)=5678H执行执行 XCHG AX,BX XCHG AX,BX 后后(AX)=5678H,(BX)=1234H(AX)=5678H,(BX)=1234H2 2XCHGXCHG(ExchangeExchange):交换指令):交换指令11第11页,本讲稿共37页其中一个操作数可以使存储器型操作数,存储器可以使其中一个操作数可以使存储器型操作数,存储器可以使用各种寻址方式,例如用各种寻址方式,例如 XCHG BX,BP+SI;基址变址寻址方式;基址变址寻址方式 XCHG AX,12345H;直接寻址方式;直接寻址方式 XCHG AX,BX ;寄存器间接寻址方式寄存器间接寻址方式 XCHG AX,100HSI ;变址寻址变址寻址12第12页,本讲稿共37页(3)使用注意事项l可以在两个寄存器、或寄存器与存储器之间交换l不能与段寄存器进行交换,l也不能与立即数进行交换l存储器两单元之间不能进行交换。13第13页,本讲稿共37页堆栈概念堆栈概念 -存储器的一段区域,按存储器的一段区域,按“先进后出先进后出”的原则进行存出操作。的原则进行存出操作。8086/8088系统,堆栈位于堆栈段,其段基地址由系统,堆栈位于堆栈段,其段基地址由SS指示,指示,SP寄存寄存器作为指针,器作为指针,SP内容始终指向栈顶所在存储单元。内容始终指向栈顶所在存储单元。作用:作用:在调用一个过程时,保存返回地址;在调用一个过程时,保存返回地址;保存现场保存现场中断服务程序、中断服务程序、或子程序中用到某些寄存器或存储或子程序中用到某些寄存器或存储单元,但这些寄存器或存储单元在主程序中也用到,并且它的内单元,但这些寄存器或存储单元在主程序中也用到,并且它的内容不能被子程序或中断服务程序破坏。容不能被子程序或中断服务程序破坏。暂时存放寄存器或存储器单元操作数的内容。暂时存放寄存器或存储器单元操作数的内容。3.4.2 3.4.2 堆栈操作指令堆栈操作指令14第14页,本讲稿共37页注意:注意:80X86 80X86的的SPSP总是指向最后一个压入堆栈的字的存放地址;总是指向最后一个压入堆栈的字的存放地址;80X86 80X86的堆栈是向下增长的的堆栈是向下增长的每次压入前,先使每次压入前,先使SP-2SP-2,然后将要,然后将要压入的数据存放到压入的数据存放到 SSSS:SP SP 指定的存储单元。指定的存储单元。弹出:先将弹出:先将SS:SPSS:SP指定的存储单元的内容取出到目的操作数,然指定的存储单元的内容取出到目的操作数,然后后SP+2.SP+2.要使用堆栈,需要先设置要使用堆栈,需要先设置SPSP。每次压入或弹出都以字为单位每次压入或弹出都以字为单位15第15页,本讲稿共37页 格式:格式:PUSH src ;功能:将功能:将src压入堆栈。压入堆栈。Src可以是可以是16位的寄存器,段寄存器,字存位的寄存器,段寄存器,字存储单元。储单元。操作过程:先修改操作过程:先修改SP的内容的内容:(SP)(SP)-2,使使SP指向新的栈顶,然后将指向新的栈顶,然后将scr的低的低8位存入位存入SP指向的单元,高指向的单元,高8位存位存入入(SP)+1指向的单元。指向的单元。(1)(1)入栈指令入栈指令16第16页,本讲稿共37页例如,原例如,原(SP)=104H,(AX)=1234H,执行执行PUSH AX 后(后(SP)=102H原原(SP)=104H,修改后修改后(SP)=102HAX的高字的高字节节12存放在存放在103H,低字,低字节存放在节存放在102H3412104H105HSP103H102H低地址低地址高地址高地址104H105HSP17第17页,本讲稿共37页 格式:格式:POP dst ;功能:将功能:将(SP)指向的存储单元的内容送入指向的存储单元的内容送入dst指向的寄指向的寄存器或存储单元。存器或存储单元。dst可以是可以是16位的寄存器,段寄存器,位的寄存器,段寄存器,字存储单元。字存储单元。注意:注意:CS不能作为不能作为dst。(3)(3)出栈指令出栈指令18第18页,本讲稿共37页 操作过程:先将(操作过程:先将(SP)指向的存储单元的内容送到)指向的存储单元的内容送到dst,(,(SP)为低字节,(为低字节,(SP)+1为高字节,然后修改为高字节,然后修改(SP)=(SP)+2该过程与入栈相反。该过程与入栈相反。19第19页,本讲稿共37页源操作数和目的操作数为源操作数和目的操作数为16位,可以是通用寄存器、位,可以是通用寄存器、段寄存器、内存操作数。但段寄存器、内存操作数。但CS不能作为目的操作数。不能作为目的操作数。遵循先进后出的原则遵循先进后出的原则SP总是指向栈顶,压栈时,高字节压入到高地址,总是指向栈顶,压栈时,高字节压入到高地址,低字节压入到低地址。出栈刚好相反。低字节压入到低地址。出栈刚好相反。(4 4)使用堆栈指令的注意事项)使用堆栈指令的注意事项20第20页,本讲稿共37页1.换码指令换码指令 XLAT(1)格式:)格式:XLAT(2)功能:功能:将将AL中的内容作为从表首地址的偏移地址,从中的内容作为从表首地址的偏移地址,从表中取出一个数据,再送回表中取出一个数据,再送回AL。表首地址存放在表首地址存放在BX中。中。(BX)+(AL)为地址的内容取出为地址的内容取出AL 该指令规定:该指令规定:BX和和AL的内容之和作为偏移地址。的内容之和作为偏移地址。该指令对于进行代码转换非常有用该指令对于进行代码转换非常有用只要利用该指令查表。只要利用该指令查表。3.4.3 3.4.3 其他传送指令其他传送指令21第21页,本讲稿共37页例如:计算机内部计算的数据,在转换成十进制数据后,要例如:计算机内部计算的数据,在转换成十进制数据后,要送到七段送到七段LED数字显示器显示。七段显示器如下数字显示器显示。七段显示器如下abcdefg它有它有ag七段七段LED组成。有共阴极组成。有共阴极和共阳极两种方式。和共阳极两种方式。gfedcbacomgfedcbacom22第22页,本讲稿共37页每一段需要有一个控制信号,当有电流流过时发光。每一段需要有一个控制信号,当有电流流过时发光。假设使用共阴极方式的数码管,则假设使用共阴极方式的数码管,则com应该接低电位,应该接低电位,ag如果为高电位,对应的段(笔画)亮。如果为高电位,对应的段(笔画)亮。gfedcbacomD0D1D2D3D4D5D6R通常的接法如图。用一个字节的通常的接法如图。用一个字节的D0D6控制控制ag,假设,假设com接地。则接地。则DK=1,对应的笔画亮。对应的笔画亮。23第23页,本讲稿共37页这样,要现实的这样,要现实的数据与控制数据与控制LED的控制信号之的控制信号之间就有一种对间就有一种对应关系应关系要显示的数字显示控制码十六进制显示控制码D7D0(二进制)03F0011 1111B1060000 0110B25B0101 1011B34F0100 1111B4660110 0110B56D0110 1101B67D0111 1101B7070000 0111B87F0111 1111B96F0110 1111B24第24页,本讲稿共37页这种转换利用这种转换利用XALT指令就比较容易实现。指令就比较容易实现。方法是:方法是:将控制码做成一个表格存放在内存中,表格中的控制码将控制码做成一个表格存放在内存中,表格中的控制码按按09的顺序存放,表的开始地址用符号的顺序存放,表的开始地址用符号TABLE表示。在需表示。在需要转换时,将要转换(显示)的十进制数送到寄存器要转换时,将要转换(显示)的十进制数送到寄存器AL中,中,表头地址送到表头地址送到BX中,则执行中,则执行XLAT指令就可实现所需要的指令就可实现所需要的转换。假设将转换。假设将6转换成对应的显示控制码转换成对应的显示控制码25第25页,本讲稿共37页TABLE DB 3FH,06H,5BH,4FH,66H DB 6DH,7DH,07H,7FH,6FH MOV AL,6 MOV BX,OFFSET TABLE;表首地址 XLAT 取TABLE的地址到BX这样就取出了这样就取出了6的显示控制码,只要送到显示控制电路,就可实现的显示控制码,只要送到显示控制电路,就可实现对对6的显示。的显示。在实际应用中,待显示的信息是检测、或运算结果。在实际应用中,待显示的信息是检测、或运算结果。26第26页,本讲稿共37页还可以将一些特定函数造成表,存放在存储器中,例还可以将一些特定函数造成表,存放在存储器中,例如正弦函数等。如正弦函数等。27第27页,本讲稿共37页将操作数所在存储器的地址送入目标寄存器。将操作数所在存储器的地址送入目标寄存器。(1)取有效地址指令)取有效地址指令 指令格式指令格式:LEA dst,scrscr存储单元地址存储单元地址dst16位的通用寄存器位的通用寄存器 功能:功能:将源操作数的有效地址将源操作数的有效地址EA送目的操作数所指向的寄送目的操作数所指向的寄存器。存器。注意:注意:对于该指令,原操作数一定是存储单元的操作数地址,对于该指令,原操作数一定是存储单元的操作数地址,目的操作数一定是目的操作数一定是16位的通用寄存器。位的通用寄存器。2 2 地址传送指令地址传送指令28第28页,本讲稿共37页例如:假设例如:假设(DS)=1000H,(SI)=3000H,(14000H)=7788H执行指令:执行指令:LEA BX,SI+1000H ;(BX)=4000H,取地址,取地址而执行下一指令:而执行下一指令:MOV BX,SI+1000H ;(BX)=7788H,取数据,取数据前面还使用了一种取地址的方法前面还使用了一种取地址的方法 MOV BX,OFFSET TABLE它与取地址指令它与取地址指令 LEA BX,TABLE效果是相同的。效果是相同的。29第29页,本讲稿共37页LEA 指令与指令与MOV 指令的区别:指令的区别:LEA SI,BUFF 指令是将标号指令是将标号BUFF的偏移地址送入寄存器中;的偏移地址送入寄存器中;MOV SI,BUFF指令是将标号指令是将标号BUFF所指存储单元的内容送入所指存储单元的内容送入SI。LEA SI,BUFF;执行后:(执行后:(SI)=0002HMOV SI,BUFF;执行后:(执行后:(SI)=0048HBUFF=0123454800FEFF30第30页,本讲稿共37页 格式:格式:LDS dst,src 功能:把源操作数功能:把源操作数src指定的连续指定的连续4个存储单元中存放的个存储单元中存放的32位地址指针(一个位地址指针(一个16位的段基址,一个位的段基址,一个16位的偏移量)传位的偏移量)传送到两个送到两个16位的寄存器中,其中低位的寄存器中,其中低16位是偏移量,送位是偏移量,送dst,高二字节是段基址,送高二字节是段基址,送DS。例如:例如:(DS)=3200H,(33550h)=1234H,(33552)=5678H执行执行 LDS SI,1550H 后后 -从从32000+1550=33550H开始取开始取4个字节个字节(SI)=1234H,(DS)=5678H (2 2)LDS LDS 指令指令31第31页,本讲稿共37页 格式格式 LES dst,src 功能:与功能:与LDS指令相似,只是将段寄存器指令相似,只是将段寄存器DS换成了换成了ES。(3 3)LES LES 指令指令32第32页,本讲稿共37页(1)LAHF 指令指令 格式:格式:LAHF 功能:功能:将标志寄存器的低将标志寄存器的低8位送位送AH。注意:标志寄存器内容不变化。注意:标志寄存器内容不变化。(2)SAHF指令指令 格式:格式:SAHF 功能:功能:AH内容送标志寄存器的低内容送标志寄存器的低8位。位。传送到传送到AH,是为了对某些位进行修改,是为了对某些位进行修改3 3 标志寄存器传送指令标志寄存器传送指令33第33页,本讲稿共37页(3)PUSHF指令指令 格式:格式:PUSHF 功能:功能:16位标志寄存器内容压入堆栈。位标志寄存器内容压入堆栈。(4)POPF 指令指令 格式:格式:POPF 功能:功能:将当前将当前SP所指的一个字数据送标志寄存器。所指的一个字数据送标志寄存器。34第34页,本讲稿共37页对于对于8086 8086,对于标志寄存器,对于标志寄存器FLAGSFLAGS高高8 8位中的位中的OF,DF,IFOF,DF,IF有专用的置位和复位指令,但对有专用的置位和复位指令,但对TFTF没有,要修改该位,没有,要修改该位,需要将标志寄存器传送到通用数据寄存器,在通用寄需要将标志寄存器传送到通用数据寄存器,在通用寄存器中修改,然后再传送回标志寄存器存器中修改,然后再传送回标志寄存器FLAGSFLAGS。但又没。但又没有有FLAGSFLAGS与通用寄存器的传送指令,这时只好利用与通用寄存器的传送指令,这时只好利用PUSHFPUSHFPOPFPOPF指令指令例如:要将例如:要将TFTF “0”“0”35第35页,本讲稿共37页PUSHFPUSHFPOP AXPOP AXAND AH,11111110B AND AH,11111110B ;FLAGS;FLAGS的的D8(TF)D8(TF)清为清为0 0PUSH AXPUSH AXPOPFPOPF 36第36页,本讲稿共37页(1)LAHF/SAHF指令是寄存器指令是寄存器AH与标志寄存器与标志寄存器FLAGS的的低字节之间完成的字节型数据传送。低字节之间完成的字节型数据传送。(2)PUSHF/POPF指令是标志寄存器指令是标志寄存器PSW与堆栈间进行的与堆栈间进行的字型数据传送。字型数据传送。(3)指令)指令SAHF/POPF将影响标志位。将影响标志位。(4)8086/8088没有对单步标志位没有对单步标志位TF的直接操作指令,可以利的直接操作指令,可以利用用PUSHF指令将标志寄存器压栈,然后弹出到一个通用数指令将标志寄存器压栈,然后弹出到一个通用数据寄存器,对它进行修改,将修改后的通用数据寄存器压据寄存器,对它进行修改,将修改后的通用数据寄存器压栈,最后利用栈,最后利用POPF,将修改后的值弹出送标志寄存器。,将修改后的值弹出送标志寄存器。(原因是(原因是TF在高在高8位)位)对标志寄存器操作指令的附加说明:对标志寄存器操作指令的附加说明:37第37页,本讲稿共37页