北邮信通院微机原理第三章第四节_第1页
北邮信通院微机原理第三章第四节_第2页
北邮信通院微机原理第三章第四节_第3页
北邮信通院微机原理第三章第四节_第4页
北邮信通院微机原理第三章第四节_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、3.3.2 2.3 .3 逻辑运算和移位指令逻辑运算和移位指令11.1.逻辑运算指令逻辑运算指令( (ANDAND、OROR、XORXOR、NOTNOT) ) 运算规则:按位操作,无进运算规则:按位操作,无进/ /借位借位 对标志位的影响对标志位的影响( (除除NOTNOT指令外指令外) ): CF OF SF ZF PF AF 0 0 * * * 无定义无定义 根据运算结果设置根据运算结果设置 清空清空CF/OF有时利用这一点有时利用这一点(1) 逻辑逻辑”与与” AND对两个操作数进行按位逻辑对两个操作数进行按位逻辑“与与”操作。操作。格式:格式:AND dest, src用途:保留操作数

2、的某几位,清零其他位。用途:保留操作数的某几位,清零其他位。例例1:保留:保留AL中低中低4位,高位,高4位清位清0。 AND AL, 0FH例例2:AL中有字符中有字符az, 将其转换成大写。将其转换成大写。 AND AL, 01011111B2例例3:测试:测试AL的的bit7,bit5,bit2是否都是是否都是1。AND AL, 10100100BCMP AL, 10100100B JZ YES ; if match, go to YES ; if not match YES: ; goes here if all 1 3(2) 逻辑逻辑”或或” OR4对两个操作数进行按位逻辑对两个操作

3、数进行按位逻辑”或或”操作。操作。格式:格式:OR dest, src用途:对操作数的某几位置用途:对操作数的某几位置1;对两操作数;对两操作数 进行组合。进行组合。例:例:OR BX,00FFH ;BH保持不变,BL置为0FFH例:把例:把AL的第5位置为1 OR AL, 00100000B5(3) 逻辑逻辑“非非”(取反取反) NOT6对操作数进行按位逻辑对操作数进行按位逻辑”非非”操作。操作。格式格式:NOT mem/reg例:NOT CX NOT BYTE PTRDI(4) 逻辑逻辑”异或异或” XOR7对两个操作数按位进行”异或”操作。格式:XOR dest, src用途:对reg清

4、零(自身异或) 把reg/mem的某几位变反(与1异或) 例1:把AX寄存器清零。 例2:把DH的bit4,3变反 MOV AX,0 XOR DH,18H XOR AX,AX AND AX,0 SUB AX,AX (5) 测试指令测试指令TEST8操作与AND指令类似,但不将”与”的结果送回,只影响标志位。TEST指令常用于位测试,与条件转移指令一起用。例:测试AL的内容是否为负数。 TEST AL,80H ;检查AL中D7=1? JNZ MINUS ;是1(负数),转MINUS ;否则(正数)不转移MINUS: 2 2. .移位指令移位指令( (1 1) )非循环移位指令非循环移位指令 算术

5、左移指令 SAL(SAL(Shift Arithmetic LeftShift Arithmetic Left) ) 算术右移指令 SAR(SAR(Shift Arithmetic RightShift Arithmetic Right) ) 逻辑左移指令 SHL(SHL(Shift LeftShift Left) ) 逻辑右移指令 SHR(SHR(Shift RightShift Right) )这4条指令的格式相同,以SAL为例: SAL mem/reg,9CL ;移位位数大于1时1 ;移位位数等于1时移位指令执行的操作如下图所示:移位指令执行的操作如下图所示:10最低位最高位CF0(a)

6、算术/逻辑左移 SAL/SHL最低位最高位CF(b)算术右移 SAR最低位最高位CF(c)逻辑右移 SHR0非循环移位指令功能示意图非循环移位指令功能示意图算术移位把操作数看做有符号数; 逻辑移位把操作数看做无符号数。移位位数放在CL寄存器中,如果只移1位,也 可以直接写在指令中。例如: MOV CL,4 SHR AL,CL ;AL中的内容右移4位影响C,P,S,Z,O标志。结果未溢出时: 左移1位操作数*2 右移1位操作数/211例:把AL中的数x乘10因为10=8+2=23+21,所以可用移位实现乘10操作。程序如下:SAL AL,1 ; 2xMOV AH,AL SAL AL,1 ; 4x

