逻辑运算和移位指令.ppt_第1页
逻辑运算和移位指令.ppt_第2页
逻辑运算和移位指令.ppt_第3页
逻辑运算和移位指令.ppt_第4页
逻辑运算和移位指令.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1,3.3.3逻辑运算和移位指令,逻辑运算指令运算规则:按位操作,无进/借位对标志位的影响(除NOT指令外):,CFOFSFZFPFAF00*无定义,根据运算结果设置,2,(1)逻辑”与”AND,对两个操作数进行按位逻辑“与”操作。格式:ANDdest,src用途:保留操作数的某几位,清零其他位。例1:保留AL中低4位,高4位清0。ANDAL,0FH例2:AL中有字符az,将其转换成大写。ANDAL,01011111B,3,例3:测试AL的bit7,bit5,bit2是否都是1。ANDAL,10100100BCMPAL,10100100BJZYES;ifmatch,gotoYES;ifnotmatchYES:;goeshereifall1,4,对两个操作数进行按位逻辑”或”操作。格式:ORdest,src用途:对操作数的某几位置1;对两操作数进行组合。例1:把AL中的非压缩BCD码变成相应十进制数的ASCII码。ORAL,30H,(2)逻辑”或”OR,5,例2:把AH和AL中的非压缩BCD码组合成压缩的BCD码,放到AL中。MOVCL,4SHLAH,CLORAL,AH例3:把AL的第5位置为1ORAL,00100000B,6,对操作数进行按位逻辑”非”操作。格式:NOTmem/reg例:NOTCXNOTBYTEPTRDI,(3)逻辑“非”(取反)NOT,7,对两个操作数按位进行”异或”操作。格式:XORdest,src用途:对reg清零(自身异或)把reg/mem的某几位变反(与1异或)例1:把AX寄存器清零。例2:把DH的bit4,3变反MOVAX,0XORDH,18HXORAX,AXANDAX,0SUBAX,AX,(4)逻辑”异或”XOR,8,操作与AND指令类似,但不将”与”的结果送回,只影响标志位。TEST指令常用于位测试,与条件转移指令一起用。例:测试AL的内容是否为负数。TESTAL,80H;检查AL中D7=1?JNZMINUS;是1(负数),转MINUS;否则(正数)不转移MINUS:,(5)测试指令TEST,9,2.移位指令,(1)非循环移位指令算术左移指令SAL(ShiftArithmeticLeft)算术右移指令SAR(ShiftArithmeticRight)逻辑左移指令SHL(ShiftLeft)逻辑右移指令SHR(ShiftRight)这4条指令的格式相同,以SAL为例:SALmem/reg,CL;移位位数大于1时1;移位位数等于1时,10,移位指令执行的操作如下图所示:,最低位,最高位,CF,0,(a)算术/逻辑左移SAL/SHL,最低位,最高位,CF,(b)算术右移SAR,最低位,最高位,CF,(c)逻辑右移SHR,0,非循环移位指令功能示意图,11,算术移位把操作数看做有符号数;逻辑移位把操作数看做无符号数。移位位数放在CL寄存器中,如果只移1位,也可以直接写在指令中。例如:MOVCL,4SHRAL,CL;AL中的内容右移4位影响C,P,S,Z,O标志。结果未溢出时:左移1位操作数*2右移1位操作数/2,12,例:把AL中的数x乘10因为10=8+2=23+21,所以可用移位实现乘10操作。程序如下:SALAL,1;2xMOVAH,ALSALAL,1;4xSALAL,1;8xADDAL,AH;8x+2x=10 x,13,不含进位位的循环左移指令ROL不含进位位的循环右移指令ROR含进位位的循环左移指令RCL含进位位的循环右移指令RCR格式同非循环移位指令。移位位数放在CL寄存器中,如果只移1位,也可以直接写在指令中。循环移位指令只影响标志位CF和OF。,(2)循环移位指令,14,这4条指令的功能如下图示:,最低位,最高位,CF,(a)ROL,最低位,最高位,CF,(c)RCL,最低位,最高位,CF,(b)ROR,最低位,最高位,CF,(d)RCR,循环移位指令功能示意图,15,用移位操作代替乘除法可提高运算速度例:前例中计算x10。(1)采用乘法指令:MOVBL,10MULBL共需7077个T周期。(2)采用移位和加法指令:SALAL,1;2TMOVAH,AL;2TSALAL,1;2TSALAL,1;2TADDAL,AH;3T只需11个T周期,仅相当于乘法的1/7。,16,循环移位举例:,例1:将AL的高4位与低4位互换。MOVCL,4ROLAL,CL例2:将1A00H内存单元中的双字循环左移1位。CMP1A00H,8000HCMCRCLWORDPTR1A02H,1RCLWORDPTR1A00H,1,17,例:设在1000H开始存有四个压缩的BCD码12、34、56、78。要求把它们转换为ASCII码存放在3000H开始的单元中。假定DS、ES都已设置为数据段的段基址。程序见下页。,1000H,3000H,12,34,56,78,32H,31H,34H,33H,36H,35H,38H,37H,18,MOVSI,1000H;SIBCD首址MOVDI,3000H;DIASCII首址MOVBX,4;置计数器初值BBB:MOVAL,SI;ALBCD码,第一次取12HANDAL,0FH;屏蔽高4位02HORAL,30H;转换为ASCII码32HSTOSB;保存结果LODSBMOVCL,4SHRAL,CL;逻辑右移4位ORAL,30H;得到高4位ASCII码STOSB;保存结果DECBX;(BX)(BX)-1JNZBBB;(BX)0,则继续循环,19,作业,P152-P1533.1、3.2、3.7、3.9、3.13、3.16,20,3.3.4串操作指令,串:顺序放在内存中的一组相同类型的数据。串操作:对串中的元素进行相同的操作。串操作的寻址方式:源操作数指针DS:SI(DS可超越)目的操作数指针ES:DI每次串操作后:串操作指令自动修改SI和DI字节1,字2。DF标志决定。(注意:退出串操作后,指针指向最后操作的元素的下一个元素)可完成两个存储单元之间的传送和比较操作(也仅是串指令可以),21,重复前缀有的串操作指令前面可加上重复前缀REP。当使用REP前缀时,该指令重复执行,重复执行次数由CX决定(带有REP前缀的串操作指令每执行一次,CX自动减1)。重复前缀包括:REPCX0时重复执行REPE/REPZCX0ZF=1时重复执行REPNE/REPNZCX0ZF=0时重复执行,22,串指令使用的一般方法,设置源串地址,设置目标串地址,设置串长度,设置操作方向DF,串指令,MOVSI,源串首地址(或LEASI,源串),MOVDI,目的串首地址(或LEADI,目的串),MOVCX,串长度,CLD(或STD),串指令,23,指令执行的操作为:MOVSB:(ES):(DI)(DS):(SI)SI1,DI1MOVSW:(ES):(DI+1)(DI)(DS):(SI+1)(SI)SI2,DI2指令也可写成:MOVSdest,src但要求:src用DS:SI寻址,dest用ES:DI寻址传送是字节还是字,由操作数的类型决定,串传送指令MOVSB/MOVSW,24,串传送指令使用举例,用串传送指令实现200个字节的数据传送:LEASI,MEM1LEADI,MEM2MOVCX,200CLDREPMOVSBHLT,25,串比较指令CMPSB/CMPSW,指令执行的操作为:CMPSB:(DS):(SI)-(ES):(DI)SI1,DI1CMPSW:(DS):(SI+1)(SI)-(ES):(DI+1)(DI)SI2,DI2指令也可写成:CMPSdest,src比较的结果只反映在标志位上,串本身无变化。本指令可用来检查两个串是否相等。,26,串扫描SCASB/SCASW,执行的操作:对字节:(AL)(ES):(DI)DI1对字:(AX)(ES):(DI1)(DI)DI2搜索指令执行的仍是比较(减法)操作,结果只影响标志位。要搜索的关键字放在AL(字节)或AX(字)中。本指令用于在串中查找指定的信息。,27,SCAS指令加上重复前缀后,可对串进行连续扫描比较:若前缀为REPZ,则表示比较结果相等且(ZF=1)且串未结束(CX0),则继续比较。若前缀为REPNZ,则表示比较结果不相等(ZF=0)且串未结束(CX0)就继续比较。,28,例:在ES段的偏移1000H开始处存有10个ASCII码。搜索E,若找到则记下搜索次数及存放地址,并在屏幕上显示Y;若未找到则显示N。(见右图)在屏幕上显示一个字符的指令段如下:(参见附录C.3)MOVDL,MOVAH,2INT21H实现题目要求的程序段见下页:,1000H,41,42,43,44,45,46,A,B,C,D,F,.,ES段,E,29,MOVDI,1000H;(DI)串偏移地址MOVCX,0AH;(CX)串长度MOVAL,E;搜索关键字=ECLD;从低地址到高地址进行搜索REPNZSCASB;若未找到,继续搜索JZFOUND;找到,转至FOUNDMOVDL,N;串中无E,(DL)NJMPDONE;转至DONEFOUND:DECDI;指针回退MOVADDR,DI;ADDRE的地址SUBDI,1000HMOVNUM,DI;NUM搜索次数MOVDL,Y;(DL)YDONE:MOVAH,2INT21H;显示字符HLT,30,执行的操作为:对字节:(AL)(DS):(SI)SI1对字:(AX)(DS):(SI+1)(SI)SI2串装入指令通常不加重复前缀。LODSB等价于:LODSW等价于:MOVAL,SIMOVAX,SIINCSIINCSIINCSI,串装入指令LODSB/LODSW,31,36H,32H,39H,31H,STRING1,STRING2,38H,35H,36H,33H,被加数,加数,数据段,8,5,6,2,9,1,6,3,SUM,结果,.,.,07H,07H,02H,06H,32,下面要求将和的结果送显示,为此,要先化成ASCII码再送显示,程序段如下:LEASI,SUM+3;(SI)SUM+3MOVCX,4;(CX)和长度STD;置DF=1,减量修改SIMOVAH,02;(AH)功能号LP:LODSB;取BCD码至AL,且(SI)(SI)-1ADDAL,30H;转换为ASCII码MOVDL,AL;(DL)字符INT21H;显示字符DECCXJNZLP,33,指令的操作为:对字节:(ES):(DI)(AL)DI1对字:(ES):(DI+1)(DI)(AX)DI2本指令用于把一块存储区域填充成某一初始值(即对存储区进行初始化)。存储区域的首地址要预先

温馨提示

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

评论

0/150

提交评论