《最新大学汇编课件第章ppt课件.ppt》由会员分享,可在线阅读,更多相关《最新大学汇编课件第章ppt课件.ppt(51页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、大学汇编课件第章大学汇编课件第章 ADD加法指令加法指令 指令格式:指令格式:ADD DEST,SRC 指令功能:指令功能:DEST (SRC)+( DEST),即源操作数与目的),即源操作数与目的操作数相加,其和送入目的地址中。并根据相加结果操作数相加,其和送入目的地址中。并根据相加结果设置设置FLAGS的的OF、SF、ZF、AF、PF和和CF标志位标志位。该指令执行后,。该指令执行后,源操作数保持不变。源操作数保持不变。【例例4-29】 加法指令的常用格式有:加法指令的常用格式有:ADD BX,SIADD DA_WORD,0F8CHADD DL,TABBX SUB减法指令减法指令 指令格式
2、:指令格式:SUB DEST,SRC 指令功能:指令功能:DEST (DEST) ( SRC),即完成从目的操),即完成从目的操作数中减去源操作数,其差值送入目的地址中;并按相减结作数中减去源操作数,其差值送入目的地址中;并按相减结果设置标志位果设置标志位OF、SF、ZF、AF、PF和和CF。【例例4-32】 SUB指令的常用格式如下:指令的常用格式如下:SUB AL,3FHSUB BX,AX 下面以指令下面以指令“SUB AL,DAB”为例,给出该指令的相减及设置标为例,给出该指令的相减及设置标志位过程。设志位过程。设AL内容为内容为B7H,DAB字节单元内容为字节单元内容为A8H:结果不为
3、零,则结果不为零,则ZF 0;结果无溢出,则结果无溢出,则OF 0; 结果中有偶数个结果中有偶数个1,则,则PF 1。 SBB带借位减法指令带借位减法指令 指令格式:指令格式:SBB DEST,SRC 指令功能:指令功能:DEST (DEST) ( SRC) CF,即在,即在完成两个操作数相减的同时,完成两个操作数相减的同时,还要减去借位位还要减去借位位CF,相,相减结果送入目的地址中;并设置标志位减结果送入目的地址中;并设置标志位OF、SF、ZF、AF、PF和和CF。 DEC减减1指令指令 指令格式:指令格式:DEC DEST 指令功能:指令功能:DEST (DEST) 1,即目的操作数减,
4、即目的操作数减1后送后送回目的地址中;并根据执行结果设置标志位回目的地址中;并根据执行结果设置标志位OF、SF、ZF、AF和和PF,但不影响,但不影响CF。 NEG求补指令求补指令 指令格式:指令格式:NEG DEST 指令功能:指令功能:DEST 0 ( DEST),即用零减去目的操作数,),即用零减去目的操作数,相减结果送回目的地址中;并按结果设置标志位相减结果送回目的地址中;并按结果设置标志位OF、SF、ZF、AF、PF和和CF。 NEG指令属单操作数指令,操作数可以是字节、字或双指令属单操作数指令,操作数可以是字节、字或双字,且被当作补码表示的带符号数。字,且被当作补码表示的带符号数。
5、 如果字节操作数是如果字节操作数是 128、字操作数是、字操作数是 32768,在执行,在执行NEG指令后,操作数不变,但溢出标志指令后,操作数不变,但溢出标志OF置置1。这是由于。这是由于+128或或 +32768超出了超出了8位或位或16位带符号数的表示范围,即产生位带符号数的表示范围,即产生了溢出。如操作数为零,求负的结果仍为零,则标志位了溢出。如操作数为零,求负的结果仍为零,则标志位CF置置0;否则否则CF置置1。 NEG ALNEG BL以上指令执行后,以上指令执行后,AL中为负数中为负数 25H的补码:的补码: (AL) DBH 11011011B。BL中则为正数:(中则为正数:(
6、BL) 58H 01011000B。【例例4-34】 设设AL中存放一正数:(中存放一正数:(AL) 25H 00100101B。BL中存放负数中存放负数 58H的补码:(的补码:(BL) A8H 10101000B。可用。可用以下指令获得以下指令获得AL、BL中数的负数:中数的负数:假设(假设(AX)=0FFFFH,有以下程序段:,有以下程序段:INC AXNEG AXDEC AXNEG AX上述程序段执行后,(上述程序段执行后,(AX)=? CMP比较指令比较指令 指令格式:指令格式:CMP DEST,SRC 指令功能:指令功能:(DEST) ( SRC),两个操作数相减后,仅按相),两个
7、操作数相减后,仅按相减结果设置标志位减结果设置标志位OF、SF、ZF、AF、PF和和CF,而不保留两数,而不保留两数相减的差。相减的差。 CMP指令与指令与SUB指令的不同之处是,运算结果不送回目的指令的不同之处是,运算结果不送回目的地址中。因此地址中。因此CMP指令执行后,两个操作数都不变,只影响状指令执行后,两个操作数都不变,只影响状态标志位。态标志位。CMP指令后往往跟着一个条件转移指令指令后往往跟着一个条件转移指令,根据比较,根据比较结果产生不同的程序分支。例如:结果产生不同的程序分支。例如:CMP AL,BLJZ EQL CMP指令可利用所设标志位的状态来反映两个操作数的大小。指令可
8、利用所设标志位的状态来反映两个操作数的大小。CMP指令执行后,若指令执行后,若ZF 1,表示(,表示(DEST) (SRC)。对于)。对于无符号数,若无符号数,若CF 0,表示(,表示(DEST)(SRC);若);若CF 1,则,则(DEST)()(SRC)。)。(3)乘法运算指令)乘法运算指令 MUL(unsigned MULtiple) 无符号数乘法。无符号数乘法。 IMUL(sIgned MULtiple) 带符号数乘法。带符号数乘法。 MUL无符号数乘法指令无符号数乘法指令 指令格式:指令格式:MUL SRC 指令功能:指令功能: 字节操作数字节操作数 AX (AL)*(SRC) 字操
9、作数字操作数 DX:AX (AX)*(SRC) 其中(其中(SRC)是乘法运算的一个操作数,它只能在通用寄存)是乘法运算的一个操作数,它只能在通用寄存器或存储单元中(不能是立即数),而另一个操作数隐含在器或存储单元中(不能是立即数),而另一个操作数隐含在 AL(字节乘)、(字节乘)、AX(字乘)或(字乘)或EAX(双字乘)寄存器中。(双字乘)寄存器中。 MUL指令只影响标志寄存器中指令只影响标志寄存器中CF、OF标志位。标志位。MUL指令指令执行后,如果乘积的高一半为执行后,如果乘积的高一半为0,即,即AH(字节乘)、(字节乘)、DX(字(字乘法)或乘法)或EAX(双字乘)全为(双字乘)全为0
10、,则,则CF 0和和OF 0;否则;否则CF 1,OF 1(表示(表示AH、DX或或EDX中有乘积的有效数字)。中有乘积的有效数字)。 IMUL带符号数乘法指令带符号数乘法指令 指令格式:指令格式:IMUL SRC 指令功能:指令功能:与与MUL相同,但操作数和乘积必须是带符号数且用相同,但操作数和乘积必须是带符号数且用补码表示,而补码表示,而MUL的操作数和乘积均是无符号数。的操作数和乘积均是无符号数。 执行执行IMUL指令后,如果乘积的高一半是低一半的符号扩展,指令后,如果乘积的高一半是低一半的符号扩展,则则CF和和OF均为均为0;否则均为;否则均为1。 【例例4-35】 设(设(AL)
11、0B4H 76D,(,(BL) 11H 17D; 执行指令执行指令“IMUL BL”后:后: 乘积为(乘积为(AX) 0FAF4H 1292D,CF OF 1。 【例例4-36】 设(设(AL) 0AH 10D,(,(BL) 11H 17D; 执行指令执行指令“MUL BL“后:后: 乘积为(乘积为(AX) 00AAH 0170D,CF OF 0。(4)除法运算指令)除法运算指令 DIV(unsigned DIVide) 无符号数除法。无符号数除法。 IDIV(sIgned DIVide)带符号数除法。带符号数除法。 DIV无符号数除法指令无符号数除法指令 指令格式:指令格式:DIV SRC
12、指令功能:指令功能:将隐含存放在将隐含存放在AX(字节除)、(字节除)、DX:AX(字除)(字除)或或EDX:EAX(双字除)中的被除数除以除数(双字除)中的被除数除以除数(SRC),除后),除后的商和余数送入隐含指定的寄存器中。的商和余数送入隐含指定的寄存器中。 字节操作:字节操作:AL (AX)/( SRC)的商)的商 AH (AX)/( SRC)的余数)的余数 字操作:字操作:AX (DX:AX)/( SRC)的商)的商 DX (DX:AX)/( SRC)的余数)的余数DIV指令中的被除数和除数必须是无符号数,其商和余数也是无符指令中的被除数和除数必须是无符号数,其商和余数也是无符号数。
13、号数。 DIV指令对标志寄存器无有效标志结果。但是以下两种情况指令对标志寄存器无有效标志结果。但是以下两种情况之一,将产生之一,将产生0型中断(除法出错中断)转入除法出错中断处理。型中断(除法出错中断)转入除法出错中断处理。 除数为除数为0,即(,即(SRC)= 0。 商溢出,即(商溢出,即(AL)中的商中的商0FFH,(,(AX)中的商中的商0FFFFH IDIV带符号数除法指令带符号数除法指令 指令格式:指令格式:IDIV SRC 指令功能:指令功能:与与DIV相同,但操作数、商和余数必须是带符号相同,但操作数、商和余数必须是带符号数且用补码表示,余数的符号与被除数的符号相同。数且用补码表
14、示,余数的符号与被除数的符号相同。 带符号数除法的商中,最大的正数商是带符号数除法的商中,最大的正数商是+127(7FH)、)、+32767(7FFFH)或或+65535(7FFFFFFFH),),最小的负数商是最小的负数商是 127(81H)、)、 32767(8001H)或或 65535(80000001H)。)。同同DIV指令一样,当除数(指令一样,当除数(SRC) 0或商超出上述的最大值或最小或商超出上述的最大值或最小值时,均产生值时,均产生0型中断。型中断。 由于除法指令的字节操作要求被除数为由于除法指令的字节操作要求被除数为16位,字操作要求被除位,字操作要求被除数为数为32位,双
15、字操作要求被除数为位,双字操作要求被除数为64位,因此往往需要用符号扩展位,因此往往需要用符号扩展的方法取得除法指令所需要的被除数格式。的方法取得除法指令所需要的被除数格式。 【例【例4-394-39】 两个两个8 8位带符号数分别放在位带符号数分别放在BYTE1BYTE1、BYTE2BYTE2字节存字节存储单元中,将储单元中,将BYTE1BYTE1内容除以内容除以BYTE2BYTE2内容,商放在内容,商放在QUOTQUOT字节单元中,字节单元中,可用以下指令实现:可用以下指令实现:MOVAL,BYTE1CBWIDIVBYTE2MOVQUOT,AL 假设假设DAW1和和DAW2分别是两个字单元
16、的符号地址,请按分别是两个字单元的符号地址,请按下列要求写出指令序列:下列要求写出指令序列:(1)DAW1和和DAW2两个字数据相乘(用两个字数据相乘(用MUL)。)。MOV AX,DAW1MUL DAW2(2)DAW1除以除以23(用(用DIV)。)。MOV AX,DAW1MOV BL,23DIV BL3逻辑类指令逻辑类指令 这类指令包括逻辑运算指令、位测试指令、位扫描指令和移这类指令包括逻辑运算指令、位测试指令、位扫描指令和移位指令。位指令。 (1)逻辑运算指令)逻辑运算指令 逻辑运算指令共有逻辑运算指令共有5条,其指令格式及功能分别如下:条,其指令格式及功能分别如下: AND逻辑与指令逻
17、辑与指令 指令格式:指令格式:AND DEST,SRC 指令功能:指令功能:DEST(SRC)(DEST) OR逻辑或指令逻辑或指令 指令格式:指令格式:OR DEST,SRC 指令功能:指令功能:DEST(SRC)(DEST) XOR逻辑异或指令逻辑异或指令 指令格式:指令格式:XOR DEST,SRC 指令功能:指令功能:DEST(SRC) (DEST) NOT逻辑非指令逻辑非指令 指令格式:指令格式:NOT DEST 指令功能:指令功能:DEST (DEST) TEST测试指令测试指令 指令格式:指令格式:TEST DEST,SRC 指令功能:(指令功能:(SRC)(DEST) 上述指令
18、对操作数都是按位进行逻辑运算的,操作数可以上述指令对操作数都是按位进行逻辑运算的,操作数可以是字节、字或双字。是字节、字或双字。NOTNOT指令对标志位无影响,其余指令对标志位无影响,其余4 4条指令影条指令影响的标志位是响的标志位是SFSF、ZFZF、PFPF,置置CFCF、OFOF为为0 0,AFAF不确定。不确定。TESTTEST指指令与令与ANDAND指令的不同之处是,运算结果不送回目的地址中。因指令的不同之处是,运算结果不送回目的地址中。因此此TESTTEST指令执行后,两个操作数都不变,只影响标志位。指令执行后,两个操作数都不变,只影响标志位。 这些指令常用于对操作数的某些位进行分
19、离、组合或设置,例这些指令常用于对操作数的某些位进行分离、组合或设置,例如:如:ANDAL,0F0H;分离出分离出AL中的高中的高4位位ORAL,80H;将将AL中最高位置中最高位置1XORAX,AX;将将AX内容清零内容清零XORAL,01H;将将AL中最低位变反中最低位变反 【例【例4-40】可用以下程序段实现将标志寄存器的第】可用以下程序段实现将标志寄存器的第8位位TF位位置置1:PUSHFPOPAXORAX,100HPUSHAXPOPF假设(假设(AX)=0FF60H,有以下程序段:,有以下程序段:STCMOV DX,96XOR DH,0FFHSBB AX,DX上述程序段执行后,(上述
20、程序段执行后,(AX)=?CF=?(4)移位指令)移位指令 移位指令可按操作数的个数分为单操作数移位指令(移位指令可按操作数的个数分为单操作数移位指令(8条)条)和双操作数移位指令(和双操作数移位指令(2条)。条)。80386及其后继机型增加的双精度及其后继机型增加的双精度移位指令就是双操作数移位指令。移位指令就是双操作数移位指令。 SHL(SHift logical Left) 逻辑左移。逻辑左移。 SAL(Shift Arithmetic Left) 算术左移。算术左移。 SHR(SHift logical Right) 逻辑右移。逻辑右移。 SAR(Shift Arithmetic Ri
21、ght) 算术右移。算术右移。 ROL(ROtate Left) 循环左移。循环左移。 ROR(ROtate Right) 循环右移。循环右移。 RCL(Rotate Left through Carry) 带进位循环左移。带进位循环左移。 RCR(Rotate Right through Carry) 带进位循环右移。带进位循环右移。 单操作数移位指令单操作数移位指令 这种移位指令共有这种移位指令共有8条,它们可以对通用寄存器或存储单元条,它们可以对通用寄存器或存储单元中的操作数进行指定移位,即一次可只移一位或按中的操作数进行指定移位,即一次可只移一位或按CL中的内容中的内容规定移位次数(位
22、数)。规定移位次数(位数)。移位指令可分为:算术移位指令、逻辑移位指令可分为:算术移位指令、逻辑移位指令和循环移位指令。移位指令和循环移位指令。这这8条指令有如下共同点:条指令有如下共同点: 具有相同的指令格式具有相同的指令格式 OPR DEST,COUNT。 每条指令都是单操作数指令,即只需一个操作数每条指令都是单操作数指令,即只需一个操作数DEST。 DEST只能是只能是8/16/32位通用寄存器或存储器操作数,不能是立即位通用寄存器或存储器操作数,不能是立即数。但只有数。但只有80386及其后继机型才能使用及其后继机型才能使用32位操作数。位操作数。 COUNT表示移位次数表示移位次数
23、对于对于8086/80286,移位一次,移位一次,COUNT可可用常数用常数1替代;移位多次,则必须用替代;移位多次,则必须用CL替代,替代,CL中存放移位次中存放移位次数。对于数。对于80386及其后继机型,及其后继机型,COUNT还可以是还可以是8位立即数,可位立即数,可指定指定131的移位次数。的移位次数。a. 算术移位指令算术移位指令 指令格式:指令格式:算术左移指令算术左移指令SAL DEST,COUNT 算术右移指令算术右移指令SAR DEST,COUNT 指令功能:指令功能:算术左移指令将算术左移指令将DEST指定的指定的8/16/32位操作数左移位操作数左移COUNT次。最高位
24、移入次。最高位移入CF中,最低位补中,最低位补0,移位操作如图(,移位操作如图(a)所示。算术右移指令将所示。算术右移指令将DEST指定的指定的8/16/32位操作数右移位操作数右移COUNT次。右移时,最高符号位保持不变,连同符号位依次右次。右移时,最高符号位保持不变,连同符号位依次右移,最低位移入移,最低位移入CF中,如图(中,如图(b)所示。)所示。 算术移位指令算术移位指令主要用于对带符号数的移位,左移一位相当于乘主要用于对带符号数的移位,左移一位相当于乘2;右移一位相当于除;右移一位相当于除2。算术移位后应保持该数的符号不变。算术移位后应保持该数的符号不变。 例如:(例如:(AL)
25、11000001B( 63的补码),(的补码),(BL) 10111111B(负数负数 65的补码)。以下指令将的补码)。以下指令将AL、BL中的数左移一中的数左移一位:位:SAL AL,1SAL BL,1以上指令执行后,(以上指令执行后,(AL) 10000010B即即 126的补码,不溢出的补码,不溢出OF 0,结果符合倍增关系;而(结果符合倍增关系;而(BL) 01111110B,左移后发生左移后发生溢出,则溢出,则OF 1,因此因此BL内容不再符合倍增关系。内容不再符合倍增关系。 通常算术移位指令通常算术移位指令用于实现带符号数的简单乘除运算,其执用于实现带符号数的简单乘除运算,其执行
26、时间比用乘除指令短得多。行时间比用乘除指令短得多。 例例4-44 AX中已存放一个带符号数,若要完成中已存放一个带符号数,若要完成(AX)* 3 2 运算,可用以下程序段实现:运算,可用以下程序段实现:MOV DX, AX SAL AX, 1 ADD AX, DXSAR AX, 1 b. 逻辑移位指令逻辑移位指令 指令格式:指令格式:逻辑左移指令逻辑左移指令 SHL DEST,COUNT 逻辑右移指令逻辑右移指令 SHR DEST,COUNT 指令功能:指令功能:将将DEST指定的指定的8/16/32位寄存器或存储器操作数移位寄存器或存储器操作数移位位COUNT次。次。 SHL实现将操作数左移
27、,最高位移入实现将操作数左移,最高位移入CF中,最低位补中,最低位补0,如图(如图(a)所示。)所示。 SHR实现将操作数右移,最低位移入实现将操作数右移,最低位移入CF中,最高位补中,最高位补0,如图(如图(b)所示。)所示。例例4-45 要求把由要求把由CL中的数(中的数(0-15)所指定的)所指定的AX中的中的位分离出来,可用以下程序段实现:位分离出来,可用以下程序段实现:MOV BX, 1SHL BX, CLAND AX, BXc. 循环移位指令循环移位指令 指令格式:指令格式: 循环左移指令循环左移指令 ROL DEST,COUNT 循环右移指令循环右移指令 ROR DEST,COU
28、NT 带进位循环左移指令带进位循环左移指令 RCL DEST,COUNT 带进位循环右移指令带进位循环右移指令 RCR DEST,COUNT 指令功能:指令功能:将将DEST指定的指定的8/16/32位寄存器或存储器操作数移位位寄存器或存储器操作数移位COUNT次。次。 ROL / ROR 实现将操作数循环左移实现将操作数循环左移/右移。右移。 RCL / RCR 实现将操作数和实现将操作数和CF一起循环左移一起循环左移/右移。右移。 受影响的状态标志位:受影响的状态标志位:CF、OF。CF存放每次移出的位。如果移存放每次移出的位。如果移位指令只移一位,且移位前后操作数的符号位发生变化,则将位
29、指令只移一位,且移位前后操作数的符号位发生变化,则将OF置置1;否则;否则OF置置0。如移位次数大于。如移位次数大于1,则,则OF不确定。不确定。 循环移位指令的移位操作如下图所示:循环移位指令的移位操作如下图所示:当多字节或多字数据进行移位时,常用到带进位循环移位指令。当多字节或多字数据进行移位时,常用到带进位循环移位指令。 【例【例4-46】 由由3个字构成的一个无符号数从高位到低位依次存个字构成的一个无符号数从高位到低位依次存放在放在M+4,M+2,M字单元中,若要将该数右移一位,则可用以下字单元中,若要将该数右移一位,则可用以下程序段实现:程序段实现:SHR M+4,1RCR M+2,
30、1RCR M,1如下图所示,如下图所示,SHR指令将指令将M+4字单元的最低位移至字单元的最低位移至CF中。第中。第2条指令条指令RCR将将CF与与M+2字单元构成一个字单元构成一个17位的数进行一次循环右位的数进行一次循环右移,将移,将M+4单元右移出的位通过单元右移出的位通过CF移至移至M+2单元的最高位,而单元的最高位,而M+2中的最低位又移至中的最低位又移至CF。在第在第3条指令执行后,就完成将条指令执行后,就完成将3个字个字的数右移一位。的数右移一位。 假设(假设(AX)=0A5C6H,(,(CX)=0F03H,有以下程序段:有以下程序段:STCRCL AX,CLAND AH,CHR
31、CR AX,CL上述程序段执行后,(上述程序段执行后,(AX)=?CF=?(AX)=81C6H,CF=1试分别指出下列各指令语句的语法是否有错,若有错,试分别指出下列各指令语句的语法是否有错,若有错,指明是什么错误。指明是什么错误。1、MOV AL, 0F5H2、ADD BXBP,BX3、CMP AL, 100H4、TEST BP,DL5、ADC 15H, CL6、SUB DI, DA_WORD7、OR CH, CL8、MOV AL, 1000H9、SAR 10HDI,210、NOT AL, BL11、DEC CX, 112、LEA ES, TABBX4串操作类指令串操作类指令 MOVS(MO
32、Ve String)串传送。串传送。 CMPS(CoMPare String)串比较。串比较。 SCAS(SCAn String)串扫描。串扫描。 LODS(LOaD from String)取串。取串。 STOS(STOre into String)存串。存串。 INS(INput from port to String)串输入。串输入。 OUTS(OUTput String to port)串输出。串输出。与上述基本指令配合使用的前缀有:与上述基本指令配合使用的前缀有: REP(REPeat) 重复。重复。 REPE/REPZ(REPeat while Equal/Zero)相等相等/为零
33、则重复。为零则重复。 REPNE/REPNZ(REPeat while Not Equal/Not Zero)不相等不相等/不为零则重复。不为零则重复。(1)取串指令()取串指令(Load String) 指令格式:指令格式:LODS 源串源串 LODSB ;取字节串取字节串 LODSW ;取字串取字串指令功能指令功能: 字节操作字节操作AL (DS:(:(SI/ESI),),SI/ESI (SI/ESI) 1 字操作字操作AX (DS:(:(SI/ESI),),SI/ESI (SI/ESI) 2 双字操作双字操作EAX (DS:(:(SI/ESI),),SI/ESI (SI/ESI) 4 该
34、指令把由源变址寄存器指向的数据段中某单元(字节该指令把由源变址寄存器指向的数据段中某单元(字节/字字/双字)的内容送到双字)的内容送到AL、AX或或EAX中,并中,并根据方向标志根据方向标志DF和数和数据类型(字节、字或双字)修改源变址寄存器的内容。若据类型(字节、字或双字)修改源变址寄存器的内容。若DF 0表示串操作按地址递增的方向处理,则修改表示串操作按地址递增的方向处理,则修改SI/ESI内容用内容用“+”; 若若DF 0表示串操作按地址递减的方向处理,则修改表示串操作按地址递减的方向处理,则修改SI/ESI内容内容用用“-”。该指令也不影响标志位。该指令也不影响标志位。 (2)存串指令
35、()存串指令(Store String) 指令格式:指令格式:STOS 目的串目的串 STOSB;存字节串;存字节串 STOSW;存字串;存字串 指令功能指令功能:字节操作字节操作ES:(:(DI/EDI)(AL),),DI/EDI (DI/EDI) 1字操作字操作ES:(:(DI/EDI)(AX),),DI/EDI (DI/EDI) 2双字操作双字操作 ES:(:(DI/EDI)(EAX),),DI/EDI (DI/EDI) 4 该指令把该指令把AL、AX或或EAX的内容存入由目的变址寄存器指向的的内容存入由目的变址寄存器指向的附加段的某个单元中,并根据附加段的某个单元中,并根据DF的值及数
36、据类型修改目的变址寄的值及数据类型修改目的变址寄存器的内容。该指令不影响标志位。存器的内容。该指令不影响标志位。 (3)串传送指令()串传送指令(Move String) 指令格式:指令格式:MOVS 目的串,源串目的串,源串 MOVSB;字节串传送;字节串传送 MOVSW;字串传送;字串传送 指令功能:指令功能:字节操作字节操作ES:(:(DI/EDI)(DS:(:(SI/ESI)SI/ESI (SI/ESI) 1;DI/EDI (DI/EDI) 1字操作字操作ES:(:(DI/EDI)(DS:(:(SI/ESI)SI/ESI (SI/ESI) 2;DI/EDI (DI/EDI) 2双字操作
37、双字操作ES:(:(DI/EDI)(DS:(:(SI/ESI)SI/ESI (SI/ESI) 4;DI/EDI (DI/EDI) 4 MOVS指令把由源变址寄存器指向的数据段中的一个字节指令把由源变址寄存器指向的数据段中的一个字节(或字,或双字)传送到由目的变址寄存器指向的附加段中的一(或字,或双字)传送到由目的变址寄存器指向的附加段中的一个字节(或字,或双字)单元中去,同时根据方向标志个字节(或字,或双字)单元中去,同时根据方向标志DF及数据及数据类型对源变址寄存器和目的变址寄存器进行修改。该指令不影响类型对源变址寄存器和目的变址寄存器进行修改。该指令不影响标志位。标志位。(4)串比较指令(
38、)串比较指令(Compare String) 指令格式:指令格式:CMPS 目的串,源串目的串,源串 CMPSB;字节串比较;字节串比较 CMPSW;字串比较;字串比较指令功能:指令功能: 字节操作字节操作 (DS:(:(SI/ESI) (ES:(:(DI/EDI) SI/ESI (SI/ESI) 1;DI/EDI (DI/EDI) 1 字操作字操作 (DS:(:(SI/ESI) (ES:(:(DI/EDI) SI/ESI (SI/ESI) 2;DI/EDI (DI/EDI) 2 双字操作双字操作 (DS:(:(SI/ESI) (ES:(:(DI/EDI) SI/ESI (SI/ESI) 4;
39、DI/EDI (DI/EDI) 4 CMPS指令比较源串和目的串中的一个字节、字或双字。即:指令比较源串和目的串中的一个字节、字或双字。即:将将源变址源变址寄存器指向数据段中的一个字节(或字,或双字)寄存器指向数据段中的一个字节(或字,或双字)减去减去目的变址目的变址寄存器指向附加段中的一个字节(或字,或双字),不寄存器指向附加段中的一个字节(或字,或双字),不保留相减结果,但设置标志位:保留相减结果,但设置标志位:OF、SF、ZF、AF、PF和和CF。每比较一次,根据方向标志每比较一次,根据方向标志DF及数据类型对源变址寄存器和目及数据类型对源变址寄存器和目的变址寄存器进行修改。的变址寄存器
40、进行修改。(5)串搜索指令()串搜索指令(Scan String) 指令格式:指令格式: SCAS 目的串目的串 SCASB;字节串搜索;字节串搜索 SCASW;字串搜索;字串搜索 指令功能:指令功能: 字节操作字节操作 (AL) ( ES:(:(DI/EDI);); DI/EDI (DI/EDI) 1 字操作字操作(AX) ( ES:(:(DI/EDI);); DI/EDI (DI/EDI) 2 双字操作双字操作 (EAX) ( ES:(:(DI/EDI);); DI/EDI (DI/EDI) 4 SCAS指令在目的串中查找指令在目的串中查找AL、AX或或EAX指定的内容,即:指定的内容,即
41、:用用AL、AX或或EAX的内容的内容减去目的变址减去目的变址寄存器指向附加段中的一寄存器指向附加段中的一个字节(或字,或双字),不保留相减结果,但设置标志位:个字节(或字,或双字),不保留相减结果,但设置标志位:OF、SF、ZF、AF、PF和和CF。每查找一次,根据方向标志。每查找一次,根据方向标志DF及及数据类型对目的变址寄存器进行修改。数据类型对目的变址寄存器进行修改。 (6)重复前缀指令()重复前缀指令(Repeat) 重复前缀指令共有重复前缀指令共有3条。条。 指令格式:指令格式:REP string primitive 其中其中string primitive可为可为MOVS、ST
42、OS、LODS、INS和和OUTS指令。指令。 指令功能:指令功能: a. 如(如(CX/ECX) 0,则退出,则退出REP,否则往下执行;,否则往下执行; b.(CX/ECX )(CX/ECX) 1; c. 执行其后的串指令;执行其后的串指令; d. 重复重复ac步骤。步骤。 该指令中,如该指令中,如16位寻址,使用位寻址,使用CX作为计数器;如作为计数器;如32位寻址,用位寻址,用ECX作为计数器。作为计数器。 指令格式:指令格式:REPE string primitive 或或 REPZ string primitive其中其中string primitive可为可为CMPS和和SCAS
43、指令。指令。 指令功能:指令功能: a. 如(如(CX/ECX) 0或或ZF 0时退出,否则往下执行;时退出,否则往下执行; b.(CX/ECX )(CX/ECX) 1; c. 执行其后的串指令;执行其后的串指令; d. 重复重复ac步骤。步骤。 有关计数寄存器的规定和有关计数寄存器的规定和REP相同。与相同。与REP相比,除满足相比,除满足(CX/ECX) 0的条件可结束操作外,还增加了的条件可结束操作外,还增加了ZF 0的条件。也的条件。也就是说,在每次比较时,就是说,在每次比较时,只要两数相等(即只要两数相等(即ZF 1)就继续比较)就继续比较,如果遇到两数不相等时(即如果遇到两数不相等
44、时(即ZF 0)就提前结束操作。)就提前结束操作。 指令格式:指令格式:REPNE string primitive 或或 REPNZ string primitive 指令功能:指令功能:除退出条件为(除退出条件为(CX/ECX) 0或或ZF 1外,其他操外,其他操作与作与REPE完全相同。也就是说,在每次比较时,完全相同。也就是说,在每次比较时,只要两数比较只要两数比较的结果不相等(即的结果不相等(即ZF 0),就继续执行串处理指令),就继续执行串处理指令;如某次两;如某次两数比较相等或(数比较相等或(CX/ECX) 0,就结束操,就结束操作。例如:例如:REP MOVSB在执行这条指令之
45、前,假设在执行这条指令之前,假设DF 0,(,(SI) 0020H,(,(DI) 0100H,(,(CX) 0030H。那么,这条带有重复前缀的串传送指。那么,这条带有重复前缀的串传送指令,将把数据段从令,将把数据段从0020H开始的开始的30H个字节传送到当前附加段以个字节传送到当前附加段以0100H为起始地址的存储区中。如果不用串操作指令,上述传送为起始地址的存储区中。如果不用串操作指令,上述传送操作就需编制如下程序段:操作就需编制如下程序段: MOVSI,0020H MOVDI,0100H MOVCX,0030HLOP:MOV AL,SIMOV ES:DI,ALINC SI REP MO
46、VSBINC DILOOP LOP【例例4-49】 要求从一个字符串中查找一个指定的字符,可用指令要求从一个字符串中查找一个指定的字符,可用指令REPNZ SCASB。右右 图表示了预置及找到后的情况。从图中可以看出,(图表示了预置及找到后的情况。从图中可以看出,(AL)中指定的字符为)中指定的字符为space(空格),其(空格),其ASCII码为码为20H。 开始比较时,因(开始比较时,因(DI)指定的字符与()指定的字符与(AL)不符合而不断往下)不符合而不断往下比较,当(比较,当(DI) 1508H时,比较结果相时,比较结果相符,因此符,因此ZF 1,在修,在修改(改(DI)值后指令停)
47、值后指令停止比较而提前结束,止比较而提前结束,此时(此时(DI)是相匹配)是相匹配字符的下一个地址;字符的下一个地址;(CX)是剩下还未比)是剩下还未比较的字符个数。所以较的字符个数。所以根据(根据(DI)和()和(CX)的值可以很方便地找的值可以很方便地找到所需查找的字符的到所需查找的字符的位置。位置。 5处理机控制类指令处理机控制类指令(1)标志位操作指令)标志位操作指令 80 x86提供了一组设置或清除标志位的指令,它们只影响本提供了一组设置或清除标志位的指令,它们只影响本指令指定的标志,而不影响其他标志位。这些指令是无操作数指指令指定的标志,而不影响其他标志位。这些指令是无操作数指令,
48、指令中未直接给出操作数的地址,但隐含指出操作数在某个令,指令中未直接给出操作数的地址,但隐含指出操作数在某个标志位上。标志位上。能直接操作的标志位有能直接操作的标志位有CF、IF、DF。 清除进位标志指令(清除进位标志指令(CLear Carry flag)CLC;置;置CF 0。 进位标志置位指令(进位标志置位指令(SeT Carry flag) STC;置;置CF 1。 进位标志取反指令(进位标志取反指令(CoMplement Carry flag)CMC;CF取反。取反。 清除方向标志指令(清除方向标志指令(CLear Direction flag)CLD;置;置DF 0。 方向标志置位
49、指令(方向标志置位指令(SeT Direction flag) STD;置;置DF 1。 清除中断标志指令(清除中断标志指令(CLear Interrupt-enable flag) CLI ; 置置IF 0。 中断标志置位指令(中断标志置位指令(SeT Interrupt-enable flag) STI ; 置置IF 1。 上述指令只对指定标志位操作,而不改变其余标志位。上述指令只对指定标志位操作,而不改变其余标志位。(2)其他处理机控制指令)其他处理机控制指令 NOP(NoOPeration)无操作。)无操作。 HLT(HmLT)停机。停机。 ESC(ESCape) 换码。换码。 WAIT(WAIT) 等待。等待。 LOCK(LOCK)封锁。封锁。