逻辑运算移位串操作指令.ppt

上传人:小飞机 文档编号:6611791 上传时间:2023-11-17 格式:PPT 页数:60 大小:405.50KB
返回 下载 相关 举报
逻辑运算移位串操作指令.ppt_第1页
第1页 / 共60页
逻辑运算移位串操作指令.ppt_第2页
第2页 / 共60页
逻辑运算移位串操作指令.ppt_第3页
第3页 / 共60页
逻辑运算移位串操作指令.ppt_第4页
第4页 / 共60页
逻辑运算移位串操作指令.ppt_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《逻辑运算移位串操作指令.ppt》由会员分享,可在线阅读,更多相关《逻辑运算移位串操作指令.ppt(60页珍藏版)》请在三一办公上搜索。

1、1,3.3.3 位操作类指令,位操作类指令以二进制位为基本单位进行数据的操作;这是一类常用的指令,都应该特别掌握注意这些指令对标志位的影响1、逻辑运算指令AND OR XOR NOT TEST2、移位指令SHL SHR SAL SAR3、循环移位指令ROL ROR RCL RCR,2,逻辑运算指令(AND OR XOR NOT TEST)运算规则:按位操作,无进/借位 对标志位的影响(除NOT指令外):,CF OF SF ZF PF AF 0 0*无定义,根据运算结果设置,3,(1)逻辑”与”AND,对两个操作数进行按位逻辑“与”操作。格式:AND dest,src用途:保留操作数的某几位,清

2、零其他位。例1:保留AL中低4位,高4位清0。AND AL,0FH例2:AL中有字符az,将其转换成大写。AND AL,01011111B,4,对两个操作数进行按位逻辑”或”操作。格式:OR dest,src用途:对操作数的某几位置1;对两操作数 进行组合。例3:把AL中的非压缩BCD码变成相应十进制 数的ASCII码。OR AL,30H,(2)逻辑”或”OR,5,例4:把AH和AL中的非压缩BCD码组合成压 缩的BCD码,放到AL中。MOV CL,4 SHL AH,CL OR AL,AH例5:把AL的第5位置为1 OR AL,00100000B,6,对操作数进行按位逻辑”非”操作。格式:NO

3、T mem/regNOT不影响标志位。例:NOT CX NOT BYTE PTRDI,(3)逻辑“非”(取反)NOT,7,对两个操作数按位进行”异或”操作,结果送到目的操作数。格式:XOR dest,src用途:对reg清零(自身异或)把reg/mem的某几位变反(与1异或)例6:把AX寄存器清零。例7:把DH的bit4,3变反 MOV AX,0 XOR DH,18H XOR AX,AX AND AX,0 SUB AX,AX,(4)逻辑”异或”XOR,例8:逻辑运算,mov al,45h;逻辑与 al=01hand al,31h;CF=OF=0,SF=0、ZF=0、PF=0mov al,45h

4、;逻辑或 al=75hor al,31h;CF=OF=0,SF=0、ZF=0、PF=0mov al,45h;逻辑异或 al=74hxor al,31h;CF=OF=0,SF=0、ZF=0、PF=1mov al,45h;逻辑非 al=0bahnot al;标志不变,例9:逻辑指令应用,;AND指令可用于复位某些位(同0相与),不影响其他位:将BL中D3和D0位清0,其他位不变and bl,11110110B;OR指令可用于置位某些位(同1相或),不影响其他位:将BL中D3和D0位置1,其他位不变or bl,00001001B;XOR指令可用于求反某些位(同1相异或),不影响其他位:将BL中D3和

5、D0位求反,其他不变xor bl,00001001B,10,测试指令TEST,对两个操作数执行逻辑与运算,结果不回送到目的操作数,AND指令设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义,只有相“与”的两位都是1,结果才是1;否则,“与”的结果为0,TEST,例10:测试为0或1,test al,01h;测试AL的最低位D0jnz there;标志ZF=0,即D0=1;则程序转移到there.;否则ZF=1,即D0=0,顺序执行there:.,TEST指令通常用于检测一些条件是否满足,但又不希望改变原操作数的情况,TEST,12,2.移位指令,(1)非循环移位指令 算术左

6、移指令 SAL(Shift Arithmetic Left)算术右移指令 SAR(Shift Arithmetic Right)逻辑左移指令 SHL(Shift Left)逻辑右移指令 SHR(Shift Right)这4条指令的格式相同,以SAL为例:SAL mem/reg,CL;移位位数大于1时1;移位位数等于1时,13,移位指令执行的操作如下图所示:,最低位,最高位,CF,0,(a)算术/逻辑左移 SAL/SHL,最低位,最高位,CF,(b)算术右移 SAR,最低位,最高位,CF,(c)逻辑右移 SHR,0,非循环移位指令功能示意图,14,算术移位把操作数看做有符号数;逻辑移位把操作数看

