ImageVerifierCode 换一换
格式:PPT , 页数:50 ,大小:275.50KB ,
文档编号:4611573      下载积分:25 文币
快捷下载
登录下载
邮箱/手机:
温馨提示:
系统将以此处填写的邮箱或者手机号生成账号和密码,方便再次下载。 如填写123,账号和密码都是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

优惠套餐
 

温馨提示:若手机下载失败,请复制以下地址【https://www.163wenku.com/d-4611573.html】到电脑浏览器->登陆(账号密码均为手机号或邮箱;不要扫码登陆)->重新下载(不再收费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录  
下载须知

1: 试题类文档的标题没说有答案,则无答案;主观题也可能无答案。PPT的音视频可能无法播放。 请谨慎下单,一旦售出,概不退换。
2: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
3: 本文为用户(晟晟文业)主动上传,所有收益归该用户。163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

1,本文(大学汇编课件第4章.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!

大学汇编课件第4章.ppt

1、2算术运算类指令算术运算类指令 算术运算类指令包括算术运算类指令包括加、减、乘、除加、减、乘、除4种指令。这类指令可种指令。这类指令可以对以对字节、字或双字数据字节、字或双字数据进行运算,参加运算的数可以是无符号进行运算,参加运算的数可以是无符号数或带符号数。由于数或带符号数。由于80 x86提供十进制数运算校正指令,因此参提供十进制数运算校正指令,因此参加运算的数也可以是加运算的数也可以是BCD码表示的十进制数。这类指令中既有双码表示的十进制数。这类指令中既有双操作数指令,也有单操作数指令。如前所述,双操作数指令的两操作数指令,也有单操作数指令。如前所述,双操作数指令的两个操作数不能同时为存

2、储器操作数,且只有源操作数可为立即数。个操作数不能同时为存储器操作数,且只有源操作数可为立即数。单操作数指令不允许使用立即数寻址方式。单操作数指令不允许使用立即数寻址方式。(1)加法运算指令)加法运算指令 ADD(ADD)加法加法 ADC(ADD with Carry)带进位加法带进位加法 INC(INCrement)加加1 ADD加法指令加法指令 指令格式:指令格式:ADD DEST,SRC 指令功能:指令功能:DEST(SRC)+(DEST),即源操作数与目的),即源操作数与目的操作数相加,其和送入目的地址中。并根据相加结果操作数相加,其和送入目的地址中。并根据相加结果设置设置FLAGS的

3、的OF、SF、ZF、AF、PF和和CF标志位标志位。该指令执行后,。该指令执行后,源操作数保持不变。源操作数保持不变。【例【例4-29】加法指令的常用格式有:加法指令的常用格式有:ADD BX,SIADD DA_WORD,0F8CHADD DL,TABBX 下面以指令“ADD DL,0A4H”为例,给出该指令的相加及标志位设置过程。设DL的内容为0E5H:结果不为零,则ZF 0;结果无溢出,则OF 0;结果中有奇数个1,则PF 0。需要指出,溢出位OF表示带符号数的溢出,它是根据数的符号及其变化来设置的。而CF位可以表示无符号数的溢出。执行下面两条指令后,标志寄存器中CF、AF、ZF、SF和O

4、F、PF分别是什么状态?MOV AL,91ADD AL,0BAH在实模式下,假设(DS)=1234H,(SI)=124H,(12464H)=30ABH,(12484H)=464H,有以下程序段:LEA SI,SIMOV AX,SIMOV SI+22H,1200HLDS SI,SI+20HADD AX,SI上述程序段执行后,(DS)=?(SI)=?(AX)=?ADC带进位加法指令带进位加法指令 指令格式:指令格式:ADC DEST,SRC 指令功能:指令功能:DEST(SRC)+(DEST)+CF,即在完成两个,即在完成两个操作数相加的同时,将标志位操作数相加的同时,将标志位CF的值加上,求出的

