微机原理与接口技术第3章-5

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

13.2.3逻辑运算和移位指令逻辑运算指令移位指令循环移位指令21.逻辑运算指令ANDdst,src;(与)ORdst,src;(或)XORdst,src;(异或)TESTdst,src;(测试)NOTdst;(非)●运算规则:按位操作,无进/借位●对标志位的影响(除NOT指令外):CFOFSFZFPFAF00***无定义*根据运算结果设置3(1)逻辑“与”AND对两个操作数进行按位逻辑“与”操作。格式:ANDdst,src用途:保留操作数的某几位,清零其他位。例1:保留AL中低4位,高4位清0。ANDAL,0FH例2:AL中有字符’a’~’z’,将其转换成大写。(‘a’=61h,‘A’=41h)ANDAL,01001111B4例:测试AL的bit7,bit5,bit2是否都是1。ANDAL,10100100BCMPAL,10100100BJZYES;ifmatch,gotoYES……;ifnotmatch……YES:……;goeshereifall‘1’5对两个操作数进行按位逻辑”或”操作。格式:ORdst,src用途:对操作数的某几位置1;对两操作数进行组合。例:把AL的第5位置为1ORAL,00100000B(2)逻辑“或”OR6对两个操作数按位进行”异或”操作。格式:XORdst,src用途:对reg清零(自身异或)把reg/mem的某几位变反(与’1’异或)例1:把AX寄存器清零。例2:将DH的bit4,3取反①MOVAX,0XORDH,18H②XORAX,AX③ANDAX,0④SUBAX,AX(3)逻辑“异或”XOR7操作与AND指令类似,但不将”与”的结果送回,只影响标志位。TEST指令常用于位测试,与条件转移指令一起用。例:测试AL的内容是否为负数。TESTAL,80H;检查AL中D7=1?JNZMINUS;是1(负数),转MINUS……;否则(正数)不转移MINUS:…………(4)测试指令TEST8对操作数进行按位逻辑”非”操作。格式:NOTmem/reg例:NOTCXNOTBYTEPTR[DI](5)逻辑“非”(取反)NOT9逻辑运算指令常见的用法总结⑴清进位标志位:ANDAX,AX或ORAL,AL等⑵清零操作数:XORAX,AX不仅把AX清零,而且也影响了状态标志⑶把某几位取反:用XOR指令,把要取反的位和1异或,不变的位和0异或⑷清零或置位某几位:用AND指令清零,用OR指令置位102.移位指令4条移位指令:算术左移指令SALdst,cnt逻辑左移指令SHLdst,cnt算术右移指令SARdst,cnt逻辑右移指令SHRdst,cntdst:通用寄存器或存储器操作数cnt:移位次数(1或CL,CL中存放移位次数)SAR影响标志位CF、OF、PF、SF、ZF,而AF未定义,其余三条指令只影响CF和OF。11移位指令(a)SAL(b)SHL(c)SAR(d)SHR123循环移位指令4条循环移位指令循环左移指令ROL循环右移指令ROR带进位位的循环左移指令RCL带进位位的循环右移指令RCR指令格式与非循环移位指令相同,四条指令都只影响CF和OF标志位,其余标志位不影响。13循环移位指令(a)ROL(b)ROR(c)RCL(d)RCR14使用举例[例一]利用循环移位指令可以对寄存器或存储器中的任一位进行测试。如要测试AL寄存器中的第5位的状态是“0”还是“1”,则可利用以下指令实现:MOVCL,5;(CL)移位次数RORAL,CL;(CF)AL的第5位JNCZERO;若(CF)=0,转ZARO;否则ZERO:15[例二]利用带进位循环移位指令可以实现将两个以上寄存器或存储器单元组合起来一起移位。如DX和AX两个寄存器组成的32位数乘以2,可用以下两条指令实现:SHLAX,1;AX左移1位,(CF)AX的最高位RCLDX,1;DX带进位左移1位,DX的最低位(CF)具体操作如下图:CFDXAX0②RCLDX,1①SHLAX,116[例三]将位于1000H单元的2位非压缩BCD码转换成组合BCD码。173.2.4串操作指令串操作指令的特征是对数据块,也称数据串(字符串或数值串)进行操作。其操作数为隐含操作数,并且其中部分指令的两个操作数可以同时是存储器操作数。字符串传送指令MOVS(Movestring)字符串比较指令CMPS(Comparestring)字符串检索指令SCAS(Scanstring)取字符串指令LODS(Loadfromstring)存字符串指令STOS(Storeintostring)18共同特点:以SI作为源操作数的指针寄存器,默认段为DS段;以DI作为目的操作数的指针寄存器,默认段为ES段;串操作指令是唯一源操作数与目的操作数都在内存中的指令串可以是字串或字节串串操作数地址的修改和标志位DF有关,DF=0时,SI和DI增量变化,DF=1时减量变化;对字符串操作,SI和DI每次变量为1,字串为2可以通过重复前缀来实现串操作19指令前缀适用的指令操作功能标志位影响OSZAPCREPMOVSSTOS(CX)0△△△△△△REPZ/REPEREPNZ/REPNECMPSSCAS(CX)0且(ZF)=1(CX)0且(ZF)=0○○○○○○201.字符串传送指令字符串传送指令MOVSB/MOVSWMOVSB用于字节传送MOVSW用于字传送。①源地址用SI寄存器指出,目的地址用DI寄存器指出②CX中为字节数或字数③若DF为0,则用MOVSB时,每传送一次,SI和DI自动增1;用MOVSW时,每传送一次,SI和DI自动增2。DF=1,则SI,DI变化方向?21特点:指令前面常加重复前缀REP。如:若想实现将DS段中1000H开始的100个字节内容顺序传送到扩展段2000H开始的单元中MOVSI,1000H;源地址为1000HMOVDI,2000H;目的地址为2000HMOVCX,100;字符串长100个字节CLD;方向标志清0,使指针;按增量方向修改REPMOVSB;将源地址开始的100个;字节传送到目的地址222.字符串比较指令字符串比较指令CMPSB/CMPSW功能:把DS段由SI所指的字节或者字和ES段由DI所指的字节或者字相比较。设置标志位23CMPSB/CMPSW指令注意点:①预先将:源字符串的首址设置到DS段和SI中目的字符串的首址设置到ES段和DI中比较的字节数或字数设置到CX中设置方向标志②在DF为0或为1,影响SI和DI的修改方向。③CMPSB/CMPSW指令通常加前缀REPNZ/REPNEREPZ/REPE243.字符串检索指令SCASB或者SCASW功能:将AL中的字节或者AX中的字与位于ES段由DI寄存器所指的内存单元的字节或字相比较。254.取字符串指令LODSB/LODSW功能:将位于DS段由SI所指的存储单元的内容取到AL或AX中。DF=1时地址作减量修改DF=0时地址作增量修改265.存字符串指令STOSB/STOSW功能:把AL或AX中的数据存到ES段DI寄存器所指的内存单元。27串指令使用的一般方法设置源串地址设置目标串地址设置串长度设置操作方向DF串指令MOVSI,源串首地址(或LEASI,源串)MOVDI,目的串首地址(或LEADI,目的串)MOVCX,串长度CLD(或STD)具体串指操作指令,如MOVSB/W28关于串操作指令的重复前缀、操作数以及地址指针所用的寄存器等情况归纳如表4.10所示。表4.10串操作指令的重复前缀、操作数和地址指针指令重复前缀操作数地址指针寄存器MOVSREP目的,源ES:DI,DS:SILODS无源DS:SISTOSREP目的ES:DICMPSREPE/REPNE源,目的DS:SI,ES:DISCASREPE/REPNE目的ES:DI293.2.5控制转移指令控制转移指令中包括4类指令,即过程调用和返回指令无条件转移和条件转移指令循环控制指令中断指令30关于转移指令和调用指令的寻址段内直接转移段内间接转移段间直接转移段间间接转移计算偏移地址的方法相对转移绝对转移31321子程序调用和返回指令子程序调用指令CALL用法:CALLdst说明:由编译程序自动匹配为某种寻址方式段内直接调用指令段内间接调用指令段间直接调用指令段间间接调用指令33例:CALL1000H;段内直接调用,地址在指令中给出CALLAX;段内间接调用,地址由AX给出CALL2500H:3600H;段间直接调用,段地址;和偏移量由指令给出CALLDWORDPTR[DI];段间间接调用,调用;地址在DI、DI+1、;DI+2、DI+3所指单元34子程序返回指令RET功能:返回高一层的程序。指令格式:RET;段内返回或段间返回RETn;带参数返回特点:可带参数RETnn为0~FFFFH范围中的偶数。352无条件转移指令和条件转移指令(1)无条件转移指令JMP有四种形式如:JMP1000HJMPCXJMP2000H:0100HJMPDWORDPTR[ST]361.无条件转移JMP转移指令操作:有以下几种类型⑴段内直接短转移JMPSHORTopr;(IP)←(IP)+Data8Data8是一个字节的补码数范围:-128~+12737⑵段内直接近转移JMPNEARPTRopr(IP)←(IP)+Data16Data16是两个字节的补码数范围:-32768~+32767⑶段内间接转移JMPWORDPTRopr(IP)←寄存器或存储器操作数⑷段间直接转移JMPFARPTRopr指令中用立即数的形式指出目标位置的段地址和偏移量38⑸段间间接转移JMPDWORDPTRopr目标位置的段地址和偏移量保存在存储器中说明:①在汇编语言中通常使用标号表示要转移到的位置。②使用该指令,可以使程序流程改变到任何目标位置。39(2)条件转移指令根据比较结果决定是否转移指令形式:JS;符号标志SF=1则转移JNS;符号标志SF=0则转移JO;溢出标志OF=1则转移JNO;溢出标志OF=0则转移JP;奇偶标志PF=1则转移JNP;奇偶标志PF=0则转移JC;进位标志CF=1则转移JNC;进位标志CF=0则转移40JE/JZ;ZF=1,即结果为0,则转移JNE/JNZ;ZF=0,即结果不为0,则转移JG/JNLE;大于,即不小于且不等于则转移JNG/JLE;不大于,即小于或等于则转移JL/JNGE;小于,即不大于且不等于则转移JNL/JGE;不小于,即大于或者等于则转移JB/JNAE;低于,即不高于且不等于则转移JNB/JAE;不低于,即高于或者等于则转移JA/JNBE;高于,即不低于且不等于则转移JNA/JBE;不高于,即低于或者等于则转移JCXZ;CX=0时转移41按照判断条件的不同分为以下类型:单个标志、无符号数判断、有符号数判断、CX寄存器。⑴判断单个标志ZF:JZ(JE),JNZ(JNE)SF:JS,JNSOF:JO,JNOPF:JP,JNPCF:JC,JNC42⑵判断无符号数的大小助记符中的意义:A:大于,B:小于,E:等于JB(JNAE),JNB(JAE):同JC,JNC,JBE(JNA),JNBE(JA):判断CFandZF⑶判断有符号数的大小助记符中的意义:G:大于,L:小于,E:等于JL(JNGE):SFxorOF=1JNL(JGE):SFxorOF=0JLE(JNG):(SFxorOF)andZF=1JNLE(JG):(SFxorOF)andZF=0使用比较大小的指令时,必须区分是有符号数还是无符号数。43⑷判断CX寄存器JCXZ:CX=044条件转移指令特点:都是相对转移形式的根据比较结果决定是否转移大部分转移指令有两种不同的助记符453循环控制指令(1)LOOP指令功能:将CX的内容减1,CX如不为0,则继续循环,为0,则退出循环。如:MOVCX,0100H;设置循环次数KKK:LOOPKKK;CX减1,如不为0则循环46(2)LOOPZ/LOOPE功能:将CX减1,如CX为0或者ZF为0则

1 / 53
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功