7、做无符号数。移位位数放在CL寄存器中,如果只移1位,也 可以直接写在指令中。例如:MOV CL,4 SHR AL,CL;AL中的内容右移4位影响CF,PF,SF,ZF,OF标志。结果未溢出时:左移1位操作数*2 右移1位操作数/2,15,例11:把AL中的数x乘10因为10=8+2=23+21,所以可用移位实现乘10操作。程序如下:MOV AH,00H SAL AX,1;2x MOV BX,AX SAL AX,1;4x SAL AX,1;8x ADD AX,BX;8x+2x=10 x,16,移位指令对标志的影响,按照移入的位设置进位标志CF根据移位后的结果影响SF、ZF、PF对AF没有定义在移

8、位次数为1的情况下,如果移位结束后,CF和保存结果的操作数的最高位相等,则OF=0;否则OF=1。若移位次数大于1时,OF为不确定状态。,不含进位的循环左移指令 ROL(Rotate Left)不含进位的循环右移指令 ROR(Rotate Right)含进位位的循环左移指令 RCL(Rotate through CF Left)含进位位的循环右移指令 RCR(Rotate through CF Right)格式同非循环移位指令。移位位数放在CL寄存器中,如果只移1位,也可以直接写在指令中。循环移位指令只影响标志位CF和OF。,(2)循环移位指令,不带进位循环移位指令,带进位循环移位指令,20,

9、循环移位指令对标志的影响,按照指令功能设置进位标志CF不影响SF、ZF、PF、AF如果进行一位移动,则按照操作数的最高符号位是否改变,相应设置溢出标志OF:如果移位前的操作数最高位与移位后操作数的最高位不同(有变化),则OF=1;否则OF=0。当移位次数大于1时,OF不确定,例14:32位数移位,;将DX.AX中32位数值左移一位shl ax,1rcl dx,1,用移位操作代替乘除法可提高运算速度例:前例中计算 x10。(1)采用乘法指令:MOVBL,10 MULBL 共需7077个T周期。(2)采用移位和加法指令:SALAL,1;2T MOVAH,AL;2T SALAL,1;2T SALAL

10、,1;2T ADDAL,AH;3T 只需11个T周期,仅相当于乘法的1/7。,23,循环移位举例:,例15:将AL的高4位与低4位互换。MOV CL,4 ROL AL,CL例16:将1A00H内存单元中的双字循环左移1位(暂不讲)。CMP 1A00H,8000H CMC RCL WORD PTR1A02H,1 RCL WORD PTR1A00H,1,例17(暂不讲):设在1000H开始存有四个压缩的BCD码12、34、56、78。要求把它们转换为ASCII码存放在3000H开始的单元中。假定DS、ES都已设置为数据段的段基址。程序见下页。,1000H,3000H,12,34,56,78,32H

11、,31H,34H,33H,36H,35H,38H,37H,MOV SI,1000H;SIBCD首址 MOV DI,3000H;DIASCII首址 MOV BX,4;置计数器初值BBB:MOV AL,SI;ALBCD码,第一次取12H AND AL,0FH;屏蔽高4位02H OR AL,30H;转换为ASCII码32H STOSB;保存结果 LODSB MOV CL,4 SHR AL,CL;逻辑右移4位 OR AL,30H;得到高4位ASCII码 STOSB;保存结果 DEC BX;(BX)(BX)-1 JNZ BBB;(BX)0,则继续循环,26,3.3.4 串操作类指令,串操作指令是8086

12、指令系统中比较独特的一类指令,采用比较特殊的数据串寻址方式,在操作主存连续区域的数据时,特别好用、因而常用重点掌握:MOVS STOS LODSCMPS SCAS REP一般了解:REPZ/REPE REPNZ/REPNE,27,串数据类型,串操作指令的操作数是主存中连续存放的数据串(String)即在连续的主存区域中,字节或字的序列串操作指令的操作对象是以字(W)为单位的字串,或是以字节(B)为单位的字节串,28,串寻址方式,源操作数用寄存器SI寻址,默认在数据段DS中,但允许段超越:DS:SI目的操作数用寄存器DI寻址,默认在附加段ES中,不允许段超越:ES:DI每执行一次串操作指令,SI