5、和数送入目的值加上,求出的和数送入目的地址中;并根据相加的结果的地址中;并根据相加的结果设置标志位设置标志位OF、SF、ZF、AF、PF和和CF。【例【例4-30】在在8086/80286中实现两个双精度数的加法。有一个中实现两个双精度数的加法。有一个32位无符号数存放在位无符号数存放在DX(高(高16位)、位)、AX(低(低16位)中,若要加上位)中,若要加上常数常数76F1A23H,则用以下指令来实现:,则用以下指令来实现:ADD AX,1A23HADC DX,76FH 其中第一条指令完成把其中第一条指令完成把16位常数加在位常数加在AX中,若产生进位,则记中,若产生进位,则记录在录在CF

6、中。由中。由ADC指令在完成高指令在完成高16位相加的同时,将低位相加的同时,将低16位的位的进位也加上。进位也加上。INC加加1指令指令 指令格式:指令格式:INC DEST 指令功能:指令功能:DEST(DEST)+1,即目的操作数加,即目的操作数加1后送回目的地址中,并根据执行结果设置标志位后送回目的地址中,并根据执行结果设置标志位OF、SF、ZF、AF和和PF,但不影响,但不影响CF。INC指令只有一个操作数,操作数可以是字节、字指令只有一个操作数,操作数可以是字节、字或双字,且被当作无符号数。或双字,且被当作无符号数。(2)减法运算指令)减法运算指令 SUB(SUBtract)减法。

7、减法。SBB(SuBtract with Borrow)带借位减法。带借位减法。DEC(DECrement)减减1。NEG(NEGate)求补。求补。CMP(CoMPare)比较。比较。SUB减法指令减法指令 指令格式:指令格式:SUB DEST,SRC 指令功能:指令功能:DEST(DEST)(SRC),即完成从目的操),即完成从目的操作数中减去源操作数,其差值送入目的地址中;并按相减结作数中减去源操作数,其差值送入目的地址中;并按相减结果设置标志位果设置标志位OF、SF、ZF、AF、PF和和CF。【例【例4-32】SUB指令的常用格式如下:指令的常用格式如下:SUB AL,3FHSUB B

8、X,AX 下面以指令“SUB AL,DAB”为例,给出该指令的相减及设置标志位过程。设AL内容为B7H,DAB字节单元内容为A8H:结果不为零,则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

9、指令功能:DEST(DEST)1,即目的操作数减1后送回目的地址中;并根据执行结果设置标志位OF、SF、ZF、AF和PF,但不影响CF。NEG求补指令求补指令 指令格式:指令格式:NEG DEST 指令功能:指令功能:DEST 0 (DEST),即用零减去目的操作数,),即用零减去目的操作数,相减结果送回目的地址中;并按结果设置标志位相减结果送回目的地址中;并按结果设置标志位OF、SF、ZF、AF、PF和和CF。NEG指令属单操作数指令,操作数可以是字节、字或双指令属单操作数指令,操作数可以是字节、字或双字,且被当作补码表示的带符号数。字,且被当作补码表示的带符号数。如果字节操作数是如果字节操

10、作数是 128、字操作数是、字操作数是 32768,在执行,在执行NEG指令后,操作数不变,但溢出标志指令后,操作数不变,但溢出标志OF置置1。这是由于。这是由于+128或或+32768超出了超出了8位或位或16位带符号数的表示范围,即产生位带符号数的表示范围,即产生了溢出。如操作数为零,求负的结果仍为零,则标志位了溢出。如操作数为零,求负的结果仍为零,则标志位CF置置0;否则否则CF置置1。NEG ALNEG BL以上指令执行后,AL中为负数25H的补码:(AL)DBH 11011011B。BL中则为正数:(BL)58H 01011000B。【例4-34】设AL中存放一正数:(AL)25H

11、00100101B。BL中存放负数58H的补码:(BL)A8H 10101000B。可用以下指令获得AL、BL中数的负数:假设(AX)=0FFFFH,有以下程序段:INC AXNEG AXDEC AXNEG AX上述程序段执行后,(AX)=?CMP比较指令比较指令 指令格式:指令格式:CMP DEST,SRC 指令功能:指令功能:(DEST)(SRC),两个操作数相减后,仅按相),两个操作数相减后,仅按相减结果设置标志位减结果设置标志位OF、SF、ZF、AF、PF和和CF,而不保留两数,而不保留两数相减的差。相减的差。CMP指令与指令与SUB指令的不同之处是,运算结果不送回目的指令的不同之处是

