指令系统4逻辑运算和移位指令、串操作指令.ppt

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

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

1、1,3.3.3 逻辑运算和移位指令,逻辑运算指令(与/或/异或/非)运算规则:按位操作,无进/借位 对标志位的影响(除NOT指令外):,CF OF SF ZF PF AF 0 0*无定义,根据运算结果设置,注意:非指令NOT对标志无影响,2,表 4 3 逻辑运算类指令,3,(1)逻辑”与”AND,对两个操作数进行按位逻辑“与”操作。格式:AND dest,src用途:保留操作数的某几位,清零其他位。例1:保留AL中低4位,高4位清0。AND AL,0FH例2:AL中有字符az,将其转换成大写。AND AL,01011111B,4,例3:测试AL的bit7,bit5,bit2是否都是1。AND

2、AL,10100100BCMP AL,10100100B JZ YES;if match,go to YES;if not match YES:;goes here if all 1,5,对两个操作数进行按位逻辑”或”操作。格式:OR dest,src用途:对操作数的某几位置1;对两操作数进行组合。例1:把AL中的非压缩BCD码变成相应十进制 数的ASCII码。OR AL,30H,(2)逻辑”或”OR,6,例2:把AH和AL中的非压缩BCD码组合成压 缩的BCD码,放到AL中。MOV CL,4 SHL AH,CL OR AL,AH例3:把AL的第5位置为1 OR AL,00100000B,7,

3、对操作数进行按位逻辑”非”操作。格式:NOT mem/reg例:NOT CX NOT BYTE PTRDI,(3)逻辑“非”(取反)NOT,8,对两个操作数按位进行”异或”操作。格式:XOR dest,src用途:对reg清零(自身异或)把reg/mem的某几位变反(与1异或)例1:把AX寄存器清零。例2:把DH的bit4,3变反 MOV AX,0 XOR DH,18H XOR AX,AX AND AX,0 SUB AX,AX,(4)逻辑”异或”XOR,9,操作与AND指令类似,但不将”与”的结果送回,只影响标志位。AND与TEST间的区别类似于SUB与CMP间的区别作用:TEST指令常用于位

4、测试,与条件转移指令一起用。例:测试AL的内容是否为负数。TEST AL,80H;检查AL中D7=1?JNZ MINUS;是1(负数),转MINUS;否则(正数)不转移MINUS:,(5)测试指令TEST,10,表4-4 移位操作类指令,2.移位指令,11,移位指令功能示意,算术左移指令,算术右移指令,逻辑左移指令,逻辑右移指令,小循环右移指令,小循环左移指令,大循环左移指令,大循环右移指令,CF=,12,2.移位指令,(1)非循环移位指令 算术左移指令 SAL(Shift Arithmetic Left)算术右移指令 SAR(Shift Arithmetic Right)逻辑左移指令 SHL