13、和DI将自动修改:1(对于字节串)或2(对于字串)(DF决定)执行指令CLD指令后,DF=0,地址指针增1或2(P43 DF)执行指令STD指令后,DF=1,地址指针减1或2(注意:退出串操作后,指针指向最后操作的元素的下一个元素),重复前缀有的串操作指令前面可加上重复前缀REP。当使用REP前缀时,该指令重复执行,重复执行次数由CX决定(带有REP前缀的串操作指令每执行一次,CX自动减1)。重复前缀包括:REP CX0 时重复执行REPE/REPZ CX0ZF=1时重复执行REPNE/REPNZ CX0ZF=0时重复执行,串指令使用的一般方法,设置源串地址,设置目标串地址,设置串长度,设置操

14、作方向DF,串指令,MOV SI,源串首地址(或LEA SI,源串),MOV DI,目的串首地址(或LEA DI,目的串),MOV CX,串长度,CLD(DF=0,地址增)(或STD(DF=1地址减),串指令,指令执行的操作为:MOVSB:(ES):(DI)(DS):(SI)SI1,DI1MOVSW:(ES):(DI+1)(DI)(DS):(SI+1)(SI)SI2,DI2 指令也可写成:MOVS dest,src但要求:src用DS:SI寻址,dest用ES:DI寻址 传送是字节还是字,由操作数的类型决定,串传送指令MOVSB/MOVSW,例18:字节串传送,mov si,offset so

15、urce(源串元素变量名)mov di,offset destinationmov cx,100;cx传送次数cld;置DF=0,地址增加again:movsb;传送一个字节dec cx;传送次数减1jnz again;判断传送次数cx是否为0;不为0,则到again位置执行指令;否则,结束,演示,例19:字串传送,mov si,offset sourcemov di,offset destinationmov cx,50;cx传送次数cld;置DF=0,地址增加again:movsw;传送一个字dec cx;传送次数减1jnz again;判断传送次数cx是否为0;不为0,则到again位置

16、执行指令;否则,结束,34,串比较指令CMPSB/CMPSW,指令执行的操作为:CMPSB:(DS):(SI)-(ES):(DI)SI1,DI1 CMPSW:(DS):(SI+1)(SI)-(ES):(DI+1)(DI)SI2,DI2 指令也可写成:CMPS dest,src比较的结果只反映在标志位上,串本身无变化。本指令可用来检查两个串是否相等。通过重复前缀的控制,利用CMPSB/CMPSW,可以实现在两个字符串中寻找第一个不相等的元素或第一个相等的元素.,例20a:比较字符串,mov si,offset string1mov di,offset string2mov cx,countcld

17、again:cmpsb;比较两个字符jnz unmat;有不同字符,转移dec cxjnz again;进行下一个字符比较mov al,0;字符串相等,设置00hjmp output;转向outputunmat:mov al,0ffh;设置ffhoutput:mov result,al;输出结果标记,例20b:比较字符串,mov si,offset string1mov di,offset string2mov cx,countcldrepz cmpsb;重复比较两个字符jnz unmat;字符串不等,转移mov al,0;字符串相等,设置00hjmp output;转向outputunmat

18、:mov al,0ffh;设置ffhoutput:mov result,al;输出结果标记,解释,37,串扫描SCASB/SCASW,执行的操作:对字节:(AL)(ES):(DI)DI1 对字:(AX)(ES):(DI1)(DI)DI2搜索指令执行的仍是比较(减法)操作,结果只影响标志位。要搜索的关键字放在AL(字节)或AX(字)中。本指令用于在串中查找指定的信息。,38,SCAS指令加上重复前缀后,可对串进行连续扫描比较:若前缀为REPZ,则表示比较结果相等且(ZF=1)且串未结束(CX0),则继续比较。(找出第一个不相等的串元素。)若前缀为REPNZ,则表示比较结果不相等(ZF=0)且串未

19、结束(CX0)就继续比较(找出第一个相等的串元素)。,例21a:查找字符串,mov di,offset stringmov al,20h;(空格)mov cx,countcldagain:scasb;搜索jz found;为0(ZF=1),发现空格dec cx;不是空格jnz again;搜索下一个字符.;不含空格,则继续执行found:.,40,执行的操作为:对字节:(AL)(DS):(SI)SI1 对字:(AX)(DS):(SI+1)(SI)SI2 串装入指令通常不加重复前缀。LODSB等价于:LODSW等价于:MOV AL,SI MOV AX,SI INC SI INC SI INC S

20、I,串装入指令LODSB/LODSW,41,指令的操作为:对字节:(ES):(DI)(AL)DI1 对字:(ES):(DI+1)(DI)(AX)DI2把AL或AX数据传送至目的地址,串存储指令STOSB/STOSW,例22:串存储,mov ax,0mov di,0mov cx,8000h;cx传送次数cld;DF=0,地址增加again:stosw;传送一个字dec cx;传送次数减1jnz again;传送次数cx是否为0,可将CLD改为STD吗?如何改用STOSB?可不用给DI赋值吗?,DI为偶数即可,例23:把从A000H开始的2KB内存单元清零。程序段如下:MOV DI,0A000H

21、MOV AX,0 MOV CX,1024;1024=210=1KB(p19)CLD REP STOSW,例24:把1000H开始的100个存储单元填入 ASCII码2AH(*)。程序段如下:MOV DI,1000H;首地址 MOV AL,2AH;*MOV CX,100;重复执行100次 CLD;增量修改DI REPSTOSB,45,重复前缀指令(repeat),串操作指令执行一次,仅对数据串中的一个字节或字量进行操作。但是串操作指令前,都可以加一个重复前缀,实现串操作的重复执行。重复次数隐含在CX寄存器中重复前缀分2类,3条指令:配合不影响标志的MOVS、STOS(和LODS)指令的REP前缀

22、配合影响标志的CMPS和SCAS指令的REPZ和REPNZ前缀,46,REP重复前缀指令,REP前缀可以理解为:当数据串没有结束(CX0),则继续传送例 25和例 26中,程序段的最后3条指令,可以分别替换为:REP MOVSB 和 REP STOSW,REP;每执行一次串指令,CX减1;直到CX0,重复执行结束,重复串传送(例25),mov si,offset sourcemov di,offset destinationmov cx,100;cx传送次数cldrep movsb,again:movsb;传送一个字节dec cx;传送次数减1jnz again;判断传送次数cx是否为0;不为

23、0(ZF=0),则转移again位置执行;否则,结束,演示,重复串存储(例26),mov ax,0mov di,0mov cx,8000hcldrep stosw,again:stosw;传送一个字dec cx;传送次数减1jnz again;判断传送次数cx是否为0,49,REPZ重复前缀指令,REPZ/REPE前缀可以理解为:当数据串没有结束(CX0),并且串相等(ZF1),则继续比较,(直到找到第一个不相等的元素。,50,REPNZ重复前缀指令,REPNZ/REPNE前缀可以理解为:当数据串没有结束(CX0),并且串不相等(ZF0),则继续比较,(直到找到第一个相等的元素),51,重复比

24、较的解释,指令repz cmpsb结束重复执行的情况 ZF=0,即出现不相等的字符 CX=0,即比较完所有字符:这种情况下,如果ZF=0,说明最后一个字符不等;而ZF=1表示所有字符比较后都相等,也就是两个字符串相同所以,重复比较结束后,jnz unmat指令的条件成立ZF=0,表示字符串不相等,例20b:查找字符串,mov di,offset stringmov al,20hmov cx,countcldrepnz scasb;搜索jz found;为0(ZF=1),发现空格.;不含空格,则继续执行found:.,53,作业,1、假如想从200中减去AL的内容,用SUB 200,AL 是否正

25、确?如果不正确,应该用什麽方法?2、设AL3AH,则执行ADD AL,7CH后,AL?六个状态标志位分别为什么?3、设DS3000H,SI0040H,则指令SUB SI14H,0136H执行后,EA?目的数物理地址为多少?目的操作数为多少?对标志位的影响是什么?,54,4、假如:AL20H,BL10H,当执行CMP AL,BL后,问:(1)AL,BL中内容是两个无符号数,比较结果如何?影响几个标志位?(2)AL、BL中内容是两个有符号数,结果又如何?影响几个标志位?5、在编制乘法程序时,为什麽常用移位指令来代替乘法指令?试编写一个程序段,实现将BX中的数除以10,结果仍放在BX中。6、有如下程序:,55,6、有如下程序:MOV AL,45HADD AL,71HDAAMOV BL,ALMOV AL,19HADC AL,12HDAAMOV BH,AL执行后,BX?标志位PF?CF?,56,第3章 教学要求(4),熟悉串操作寻址特点掌握基本指令:ANDORXORNOTTEST、SHLSHRSAR、ROLRORRCLRCR、MOVSLODSSTOS、REP熟悉特色指令:CMPSSCAS了解不常使用的指令:REPZREPNZ,逻辑左移 SHL AL,1,串传送 MOVSB(正向 DF0),串传送 MOVSW(反向 DF1),REP MOVSB(正向 DF0),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号