12、,运算结果不送回目的地址中。因此地址中。因此CMP指令执行后,两个操作数都不变,只影响状指令执行后,两个操作数都不变,只影响状态标志位。态标志位。CMP指令后往往跟着一个条件转移指令指令后往往跟着一个条件转移指令,根据比较,根据比较结果产生不同的程序分支。例如:结果产生不同的程序分支。例如:CMP AL,BLJZ EQL CMP指令可利用所设标志位的状态来反映两个操作数的大小。指令可利用所设标志位的状态来反映两个操作数的大小。CMP指令执行后,若指令执行后,若ZF 1,表示(,表示(DEST)(SRC)。对于)。对于无符号数,若无符号数,若CF 0,表示(,表示(DEST)(SRC);若);若

13、CF 1,则,则(DEST)()(SRC)。)。(3)乘法运算指令)乘法运算指令 MUL(unsigned MULtiple)无符号数乘法。无符号数乘法。IMUL(sIgned MULtiple)带符号数乘法。带符号数乘法。MUL无符号数乘法指令 指令格式:MUL SRC 指令功能:字节操作数 AX(AL)*(SRC)字操作数 DX:AX(AX)*(SRC)其中(SRC)是乘法运算的一个操作数,它只能在通用寄存器或存储单元中(不能是立即数),而另一个操作数隐含在 AL(字节乘)、AX(字乘)或EAX(双字乘)寄存器中。MUL指令只影响标志寄存器中CF、OF标志位。MUL指令执行后,如果乘积的高

14、一半为0,即AH(字节乘)、DX(字乘法)或EAX(双字乘)全为0,则CF 0和OF 0;否则CF 1,OF 1(表示AH、DX或EDX中有乘积的有效数字)。IMUL带符号数乘法指令带符号数乘法指令 指令格式:指令格式:IMUL SRC 指令功能:指令功能:与与MUL相同,但操作数和乘积必须是带符号数且用相同,但操作数和乘积必须是带符号数且用补码表示,而补码表示,而MUL的操作数和乘积均是无符号数。的操作数和乘积均是无符号数。执行执行IMUL指令后,如果乘积的高一半是低一半的符号扩展,指令后,如果乘积的高一半是低一半的符号扩展,则则CF和和OF均为均为0;否则均为;否则均为1。【例【例4-35

15、】设(设(AL)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 指令功能:

16、指令功能:将隐含存放在将隐含存放在AX(字节除)、(字节除)、DX:AX(字除)(字除)或或EDX:EAX(双字除)中的被除数除以除数(双字除)中的被除数除以除数(SRC),除后),除后的商和余数送入隐含指定的寄存器中。的商和余数送入隐含指定的寄存器中。字节操作:字节操作:AL(AX)/(SRC)的商)的商 AH(AX)/(SRC)的余数)的余数 字操作:字操作:AX(DX:AX)/(SRC)的商)的商 DX(DX:AX)/(SRC)的余数)的余数DIV指令中的被除数和除数必须是无符号数,其商和余数也是无符指令中的被除数和除数必须是无符号数,其商和余数也是无符号数。号数。DIV指令对标志寄存器