7、 SAL AL,1 ; 8x ADD AL,AH ; 8x+2x = 10 x12l用移位操作代替乘除法可提高运算速度例:前例中计算 x10。(1)采用乘法指令: MOV BL,10 MUL BL 共需7077个T周期。(2)采用移位和加法指令: SAL AL,1 ; 2T MOV AH,AL ; 2T SAL AL,1 ; 2T SAL AL,1 ; 2T ADD AL,AH ; 3T 只需11个T周期,仅相当于乘法的1/7。13(2)(2)循环移位指令循环移位指令14 不含进位位的循环左移指令 ROLROL 不含进位位的循环右移指令 RORROR 含进位位的循环左移指令 RCLRCL 含进

8、位位的循环右移指令 RCRRCR格式同非循环移位指令。移位位数放在CL寄存器中,如果只移1位, 也可以直接写在指令中。循环移位指令只影响标志位CF和OF。这这4 4条指令的功能如下图示:条指令的功能如下图示:15最低位最高位CF(a) ROL最低位最高位CF(c) RCL最低位最高位CF(b) ROR最低位最高位CF(d) RCR循环移位指令功能示意图循环移位指令功能示意图循环移位举例:例1:将AL的高4位与低4位互换。 MOV CL,4 ROL AL,CL例3-25 执行以下指令序列后AX=3347H,CF=1: MOV AX,99A3H ;AX置99A3H OR AX,0;AX值不变,但置

9、CF为0 ROL AX,1;对AX进行循环左移 16串传送指令使用举例例例3-26 在数据段中偏移地址为在数据段中偏移地址为1000H开始的存储区开始的存储区内有一(字节)字符串,其长度为内有一(字节)字符串,其长度为100,要求把它,要求把它们传送到附加段中偏移地址为们传送到附加段中偏移地址为2000H开始的一片开始的一片缓冲区内。实现该功能的程序片段如下:缓冲区内。实现该功能的程序片段如下: MOV SI,1000H;置源串偏移地址;置源串偏移地址 MOV DI,2000H;置目的串偏移地址;置目的串偏移地址 MOV CX,100 ;置串长度;置串长度 CLD ;方向标志复位;方向标志复位

10、 REP MOVSB ;字符串传送;字符串传送173.2.4 串操作指令18 串:顺序放在内存中的一组相同类型的数据。 串操作:对串中的元素进行相同的操作。 串操作的寻址方式: 源操作数指针DS:SI(DS可超越) 目的操作数指针ES:DI 每次串操作后: 串操作指令自动修改SI和DI字节1,字2。DF标志决定(DF=0,;DF=1,)。(注意:退出串操作后,指针指向最后操作的元素的下一个元素) 可完成两个存储单元之间的传送、比较、搜索、存取 操作(也仅是串指令可以) 字符串长度默认在CX中,涉及存取或搜索的串操作指令,存取或搜索的关键字默认在AL(或AX)中。19表表3.2.2 3.2.2

11、重复前缀重复前缀 (1) 若 (CX) 0或ZF = 1,则退出,否则CX = CX - 1;(2) 执行后续指令;(3) 重复 (1)、(2) 步骤。REPNE或REPNZ(1) 若 (CX) 0或ZF = 0,则退出,否则CX = CX - 1;(2) 执行后续指令;(3) 重复 (1)、(2) 步骤。REPE或REPZ(1) 若 (CX) 0,则退出,否则CX = CX - 1;(2) 执行后续指令;(3) 重复 (1)、(2) 步骤。REP功能功能重复前重复前缀缀串指令使用的一般方法串指令使用的一般方法20设置源串地址设置源串地址设置目标串地址设置目标串地址设置串长度设置串长度设置操作