5、(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,算术移位把操作数看做有符号数;逻辑移位把操作数看做无符号数。移位位数:一般放在CL寄存器中,但如果只移1位,也可以直接写在指令中。例如:MOV CL,4 SHR AL,CL;AL中的内容右移4位对Fla

6、gs影响:影响CF,PF,SF,ZF,OF标志。移位效果:结果未溢出时:左移1位操作数 2 右移1位操作数 2,15,例:把AL中的数 x 10因为10=8+2=23+21,所以可用移位实现乘10操作。程序如下:SAL AL,1;2xMOV AH,AL SAL AL,1;4x SAL AL,1;8x ADD AL,AH;8x+2x=10 x,16,不含CF的(小)循环左移指令 ROL 不含CF的(小)循环右移指令 ROR 含CF的(大)循环左移指令 RCL 含CF的(大)循环右移指令 RCR格式同非循环移位指令。移位位数一般放在CL寄存器中 但如果只移1位,也可直接写在指令中。对Flags的影

7、响:只影响标志位CF和OF。,(2)循环移位指令,17,这4条指令的功能如下图示:,最低位,最高位,CF,(a)ROL,最低位,最高位,CF,(c)RCL,最低位,最高位,CF,(b)ROR,最低位,最高位,CF,(d)RCR,循环移位指令功能示意图,18,用移位操作代替乘除法可提高运算速度例:前例中计算 x10。(1)采用乘法指令:MOVBL,10 MULBL 共需7077个T周期。(2)采用移位和加法指令:SALAL,1;2T MOVAH,AL;2T SALAL,1;2T SALAL,1;2T ADDAL,AH;3T 只需11个T周期,仅相当于乘法的1/7。,19,循环移位举例:,例1:将

8、AL的高4位与低4位互换。MOV CL,4 ROL AL,CL例2:将1A00H内存单元中的双字(32位)循环左移1位。CMP 1A00H,8000H CMC RCL WORD PTR1A02H,1 RCL WORD PTR1A00H,1,20,例:设在1000H开始存有四个压缩的BCD码12、34、56、78。要求把它们转换为ASCII码存放在3000H开始的单元中。假定DS、ES都已设置为数据段的段基址。程序见下页。,1000H,3000H,12,34,56,78,32H,31H,34H,33H,36H,35H,38H,37H,SI=,DI=,BX=4,21,MOV SI,1000H;SI

9、BCD首址 MOV DI,3000H;DIASCII首址 MOV BX,4;置计数器初值BBB:MOV AL,SI;ALBCD码,第一次取12H AND AL,0FH;屏蔽高4位02H OR AL,30H;转换为ASCII码32H STOSB;保存结果,等价MOVDI,AL INC DI LODSB;MOV AL,SI INC SI MOV CL,4 SHR AL,CL;逻辑右移4位 OR AL,30H;得到高4位ASCII码 STOSB;保存结果,等价MOVDI,AL INC DI DEC BX;(BX)(BX)-1 JNZ BBB;(BX)0,则继续循环,22,作业,P152-P153 3

10、.1、3.2、3.7、3.9、3.13、3.16,23,3.3.4 串操作指令,串:顺序放在内存中的一组相同类型的数据。串操作:对串中的元素进行相同的操作。串操作的寻址方式:源操作数指针 DS:SI(DS可超越)目的操作数指针 ES:DI 数据块长度 CX功能:可完成两个存储单元之间的传送MOVS、比较CMPS、搜索SANS、读LODS、写STOS 5种操作(也仅是串指令可以)。一次操作对象为16位(W)或8位(B)数据,但为下一次操作做了准备。,24,串操作指令执行动作示意图,自动循环-加前缀REP REPE/REPZ REPNE/REPNZ,(a)方向标志DF=0,(b)方向标志位DF=1

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

12、方向DF,串指令,MOV SI,源串首地址(或LEA SI,源串),MOV DI,目的串首地址(或LEA DI,目的串),MOV CX,串长度,CLD(或STD),串指令,注意:DS与ES一般在完整程序的开始处设置,在此串指令的程序段中不必重复设置,28,指令执行的操作为:MOVSB:ES:DIDS:SI SISI1,DI DI1 MOVSW:ES:DI+1DIDS:SI+1SI SI SI2,DI DI2 指令也可写成:MOVS dest,src(即无B或W标识)但要求:src用DS:SI寻址,dest用ES:DI寻址 传送是字节还是字,由操作数的类型决定,串传送指令MOVSB/MOVSW,

13、29,串传送指令使用举例,用串传送指令实现200个字节的数据传送:LEA SI,MEM1 LEA DI,MEM2 MOV CX,200 CLD REP MOVSB HLT,30,串比较指令CMPSB/CMPSW,指令执行的操作为:CMPSB:ES:DI-DS:SI SISI1,DI DI1 CMPSW:ES:DI+1DI-DS:SI+1SI SI SI2,DI DI2 比较的结果只反映在标志位上,串本身无变化。本指令可用来检查两个串是否相等。,格式:CMPS OPRD1,OPRD2 CMPSB CMPSW,31,串比较指令举例,JZ STOP DEC SI MOV AL,SI MOV BX,S

14、ISTOP:HLT,测试内存中两块200个字节数据是否相同,并找出第一个不相等字符的地址,将该地址和字符存贮起来。,LEA SI,MEM1LEA DI,MEM2MOV CX,200CLD REPE CMPSB,32,串扫描SCASB/SCASW,执行的操作:对字节:ALES:DI DIDI1 对字:AXES:DI1DI DI DI2搜索指令执行的仍是比较(减法)操作,结果只影响标志位。要搜索的关键字放在AL(字节)或AX(字)中。本指令用于在串中查找指定的信息。,格式:SCAS OPRD SCASB SCASW,33,SCAS指令加上重复前缀后,可对串进行连续扫描比较:若前缀为REPZ,则表示

15、比较结果相等且(ZF=1)且串未结束(CX0),则继续比较。若前缀为REPNZ,则表示比较结果不相等(ZF=0)且串未结束(CX0)就继续比较。,34,例:在ES段的偏移1000H开始处存有10个ASCII码。搜索E,若找到则记下搜索次数及存放地址,并在屏幕上显示Y;若未找到则显示N。(见右图)在屏幕上显示一个字符的指令段如下:(参见附录C.3 DOS功能调用)MOV DL,MOV AH,2 INT 21H 实现题目要求的程序段见下页:,1000H,41,42,43,44,45,46,A,B,C,D,F,.,ES段,E,35,MOV DI,1000H;(DI)串偏移地址 MOV CX,0AH;

16、(CX)串长度 MOV AL,E;搜索关键字=E CLD;从低地址到高地址进行搜索 REPNZ SCASB;若未找到,继续搜索 JZ FOUND;找到,转至FOUND MOV DL,N;串中无E,(DL)N JMP DONE;转至DONEFOUND:DEC DI;指针回退 MOV ADDR,DI;ADDRE的地址 SUB DI,1000H MOV NUM,DI;NUM搜索次数 MOV DL,Y;(DL)YDONE:MOV AH,2 INT 21H;显示字符 HLT,36,执行的操作为:对字节:ALDS:SI SISI1 对字:AXDS:SI+1SI SISI2 串装入指令通常不加重复前缀。LO

17、DSB等价于:LODSW等价于:MOV AL,SI MOV AX,SI INC SI INC SI INC SI,串装入指令LODSB/LODSW,格式:LODS OPRD LODSB LODSW,37,36H,32H,39H,31H,STRING1,STRING2,38H,35H,36H,33H,被加数,加数,数据段,8,5,6,2,9,1,6,3,SUM,结果,.,.,07H,07H,02H,06H,265836196277,LEA SI,STRING1 LEA DI,STRING2 LEA BX,SUM MOV CX,4 CLC AGAIN:MOV AL,SI ADC AL,DI AAA

18、 MOV BX,AL INC SI INC DI INC BX DEC CX JNZ AGAIN,38,下面要求将两个4字节的ASCII码数据求和,并将和的结果送显示。为此,要先化成ASCII码再送显示,程序段如下:LEA SI,SUM+3;(SI)SUM+3 MOV CX,4;(CX)和长度 STD;置DF=1,减量修改SI MOV AH,02;(AH)功能号LP:LODSB;取BCD码至AL,且SISI-1 ADD AL,30H;转换为ASCII码 MOV DL,AL;(DL)字符 INT 21H;显示字符 DEC CX JNZ LP,39,指令的操作为:对字节:ES:DIAL DIDI1

19、 对字:ES:DI+1DIAX DIDI2本指令用于把一块存储区域填充成某一初始值(即对存储区进行初始化)。存储区域的首地址要预先设置到ES:DI中。要存储到串中的数据要预先存到AL(AX)中。,串存储指令STOSB/STOSW,格式:STOS OPRD STOSB STOSW,40,例1:把从A000H开始的2KB内存单元清零。程序段如下:MOV DI,0A000H MOV AX,0 MOV CX,1024 CLD REP STOSW,41,例2:把1000H开始的100个存储单元填入 ASCII码2AH(*)。程序段如下:MOV DI,1000H;首地址 MOV AL,2AH;*=2AH MOV CX,100;重复执行100次 CLD;增量修改DI REPSTOSB,MOV DI,1000H MOV CX,64H MOV AL,2AHAGAIN:MOV DI,AL INC DI DEC CX JNZ AGAIN HLT,请对比,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号