17、无有效标志结果。但是以下两种情况指令对标志寄存器无有效标志结果。但是以下两种情况之一,将产生之一,将产生0型中断(除法出错中断)转入除法出错中断处理。型中断(除法出错中断)转入除法出错中断处理。除数为除数为0,即(,即(SRC)=0。商溢出,即(商溢出,即(AL)中的商)中的商0FFH,(,(AX)中的商)中的商0FFFFH IDIV带符号数除法指令带符号数除法指令 指令格式:指令格式:IDIV SRC 指令功能:指令功能:与与DIV相同,但操作数、商和余数必须是带符号相同,但操作数、商和余数必须是带符号数且用补码表示,余数的符号与被除数的符号相同。数且用补码表示,余数的符号与被除数的符号相同

18、。带符号数除法的商中,最大的正数商是带符号数除法的商中,最大的正数商是+127(7FH)、)、+32767(7FFFH)或)或+65535(7FFFFFFFH),最小的负数商是),最小的负数商是 127(81H)、)、32767(8001H)或)或 65535(80000001H)。同)。同DIV指令一样,当除数(指令一样,当除数(SRC)0或商超出上述的最大值或最小或商超出上述的最大值或最小值时,均产生值时,均产生0型中断。型中断。由于除法指令的字节操作要求被除数为16位,字操作要求被除数为32位,双字操作要求被除数为64位,因此往往需要用符号扩展的方法取得除法指令所需要的被除数格式。【例4

19、-39】两个8位带符号数分别放在BYTE1、BYTE2字节存储单元中,将BYTE1内容除以BYTE2内容,商放在QUOT字节单元中,可用以下指令实现:MOVAL,BYTE1CBWIDIVBYTE2MOVQUOT,AL 假设DAW1和DAW2分别是两个字单元的符号地址,请按下列要求写出指令序列:(1)DAW1和DAW2两个字数据相乘(用MUL)。MOV AX,DAW1MUL DAW2(2)DAW1除以23(用DIV)。MOV AX,DAW1MOV BL,23DIV BL3逻辑类指令逻辑类指令 这类指令包括逻辑运算指令、位测试指令、位扫描指令和移这类指令包括逻辑运算指令、位测试指令、位扫描指令和移

20、位指令。位指令。(1)逻辑运算指令)逻辑运算指令 逻辑运算指令共有逻辑运算指令共有5条,其指令格式及功能分别如下:条,其指令格式及功能分别如下:AND逻辑与指令逻辑与指令 指令格式:指令格式:AND DEST,SRC 指令功能:指令功能:DEST(SRC)(DEST)OR逻辑或指令逻辑或指令 指令格式:指令格式:OR DEST,SRC 指令功能:指令功能:DEST(SRC)(DEST)XOR逻辑异或指令逻辑异或指令 指令格式:指令格式:XOR DEST,SRC 指令功能:指令功能:DEST(SRC)(DEST)NOT逻辑非指令逻辑非指令 指令格式:指令格式:NOT DEST 指令功能:指令功能

21、:DEST(DEST)TEST测试指令测试指令 指令格式:指令格式:TEST DEST,SRC 指令功能:(指令功能:(SRC)(DEST)上述指令对操作数都是按位进行逻辑运算的,操作数可以上述指令对操作数都是按位进行逻辑运算的,操作数可以是字节、字或双字。是字节、字或双字。NOTNOT指令对标志位无影响,其余指令对标志位无影响,其余4 4条指令影条指令影响的标志位是响的标志位是SFSF、ZFZF、PFPF,置,置CFCF、OFOF为为0 0,AFAF不确定。不确定。TESTTEST指指令与令与ANDAND指令的不同之处是,运算结果不送回目的地址中。因指令的不同之处是,运算结果不送回目的地址中

22、。因此此TESTTEST指令执行后,两个操作数都不变,只影响标志位。指令执行后,两个操作数都不变,只影响标志位。这些指令常用于对操作数的某些位进行分离、组合或设置,例如: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上述程序段执行后,(AX)=?CF=?(4)移位指令

23、)移位指令 移位指令可按操作数的个数分为单操作数移位指令(移位指令可按操作数的个数分为单操作数移位指令(8条)条)和双操作数移位指令(和双操作数移位指令(2条)。条)。80386及其后继机型增加的双精度及其后继机型增加的双精度移位指令就是双操作数移位指令。移位指令就是双操作数移位指令。SHL(SHift logical Left)逻辑左移。逻辑左移。SAL(Shift Arithmetic Left)算术左移。算术左移。SHR(SHift logical Right)逻辑右移。逻辑右移。SAR(Shift Arithmetic Right)算术右移。算术右移。ROL(ROtate Left)循