12、方向设置操作方向DF串指令串指令MOV SI, 源串首地址源串首地址(或(或LEA SI, 源串)源串)MOV DI, 目的串首地址目的串首地址(或(或LEA DI, 目的串)目的串)MOV CX, 串长度串长度CLD(或(或STD)串指令串指令串传送指令MOVSB / MOVSW21指令执行的操作为:MOVSB: (ES):(DI)(DS):(SI) SI1, DI1 MOVSW: (ES):(DI+1)(DI)(DS):(SI+1)(SI) SI2, DI2 指令也可写成:MOVS dest,src但要求: src用DS:SI寻址,dest用ES:DI寻址 传送是字节还是字,由操作数的类型

13、决定串传送指令使用举例例例3-26 在数据段中偏移地址为在数据段中偏移地址为1000H开始的存储区开始的存储区内有一(字节)字符串,其长度为内有一(字节)字符串,其长度为100,要求把它,要求把它们传送到附加段中偏移地址为们传送到附加段中偏移地址为2000H开始的一片开始的一片缓冲区内。实现该功能的程序片段如下:缓冲区内。实现该功能的程序片段如下: MOV SI,1000H;置源串偏移地址;置源串偏移地址 MOV DI,2000H;置目的串偏移地址;置目的串偏移地址 MOV CX,100 ;置串长度;置串长度 CLD ;方向标志复位;方向标志复位 REP MOVSB ;字符串传送;字符串传送2

14、2串比较指令CMPSB / CMPSW23指令执行的操作为:CMPSB: (DS):(SI)-(ES):(DI) CMPSW: (DS):(SI+1)(SI)-(ES):(DI+1)(DI) 比较的结果只反映在标志位上,串本身无变化。本指令可用来检查两个串是否相等。串比较指令使用举例 例例3-27 在数据段中偏移地址为在数据段中偏移地址为1000H开始的存储区内有开始的存储区内有一(字节)字符串,其长度为一(字节)字符串,其长度为100,同样在附加段中偏移,同样在附加段中偏移地址为地址为2000H开始的存储区内也有一长度相等的(字节)开始的存储区内也有一长度相等的(字节)字符串,现要求找出它们

15、之间不相匹配的位置。字符串,现要求找出它们之间不相匹配的位置。 实现上实现上述功能的程序片段如下;述功能的程序片段如下; MOV SI,1000H ;装入源串偏移地址;装入源串偏移地址 MOV DI,2000H ;装入目的串偏移地址;装入目的串偏移地址 MOV CX,100 ;装入字符串长度;装入字符串长度 CLD ;方向标志复位;方向标志复位 REPE CMPSB上述程序段执行之后,上述程序段执行之后,SI或或DI的内容即为两字符串中第一个的内容即为两字符串中第一个不匹配字符的下一个字符的位置。若两字符串中没有不匹不匹配字符的下一个字符的位置。若两字符串中没有不匹配的字符,则当比较完毕后,配

16、的字符,则当比较完毕后,CX0。24串扫描SCASB / SCASW执行的操作: 对字节:(AL)(ES):(DI) DI1 对字: (AX)(ES):(DI1)(DI) DI2搜索指令执行的仍是比较(减法)操作,结果只影响标志位。要搜索的关键字放在AL(字节)或AX(字)中。本指令用于在串中查找指定的信息。2526进行连续扫描比较:若前缀为REPZ,则表示比较结果相等且(ZF=1)且串未结束(CX0),则继续比较。若前缀为REPNZ,则表示比较结果不相等(ZF=0)且串未结束(CX0)就继续比较。串扫描指令使用举例 例例3-28 在附加段中偏移地址为在附加段中偏移地址为2000H开始的存储开

17、始的存储区内有一长度为区内有一长度为100的(字节)字符串,要求在该的(字节)字符串,要求在该字符串中搜索空格符(字符串中搜索空格符(ASCII码为码为20H)。)。 实现此实现此功能的程序片段如下:功能的程序片段如下: MOV DI,2000H;装入目的串偏移地址;装入目的串偏移地址 MOV AL,20H ;装入关键字节;装入关键字节 MOV CX,100 ;装入字符串长度;装入字符串长度 REPNE SCASB上述程序执行之后,上述程序执行之后,DI的内容即为相匹配字符的下的内容即为相匹配字符的下一个字符的地址,一个字符的地址,CX中是剩下还未比较的字符个中是剩下还未比较的字符个数。若字符

18、串中没有所要搜索的关键字节,则当数。若字符串中没有所要搜索的关键字节,则当查完之后查完之后CX0。27例:在ES段的偏移1000H开始处存有10个ASCII码。搜索E,若找到则记下搜索次数及存放地址,并在屏幕上显示Y;若未找到则显示N。(见右图)在屏幕上显示一个字符的指令段如下: MOV DL, MOV AH,2 INT 21H 实现题目要求的程序段见下页:281000H414243444546ABCDF. . .ES段E补补 MOV DI, 1000H ;(DI)串偏移地址串偏移地址 MOV CX, 0AH ;(CX)串长度串长度 MOV AL, E ;搜索关键字搜索关键字=E CLD ;从

19、低地址到高地址进行搜索从低地址到高地址进行搜索 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 29补补4.串存储指令STOSB / STOSW30指令的操作为: 对字节:(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

提交评论