24、环左移。循环左移。ROR(ROtate Right)循环右移。循环右移。RCL(Rotate Left through Carry)带进位循环左移。带进位循环左移。RCR(Rotate Right through Carry)带进位循环右移。带进位循环右移。单操作数移位指令单操作数移位指令 这种移位指令共有这种移位指令共有8条,它们可以对通用寄存器或存储单元条,它们可以对通用寄存器或存储单元中的操作数进行指定移位,即一次可只移一位或按中的操作数进行指定移位,即一次可只移一位或按CL中的内容中的内容规定移位次数(位数)。规定移位次数(位数)。移位指令可分为:算术移位指令、逻辑移位指令可分为:算术

25、移位指令、逻辑移位指令和循环移位指令。移位指令和循环移位指令。这这8条指令有如下共同点:条指令有如下共同点:具有相同的指令格式具有相同的指令格式 OPR DEST,COUNT。每条指令都是单操作数指令,即只需一个操作数每条指令都是单操作数指令,即只需一个操作数DEST。DEST只能是只能是8/16/32位通用寄存器或存储器操作数,不能是立即位通用寄存器或存储器操作数,不能是立即数。但只有数。但只有80386及其后继机型才能使用及其后继机型才能使用32位操作数。位操作数。COUNT表示移位次数表示移位次数 对于对于8086/80286,移位一次,移位一次,COUNT可可用常数用常数1替代;移位多

26、次,则必须用替代;移位多次,则必须用CL替代,替代,CL中存放移位次中存放移位次数。对于数。对于80386及其后继机型,及其后继机型,COUNT还可以是还可以是8位立即数,可位立即数,可指定指定131的移位次数。的移位次数。a.算术移位指令算术移位指令 指令格式:指令格式:算术左移指令算术左移指令SAL DEST,COUNT 算术右移指令算术右移指令SAR DEST,COUNT 指令功能:指令功能:算术左移指令将算术左移指令将DEST指定的指定的8/16/32位操作数左移位操作数左移COUNT次。最高位移入次。最高位移入CF中,最低位补中,最低位补0,移位操作如图(,移位操作如图(a)所示。算

27、术右移指令将所示。算术右移指令将DEST指定的指定的8/16/32位操作数右移位操作数右移COUNT次。右移时,最高符号位保持不变,连同符号位依次右次。右移时,最高符号位保持不变,连同符号位依次右移,最低位移入移,最低位移入CF中,如图(中,如图(b)所示。)所示。算术移位指令主要用于对带符号数的移位,左移一位相当于乘2;右移一位相当于除2。算术移位后应保持该数的符号不变。例如:(AL)11000001B(63的补码),(BL)10111111B(负数65的补码)。以下指令将AL、BL中的数左移一位:SAL AL,1SAL BL,1以上指令执行后,(AL)10000010B即126的补码,不溢

28、出OF 0,结果符合倍增关系;而(BL)01111110B,左移后发生溢出,则OF 1,因此BL内容不再符合倍增关系。通常算术移位指令用于实现带符号数的简单乘除运算,其执行时间比用乘除指令短得多。例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位寄存器或存储器操作

29、数移位寄存器或存储器操作数移位位COUNT次。次。SHL实现将操作数左移,最高位移入实现将操作数左移,最高位移入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,COUNT

30、 带进位循环左移指令带进位循环左移指令 RCL DEST,COUNT 带进位循环右移指令带进位循环右移指令 RCR DEST,COUNT 指令功能:指令功能:将将DEST指定的指定的8/16/32位寄存器或存储器操作数移位位寄存器或存储器操作数移位COUNT次。次。ROL/ROR 实现将操作数循环左移实现将操作数循环左移/右移。右移。RCL/RCR 实现将操作数和实现将操作数和CF一起循环左移一起循环左移/右移。右移。受影响的状态标志位:受影响的状态标志位:CF、OF。CF存放每次移出的位。如果移存放每次移出的位。如果移位指令只移一位,且移位前后操作数的符号位发生变化,则将位指令只移一位,且移

31、位前后操作数的符号位发生变化,则将OF置置1;否则;否则OF置置0。如移位次数大于。如移位次数大于1,则,则OF不确定。不确定。循环移位指令的移位操作如下图所示:当多字节或多字数据进行移位时,常用到带进位循环移位指令。【例4-46】由3个字构成的一个无符号数从高位到低位依次存放在M+4,M+2,M字单元中,若要将该数右移一位,则可用以下程序段实现:SHR M+4,1RCR M+2,1RCR M,1如下图所示,SHR指令将M+4字单元的最低位移至CF中。第2条指令RCR将CF与M+2字单元构成一个17位的数进行一次循环右移,将M+4单元右移出的位通过CF移至M+2单元的最高位,而M+2中的最低位

32、又移至CF。在第3条指令执行后,就完成将3个字的数右移一位。假设(AX)=0A5C6H,(CX)=0F03H,有以下程序段:STCRCL AX,CLAND AH,CHRCR 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、

33、LEA ES,TABBX4串操作类指令串操作类指令 MOVS(MOVe 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

34、while Equal/Zero)相等相等/为零则重复。为零则重复。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(

35、SI/ESI)4 该指令把由源变址寄存器指向的数据段中某单元(字节该指令把由源变址寄存器指向的数据段中某单元(字节/字字/双字)的内容送到双字)的内容送到AL、AX或或EAX中,并中,并根据方向标志根据方向标志DF和数和数据类型(字节、字或双字)修改源变址寄存器的内容。若据类型(字节、字或双字)修改源变址寄存器的内容。若DF 0表示串操作按地址递增的方向处理,则修改表示串操作按地址递增的方向处理,则修改SI/ESI内容用内容用“+”;若若DF 0表示串操作按地址递减的方向处理,则修改表示串操作按地址递减的方向处理,则修改SI/ESI内容内容用用“-”。该指令也不影响标志位。该指令也不影响标志位

36、。(2)存串指令()存串指令(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的值及

37、数据类型修改目的变址寄的值及数据类型修改目的变址寄存器的内容。该指令不影响标志位。存器的内容。该指令不影响标志位。(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双字操作双字操作ES:(:

38、(DI/EDI)(DS:(:(SI/ESI)SI/ESI(SI/ESI)4;DI/EDI(DI/EDI)4 MOVS指令把由源变址寄存器指向的数据段中的一个字节指令把由源变址寄存器指向的数据段中的一个字节(或字,或双字)传送到由目的变址寄存器指向的附加段中的一(或字,或双字)传送到由目的变址寄存器指向的附加段中的一个字节(或字,或双字)单元中去,同时根据方向标志个字节(或字,或双字)单元中去,同时根据方向标志DF及数据及数据类型对源变址寄存器和目的变址寄存器进行修改。该指令不影响类型对源变址寄存器和目的变址寄存器进行修改。该指令不影响标志位。标志位。(4)串比较指令()串比较指令(Compar

39、e 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;DI/EDI(DI/EDI)4 CMPS指令比较源串和目的串中的

40、一个字节、字或双字。即:指令比较源串和目的串中的一个字节、字或双字。即:将将源变址源变址寄存器指向数据段中的一个字节(或字,或双字)寄存器指向数据段中的一个字节(或字,或双字)减去减去目的变址目的变址寄存器指向附加段中的一个字节(或字,或双字),不寄存器指向附加段中的一个字节(或字,或双字),不保留相减结果,但设置标志位:保留相减结果,但设置标志位:OF、SF、ZF、AF、PF和和CF。每比较一次,根据方向标志每比较一次,根据方向标志DF及数据类型对源变址寄存器和目及数据类型对源变址寄存器和目的变址寄存器进行修改。的变址寄存器进行修改。(5)串搜索指令()串搜索指令(Scan String)指

41、令格式:指令格式: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指定的内容,即:指定的内容,即:用用AL、AX或或EAX的内容的内容减去目的变址减去目的变址寄存器指向附加段中的一寄存器指向附加段中的一个

42、字节(或字,或双字),不保留相减结果,但设置标志位:个字节(或字,或双字),不保留相减结果,但设置标志位:OF、SF、ZF、AF、PF和和CF。每查找一次,根据方向标志。每查找一次,根据方向标志DF及及数据类型对目的变址寄存器进行修改。数据类型对目的变址寄存器进行修改。(6)重复前缀指令()重复前缀指令(Repeat)重复前缀指令共有重复前缀指令共有3条。条。指令格式:指令格式:REP string primitive 其中其中string primitive可为可为MOVS、STOS、LODS、INS和和OUTS指令。指令。指令功能:指令功能:a.如(如(CX/ECX)0,则退出,则退出RE

43、P,否则往下执行;,否则往下执行;b.(CX/ECX)(CX/ECX)1;c.执行其后的串指令;执行其后的串指令;d.重复重复ac步骤。步骤。该指令中,如该指令中,如16位寻址,使用位寻址,使用CX作为计数器;如作为计数器;如32位寻址,用位寻址,用ECX作为计数器。作为计数器。指令格式:REPE string primitive 或 REPZ string primitive其中string primitive可为CMPS和SCAS指令。指令功能:a.如(CX/ECX)0或ZF 0时退出,否则往下执行;b.(CX/ECX)(CX/ECX)1;c.执行其后的串指令;d.重复ac步骤。有关计数寄

44、存器的规定和REP相同。与REP相比,除满足(CX/ECX)0的条件可结束操作外,还增加了ZF 0的条件。也就是说,在每次比较时,只要两数相等(即ZF 1)就继续比较,如果遇到两数不相等时(即ZF 0)就提前结束操作。指令格式:指令格式:REPNE string primitive 或或 REPNZ string primitive 指令功能:指令功能:除退出条件为(除退出条件为(CX/ECX)0或或ZF 1外,其他操外,其他操作与作与REPE完全相同。也就是说,在每次比较时,完全相同。也就是说,在每次比较时,只要两数比较只要两数比较的结果不相等(即的结果不相等(即ZF 0),就继续执行串处理

45、指令),就继续执行串处理指令;如某次两;如某次两数比较相等或(数比较相等或(CX/ECX)0,就结束操,就结束操作。例如:REP MOVSB在执行这条指令之前,假设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 MOVSBINC DILOOP LOP【例4-

46、49】要求从一个字符串中查找一个指定的字符,可用指令REPNZ SCASB。右 图表示了预置及找到后的情况。从图中可以看出,(AL)中指定的字符为space(空格),其ASCII码为20H。开始比较时,因(DI)指定的字符与(AL)不符合而不断往下比较,当(DI)1508H时,比较结果相符,因此ZF 1,在修改(DI)值后指令停止比较而提前结束,此时(DI)是相匹配字符的下一个地址;(CX)是剩下还未比较的字符个数。所以根据(DI)和(CX)的值可以很方便地找到所需查找的字符的位置。5处理机控制类指令处理机控制类指令(1)标志位操作指令)标志位操作指令 80 x86提供了一组设置或清除标志位的

47、指令,它们只影响本提供了一组设置或清除标志位的指令,它们只影响本指令指定的标志,而不影响其他标志位。这些指令是无操作数指指令指定的标志,而不影响其他标志位。这些指令是无操作数指令,指令中未直接给出操作数的地址,但隐含指出操作数在某个令,指令中未直接给出操作数的地址,但隐含指出操作数在某个标志位上。标志位上。能直接操作的标志位有能直接操作的标志位有CF、IF、DF。清除进位标志指令(清除进位标志指令(CLear Carry flag)CLC;置;置CF 0。进位标志置位指令(进位标志置位指令(SeT Carry flag)STC;置;置CF 1。进位标志取反指令(进位标志取反指令(CoMplem

48、ent Carry flag)CMC;CF取反。取反。清除方向标志指令(清除方向标志指令(CLear Direction flag)CLD;置;置DF 0。方向标志置位指令(方向标志置位指令(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)封锁。封锁。

侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|